我想让我的圆形 div 包含其中的文本,就像您在图像中所见
如何使用 CSS 实现这一点? 因为我的圆形 div,将使文本看起来像方形。 http://jsfiddle.net/kUJq8/
div {
width: 320px;
height: 320px;
border-radius: 50%;
background: #333;
color: #FFF;
}
我想让我的圆形 div 包含其中的文本,就像您在图像中所见
如何使用 CSS 实现这一点? 因为我的圆形 div,将使文本看起来像方形。 http://jsfiddle.net/kUJq8/
div {
width: 320px;
height: 320px;
border-radius: 50%;
background: #333;
color: #FFF;
}
现在,shape-outside
可以是一个选项:
https://developer.mozilla.org/en-US/docs/Web/CSS/shape-outside
shape-outside
CSS 属性定义了一个形状(可以是非矩形),周围的相邻行内内容应该绕过该形状。默认情况下,行内内容绕过其边缘框;shape-outside
提供了一种自定义这种包装的方式,使得文本可以围绕复杂的对象而不是简单的盒子环绕。
shape-outside
的浏览器支持情况图像或渐变可用于绘制形状,使文本远离它们。
对于圆形,需要4个片段,可以从伪元素中产生。
div:not([class]) {
width: 10em;
height: 10em;
border-radius: 50%;
background: #333;
}
div[class]:before {
content: '';
float: left;
clear: left;
height: 5em;
width: 5em;
background: radial-gradient( circle at bottom right, transparent 69%, red 69%);
}
div[class][id]:before {
background: radial-gradient( circle at top right, transparent 69%, red 69%);
}
div[class]:after {
content: '';
float: right;
clear: right;
height: 5em;
width: 5em;
background: radial-gradient( circle at bottom left, transparent 69%, red 69%);
}
div[class][id]:after {
background: radial-gradient( circle at top left, transparent 69%, red 69%);
}
/* extra */
html {
display: flex;
height: 100%;
}
body {
background: #399;
margin: auto;
}
<div>
<div class=shape></div>
<div class=shape id=idAttribute></div>
</div>
div:not([class]) {
/* em is to manage the text length and so is the font-sfamily and line-height */
font-family:verdana;
font-size:16px;
line-height:1.25em;
text-align:justify;
width: 10em;
height: 10em;
border-radius: 50%;
background: #333;
color:#fff;
}
div[class]:before {
content: '';
float: left;
clear: left;
height: 5em;
width: 5em;
/*background*/ shape-outside: radial-gradient( circle at bottom right, transparent 69%, red 69%);
}
div[class][id]:before {
/*background*/ shape-outside: radial-gradient( circle at top right, transparent 69%, red 69%);
}
div[class]:after {
content: '';
float: right;
clear: right;
height: 5em;
width: 5em;
/*background*/ shape-outside: radial-gradient( circle at bottom left, transparent 69%, red 69%);
}
div[class][id]:after {
/*background*/ shape-outside: radial-gradient( circle at top left, transparent 69%, red 69%);
}
/* extra */
html {
display: flex;
height: 100%;
}
body {
background: #399;
margin: auto;
}
<div>
<div class=shape></div>
<div class=shape id=idAttribute></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies.
</div>
这是您的代码示例,现已更新以与https://codepen.io/gc-nomade/pen/zQVoWO一起使用。
我们还可以考虑使用CSS变量,以便根据文本内容轻松调整代码:
div:not([class]) {
/* em is to manage the text length and so is the font-sfamily and line-height */
--s:10em; /*Size of the circle */
font-family:verdana;
font-size:16px;
line-height:1.25em;
text-align:justify;
width: var(--s);
height: var(--s);
border-radius: 50%;
background: #333;
color:#fff;
display:inline-block;
vertical-align:middle;
margin:5px;
}
div[class]:before {
content: '';
float: left;
clear: left;
height: calc(var(--s)/2);
width: calc(var(--s)/2);
/*background*/ shape-outside: radial-gradient( circle at bottom right, transparent 69%, red 69%);
}
div[class][id]:before {
/*background*/ shape-outside: radial-gradient( circle at top right, transparent 69%, red 69%);
}
div[class]:after {
content: '';
float: right;
clear: right;
height: calc(var(--s)/2);
width: calc(var(--s)/2);
/*background*/ shape-outside: radial-gradient( circle at bottom left, transparent 69%, red 69%);
}
div[class][id]:after {
/*background*/ shape-outside: radial-gradient( circle at top left, transparent 69%, red 69%);
}
/* extra */
body {
background: #399;
margin: 0;
}
<div>
<div class=shape></div>
<div class=shape id=idAttribute></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies.
</div>
<div style="--s:20em">
<div class=shape></div>
<div class=shape id=idAttribute></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci. orci. rat
</div>
radial-gradient还有另一种语法:
div:not([class]) {
/* em is to manage the text length and so is the font-sfamily and line-height */
--s:10em; /*Size of the circle */
font-family:verdana;
font-size:16px;
line-height:1.25em;
text-align:justify;
width: var(--s);
height: var(--s);
border-radius: 50%;
background: #333;
color:#fff;
display:inline-block;
vertical-align:middle;
margin:5px;
}
div[class]:before {
content: '';
float: left;
clear: left;
height: calc(var(--s)/2);
width: calc(var(--s)/2);
/*background*/ shape-outside: radial-gradient(farthest-side at bottom right, transparent 100%, red 0);
}
div[class][id]:before {
/*background*/ shape-outside: radial-gradient(farthest-side at top right, transparent 100%, red 0);
}
div[class]:after {
content: '';
float: right;
clear: right;
height: calc(var(--s)/2);
width: calc(var(--s)/2);
/*background*/ shape-outside: radial-gradient(farthest-side at bottom left, transparent 100%, red 0);
}
div[class][id]:after {
/*background*/ shape-outside: radial-gradient(farthest-side at top left, transparent 100%, red 0);
}
/* extra */
body {
background: #399;
margin: 0;
}
<div>
<div class=shape></div>
<div class=shape id=idAttribute></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies.
</div>
<div style="--s:20em">
<div class=shape></div>
<div class=shape id=idAttribute></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci. orci. rat ultri cies Pel lentes
</div>
我们可以添加一个额外的变量来模拟填充:
div:not([class]) {
/* em is to manage the text length and so is the font-sfamily and line-height */
--s:10em; /*Size of the circle */
--p:0px; /*padding*/
font-family:verdana;
font-size:16px;
line-height:1.25em;
text-align:justify;
width: var(--s);
height: var(--s);
border-radius: 50%;
background: #333;
color:#fff;
display:inline-block;
vertical-align:middle;
margin:5px;
}
div[class]:before {
content: '';
float: left;
clear: left;
height: calc(var(--s)/2);
width: calc(var(--s)/2);
/*background*/ shape-outside: radial-gradient(farthest-side at bottom right, transparent calc(100% - var(--p)), red 0);
}
div[class][id]:before {
/*background*/ shape-outside: radial-gradient(farthest-side at top right, transparent calc(100% - var(--p)), red 0);
}
div[class]:after {
content: '';
float: right;
clear: right;
height: calc(var(--s)/2);
width: calc(var(--s)/2);
/*background*/ shape-outside: radial-gradient(farthest-side at bottom left, transparent calc(100% - var(--p)), red 0);
}
div[class][id]:after {
/*background*/ shape-outside: radial-gradient(farthest-side at top left, transparent calc(100% - var(--p)), red 0);
}
/* extra */
body {
background: #399;
margin: 0;
}
<div >
<div class=shape></div>
<div class=shape id=idAttribute></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies.
</div>
<div style="--s:20em;--p:15px">
<div class=shape></div>
<div class=shape id=idAttribute></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis.
</div>
<div style="float:left;clear:left;height:15px;width:130px"></div>
<div style="float:right;clear:right;height:15px;width:130px"></div>
目前正在标准化的CSS功能被称为“CSS形状”。
(注:“CSS Shapes”是CSS特性规范的名称;不要与仅在CSS中创建非矩形形状混淆,您已经完成了)
CSS Shapes功能将完全实现您的要求-即允许您指定元素的形状,包括文本(和/或外部)应如何换行。
您可以在网络上的各种文章中了解更多信息。以下是您可能想阅读的一些文章:
你还可以在这里阅读W3C规范文档:http://dev.w3.org/csswg/css-shapes/
然而(这是一个很大的“然而”),这个特性在浏览器中并不普遍可用。它仍在经历规范过程,并且具有非常有限的浏览器支持。
同时,你所要求的实际上非常难以实现。你可能被迫使用一堆占位符元素来围绕你想强制文本流动的区域。虽然不理想,但在这个新规范开始得到广泛支持之前,这可能是你最好的选择。
这是对@G-Cyr答案的扩展,我将考虑不同的语法和更少的代码。我还将依赖于shape-margin
来定义文本的填充,而不是在渐变中使用复杂的计算。
div.box {
--p: 0px; /*padding*/
text-align: justify;
width: 9em; /*Size of the circle */
aspect-ratio: 1;
border-radius: 50%;
}
.box > div {
height: 100%;
}
.box:before,
.box > div:before {
content: '';
float: left;
height: 100%;
width: 50%;
shape-outside: radial-gradient(farthest-side at var(--d, right), #0000 100%, #000 0);
shape-margin: var(--p);
}
.box>div:before {
float: right;
--d: left;
}
/* Irrelevant styles*/
body {
background: #399;
margin: 0;
}
div.box {
background: #333;
color: #fff;
display: inline-block;
vertical-align: middle;
margin: 5px;
font-size: 20px;
}
<div class="box">
<div> Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. cies. dolor ipsum</div>
</div>
<div class="box" style="width: 17em;--p:15px">
<div> Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place
rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Lorem ipsum</div>
</div>
一个带有自己的类和ID,并且也适用于Safari的版本:
#container {
--s: 400px;
--p: 10px;
font-family: verdana;
font-size: 16px;
line-height: 1.25em;
text-align: justify;
width: var(--s);
height: var(--s);
border-radius: 50%;
background: #333;
color: #fff;
display: inline-block;
vertical-align: middle;
margin: 5px
}
.circle:after,
.circle:before {
content: '';
height: calc(var(--s)/2);
width: calc(var(--s)/2)
}
.circle:before {
float: left;
clear: left;
shape-outside: radial-gradient(farthest-side at bottom right, transparent calc(100% - var(--p)), red 0)
}
#shape:before {
shape-outside: radial-gradient(farthest-side at top right, transparent calc(100% - var(--p)), red 0)
}
.circle:after {
float: right;
clear: right;
shape-outside: radial-gradient(farthest-side at bottom left, transparent calc(100% - var(--p)), red 0)
}
#shape:after {
shape-outside: radial-gradient(farthest-side at top left, transparent calc(100% - var(--p)), red 0)
}
<div id="container" style="--s:20em;--p:15px">
<div class="circle"></div>
<div class="circle" id="shape"></div>
Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis. Pel lentes que ultri cies. Lorem ipsum dolor sit amet, eget orci, tinci dunt place rat in sociis.
</div>
在相应的行之前,您还可以添加一个带有不同缩进的元素;这就是我做的(在具有圆形左下角的div上溢出文本)
头部或样式表中的CSS:
#indent5 {padding: 0 0 0 5px;}
#indent20 {padding: 0 0 0 20px;}
正文中的html:
<div style="text-align: justify;">
<p> führte und ihren unglückseligen Sohn Ignatius, der schnell wieder wegen seines Dementoren–Zuchtprogramms<br>
<span id="indent5">seinen Posten verlassen musste. Besonders Wilhelmina</span><br>
<span id="indent20">Tuft war oft hier und brachte die Leute in </span><br>
</p>
</div>
通常情况下,文本是一个块,但最后两行分别缩进了5和20像素;您仍然需要为每一行都这样做,但我认为这比放置div元素更容易。