仅使用CSS创建柱状图:参考CSS-Tricks教程但柱子不显示如何解决
纯CSS柱状条不显示的故障原因与修复
核心故障触发点
- 直接照搬了基于预处理器编写的示例代码,未做语法转换。示例代码中使用的选择器嵌套、变量定义、循环生成样式的写法均为Sass专属语法,原生浏览器不支持,会将这部分规则判定为无效代码直接丢弃——其中就包括伪元素生成条形、按百分比设置宽度的核心规则,自然无法显示柱状条。
- 定位逻辑错位。左侧的文本标签设置了相对于整个图表容器的绝对定位,所有标签会全部堆叠在容器左上角,完全不与对应行的条形位置对齐,视觉上也会让条形呈现为“消失”的状态。
- 布局尺寸预留错误。条形容器设置了130px的左外边距,但左侧标签没有占用对应布局空间,导致整体内容偏移量错位,进一步加剧显示异常。
可直接落地的修复步骤
- 将所有Sass语法转换为原生CSS
- 把嵌套的伪元素、hover规则展开为完整选择器:比如将嵌套在
.percentage内的&:after规则,写为独立的.percentage::after选择器;将嵌套的hover规则写为.percentage:hover::after,完全移除&符号关联父级的写法。 - 把原本靠
@for循环生成的宽度规则,替换为逐行声明的原生样式,对应每个类别的百分比设置伪元素宽度即可,比如.percentage-11::after { width: 11%; }、.percentage-49::after { width: 49%; },不需要依赖循环逻辑。
- 把嵌套的伪元素、hover规则展开为完整选择器:比如将嵌套在
- 修正定位关系
- 给每个
.percentage列表项加上position: relative,让内部的文本标签相对于当前列表项定位,而不是相对于整个图表容器定位,从根源上避免所有标签堆叠的问题。 - 调整文本标签的位置:将
.text的left: 0值改为left: -130px,匹配条形容器的左外边距尺寸,让标签刚好落在条形左侧的预留空白区域,实现同行对齐。
- 给每个
- 清理冗余无效代码
- 移除
dt标签上重复声明的font-weight: 700属性。 - 去掉
.percentage::after上多余的margin-bottom: 10px属性,配合原有的垂直居中逻辑即可实现条形在容器内的居中显示,不需要额外边距。
- 移除
修复后可直接运行的完整代码
<style> dl { display: flex; background-color: white; flex-direction: column; width: 100%; max-width: 700px; position: relative; padding: 20px; } dt { align-self: flex-start; width: 100%; font-weight: 700; display: block; text-align: center; font-size: 1.2em; margin-bottom: 20px; margin-left: 130px; } .text { font-weight: 600; display: flex; align-items: center; height: 40px; width: 130px; background-color: white; position: absolute; left: -130px; justify-content: flex-end; } .percentage { font-size: .8em; line-height: 1; text-transform: uppercase; width: 100%; height: 40px; margin-left: 130px; position: relative; background: repeating-linear-gradient( to right, #ddd, #ddd 1px, #fff 1px, #fff 5% ); } .percentage::after { content: ""; display: block; background-color: #3d9970; height: 90%; position: relative; top: 50%; transform: translateY(-50%); transition: background-color .3s ease; cursor: pointer; } .percentage:hover::after, .percentage:focus::after { background-color: #aaa; } /* 逐行声明百分比宽度,替代Sass循环逻辑 */ .percentage-2::after { width: 2%; } .percentage-5::after { width: 5%; } .percentage-11::after { width: 11%; } .percentage-16::after { width: 16%; } .percentage-49::after { width: 49%; } html, body { height: 500px; font-family: sans-serif; color: #333; } </style> <div class="wrapper"> <dl> <dt>2015年6月浏览器市场份额</dt> <dd class="percentage percentage-11"><span class="text">IE 11: 11.33%</span></dd> <dd class="percentage percentage-49"><span class="text">Chrome: 49.77%</span></dd> <dd class="percentage percentage-16"><span class="text">Firefox: 16.09%</span></dd> <dd class="percentage percentage-5"><span class="text">Safari: 5.41%</span></dd> <dd class="percentage percentage-2"><span class="text">Opera: 1.62%</span></dd> <dd class="percentage percentage-2"><span class="text">Android 4.4: 2%</span></dd> </dl> </div>
内容的提问来源于stack exchange,提问作者user4221591
相关产品推荐
相关产品推荐

