CSS/HTML 复杂的形状
CSS/HTML complex shape
创建以下形状的最佳方法是什么?
你可以用一个元素和 :before
和 :after
伪元素来做到这一点。
.el {
position: relative;
display: inline-block;
text-align: center;
line-height: 100px;
background: #89C3EE;
margin: 50px 150px;
width: 100px;
height: 100px;
border: 3px solid #6295DC;
border-radius: 50%;
}
.el:before,
.el:after {
content: 'Text';
position: absolute;
height: 50px;
line-height: 50px;
width: 100px;
top: 50%;
transform: translateY(-50%);
background: #89C3EE;
border-top: 3px solid #6295DC;
border-bottom: 3px solid #6295DC;
}
.el:before {
width: 150px;
left: -143px;
}
.el:after {
right: -94px;
}
<div class="el">Text</div>
您可以查看以下codepen
<div class="bar">
<div class="left">
left Text
</div>
<div class="cirlce">
Circle
</div>
<div class="right">
Right Text
</div>
</div>
CSS
.bar{
margin-top:40px;
width:100%;
background:#ddd;
height:80px;
position:relative;
text-align:center;
}
.cirlce{
width:140px;
height:140px;
background:#ccc;
margin:0 auto;
position:absolute;
top:-30px;
left:0;
right:0;
border-radius:50%
}
.left{
left:0;
position: absolute;
}
.right{
right:0;
position: absolute;
}
一种方法是有 3 个单独的 divs
并给中间一个 border-radius
。
正如您从下面的代码片段中看到的那样,这将使您能够在每一列中包含多个段落(如果您需要的话)。
示例:
div {
position: relative;
display: inline-block;
width: 29vw;
padding: 2vw 1vw;
color: rgb(255,255,255);
font-size: 1vw;
background-color: rgb(255,0,0);
vertical-align: middle;
}
div p {
position: relative;
z-index: 12;
width: 22vw;
margin: 1vw auto;
}
div:nth-of-type(2) {
left: -7.5vw;
height: 26vw;
padding-top: 4vw;
text-align: center;
border-radius: 50%;
}
div:nth-of-type(2) p {
width: 15vw;
}
div:nth-of-type(3) {
left: -15vw;
text-align: right;
}
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
创建以下形状的最佳方法是什么?
你可以用一个元素和 :before
和 :after
伪元素来做到这一点。
.el {
position: relative;
display: inline-block;
text-align: center;
line-height: 100px;
background: #89C3EE;
margin: 50px 150px;
width: 100px;
height: 100px;
border: 3px solid #6295DC;
border-radius: 50%;
}
.el:before,
.el:after {
content: 'Text';
position: absolute;
height: 50px;
line-height: 50px;
width: 100px;
top: 50%;
transform: translateY(-50%);
background: #89C3EE;
border-top: 3px solid #6295DC;
border-bottom: 3px solid #6295DC;
}
.el:before {
width: 150px;
left: -143px;
}
.el:after {
right: -94px;
}
<div class="el">Text</div>
您可以查看以下codepen
<div class="bar">
<div class="left">
left Text
</div>
<div class="cirlce">
Circle
</div>
<div class="right">
Right Text
</div>
</div>
CSS
.bar{
margin-top:40px;
width:100%;
background:#ddd;
height:80px;
position:relative;
text-align:center;
}
.cirlce{
width:140px;
height:140px;
background:#ccc;
margin:0 auto;
position:absolute;
top:-30px;
left:0;
right:0;
border-radius:50%
}
.left{
left:0;
position: absolute;
}
.right{
right:0;
position: absolute;
}
一种方法是有 3 个单独的 divs
并给中间一个 border-radius
。
正如您从下面的代码片段中看到的那样,这将使您能够在每一列中包含多个段落(如果您需要的话)。
示例:
div {
position: relative;
display: inline-block;
width: 29vw;
padding: 2vw 1vw;
color: rgb(255,255,255);
font-size: 1vw;
background-color: rgb(255,0,0);
vertical-align: middle;
}
div p {
position: relative;
z-index: 12;
width: 22vw;
margin: 1vw auto;
}
div:nth-of-type(2) {
left: -7.5vw;
height: 26vw;
padding-top: 4vw;
text-align: center;
border-radius: 50%;
}
div:nth-of-type(2) p {
width: 15vw;
}
div:nth-of-type(3) {
left: -15vw;
text-align: right;
}
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>