如何保持具有动态含量的元素的圆形形状? [英] How to maintain a circlur shape of element with dynamic content?
问题描述
我正在尝试创建一个圆形,作为 :: after
伪元素,该伪元素会根据其内容自动调整大小.
.container {显示:flex;flex-direction:行;}#dividerHost2 #left {flex:1 1自动;背景颜色:黄绿色;高度:200px;}#dividerHost2 #right {flex:1 1自动;背景颜色:dodgerblue;}#dividerHost2 .divider {背景颜色:白色;边距:0px;宽度:6像素;字体粗细:800;}.divider.vertical {--divider-color:透明;显示:inline-flex;宽度:1px;左边框:1像素实心rgb(var(-divider-color));边距:0px 2px 0px 2px;溢出:显示;}.divider.vertical.title ::之后{flex:0 0自动;自我定位:居中;边界半径:50%;内容:或";填充:9px 8px 11px 8px;背景颜色:白色;颜色:黑色;转换:translateX(-44%);z索引:10;}
< div id ="dividerHost2" class ="container">< div id ="left" class ="container" style ="flex-direction:row;"></div>< div id ="divider3" class ="divider垂直标题"></div>< div id ="right" class ="container" style ="flex-direction:row;"></div></div>
到目前为止,这给出了一个非常不错的结果:
JSFiddle
如何根据其内容自动调整圆的大小?
以下是使用径向渐变的技巧.想法是保持元素全高并使用 circle最近面
对其进行着色,这将始终创建一个从中心开始并扩展到最接近的侧面(左右两边)的圆>
我简化了代码,只保留了相关部分:
.container {显示:flex;flex-direction:行;边距:10px;}.剩下 {flex:1 1自动;背景颜色:黄绿色;高度:200px;}.正确的 {flex:1 1自动;背景颜色:dodgerblue;}.divider {背景颜色:白色;宽度:6像素;字体粗细:800;显示:flex;证明内容:中心;}.divider ::之后{显示:flex;align-items:居中;flex:0 0自动;内容:attr(数据文本);填充:0 8px;背景:放射状渐变(圆形最近侧,白色98%,透明100%);z索引:10;}
< div class ="container">< div class ="left"></div>< div class ="divider" data-text ="OR"></div>< div class ="right"></div></div>< div class ="container">< div class ="left"></div>< div class ="divider" data-text ="longer"></div>< div class ="right"></div></div>< div class ="container">< div class ="left"></div>< div class ="divider" data-text =甚至更长"></div>< div class ="right"></div></div>
I'm trying to create a circle as an ::after
pseudo element, which resizes automatically depending on its content.
.container {
display: flex;
flex-direction: row;
}
#dividerHost2 #left {
flex: 1 1 auto;
background-color: yellowgreen;
height: 200px;
}
#dividerHost2 #right {
flex: 1 1 auto;
background-color: dodgerblue;
}
#dividerHost2 .divider {
background-color: white;
margin: 0px;
width: 6px;
font-weight: 800;
}
.divider.vertical {
--divider-color: transparent;
display: inline-flex;
width: 1px;
border-left: 1px solid rgb(var(--divider-color));
margin: 0px 2px 0px 2px;
overflow: show;
}
.divider.vertical.title::after {
flex: 0 0 auto;
align-self: center;
border-radius: 50%;
content: "OR";
padding: 9px 8px 11px 8px;
background-color: white;
color: black;
transform: translateX(-44%);
z-index: 10;
}
<div id="dividerHost2" class="container">
<div id="left" class="container" style="flex-direction: row;"></div>
<div id="divider3" class="divider vertical title"></div>
<div id="right" class="container" style="flex-direction: row;"></div>
</div>
That gives a pretty nice result so far:
JSFiddle https://jsfiddle.net/jsnbtmh3/
However, with longer text the circle turns into an oval:
How to make the circle auto resize depending on its content?
Here is a trick using radial-gradient. The idea is to keep the element full height and color it using circle closest-side
which will always create a circle that will start from the center and expand to the closest sides (left and right one)
I simplified the code to keep only the relevant part:
.container {
display: flex;
flex-direction: row;
margin:10px;
}
.left {
flex: 1 1 auto;
background-color: yellowgreen;
height: 200px;
}
.right {
flex: 1 1 auto;
background-color: dodgerblue;
}
.divider {
background-color: white;
width: 6px;
font-weight: 800;
display: flex;
justify-content: center;
}
.divider::after {
display: flex;
align-items: center;
flex: 0 0 auto;
content: attr(data-text);
padding: 0 8px;
background: radial-gradient(circle closest-side, white 98%, transparent 100%);
z-index: 10;
}
<div class="container">
<div class="left "></div>
<div class="divider" data-text="OR"></div>
<div class="right "></div>
</div>
<div class="container">
<div class="left "></div>
<div class="divider" data-text="longer"></div>
<div class="right "></div>
</div>
<div class="container">
<div class="left "></div>
<div class="divider" data-text="even longer"></div>
<div class="right "></div>
</div>
这篇关于如何保持具有动态含量的元素的圆形形状?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!