css - 如何保持具有动态内容的元素的圆形形状?
问题描述
我正在尝试创建一个圆作为::after
伪元素,它会根据其内容自动调整大小。
.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>
到目前为止,这给出了一个非常好的结果:
JSFiddle https://jsfiddle.net/jsnbtmh3/
但是,对于较长的文本,圆圈会变成椭圆:
如何使圆圈根据其内容自动调整大小?
解决方案
这是使用径向渐变的技巧。这个想法是保持元素的全高并为其着色,circle closest-side
这将始终创建一个从中心开始并扩展到最近的两侧(左侧和右侧)的圆圈
我简化了代码以仅保留相关部分:
.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>
推荐阅读
- python - 如何比较两个 csv 文件的特定列?
- java - Netbeans IDE 中的 Java Swing Null 指针异常
- reactjs - React,来自 Express 上 API 请求的 SSR 响应
- spring - Spring组件可以用于多个包
- sql - Postgres - 在 date_trunc 中没有数据的间隔返回 0 计数
- getgauge - 在使用仪表自动化测试时遇到 onbeforeunload 警报对话框时,测试会冻结
- mathematical-optimization - 非常大的非线性最小二乘优化的收敛
- java - 如何在 Java 10 附带的 Java Mission Control 中获得分配压力?
- javascript - 是什么导致我的 Vue 应用程序中出现这个未定义的值?
- google-sheets - 使用多个工作表验证列表中的文本