Mar*_*det 8 html css positioning pseudo-element
我想显示漏斗堆栈等数据,如下图所示.

我能够使用边框创建锥形,例如:
<div class="taper"></div>
Run Code Online (Sandbox Code Playgroud)
并使用以下CSS:
.taper {
width: 200px;
height: 0px;
border-color: lightgray transparent;
border-style: solid;
border-width: 50px 25px 0 25px;
}
Run Code Online (Sandbox Code Playgroud)
当然,我们的想法是将它包装div.taper在一个容器中,添加其他元素并根据需要定位它们,一些工作但可行.
但是,我不一定知道需要多少行(级别,在这个例子中是7),我真的不想做很多数学来确定每个锥度的宽度等等.
如果有更多的防弹方式这样做?
我不想要一个基于JavaScript/jQuery的解决方案(试图保持这种轻量级)并且更愿意避免使用背景图像(我可能希望稍后对颜色进行换肤/自定义并且不想打扰图像文件).
小提琴参考:http://jsfiddle.net/audetwebdesign/fBax3/
浏览器支持:现代浏览器很好,传统支持,只要它很好地降级.
TL;DR :请参阅http://jsfiddle.net/97Yr6/上的示例
创建漏斗堆栈的一种方法是使用伪元素:使用这个基本标记
<ul>
<li>1,234,567,890 <span>Tooltip: 0</span></li>
<li>234,567,890 <span>Tooltip: 0</span></li>
<li>23,456,789</li>
<li>2,345,678 <span>Tooltip: 0</span></li>
<li>234,567</li>
<li>23,567 <span>Tooltip: 0</span></li>
<li>4,567<span>Tooltip: 0</span></li>
<li>789</li>
<li>23 <span>Tooltip: 0</span></li>
<li>4 <span>Tooltip: 0</span></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我们可以使用边框创建漏斗,因此我们可以这样绘制一种梯形作为背景:
ul {
position: relative;
overflow: hidden;
font: 14px Arial;
margin: 0; padding: 0;
list-style: none;
text-align: center;
}
ul:before {
content: "";
position: absolute;
z-index: -1;
left: 50%;
margin-left: -120px;
width: 0;
border-top: 800px solid #ccc;
border-left: 120px solid #fff;
border-right: 120px solid #fff;
}
Run Code Online (Sandbox Code Playgroud)
宽度<ul>为 100%,因此我们可以给它 atext-align: center并且所有量都正确居中
然后元素之间的空间也可以再次使用伪元素获得:
li:after,li:before {
content: "";
display: block;
height: 0.4em;
background: #fff;
width: 100%;
}
li:before { border-top: 1px dotted #ccc }
li:first-child:before { border: 0; }
Run Code Online (Sandbox Code Playgroud)
虽然可以定位工具提示文本(需要定义<li>)position: relative,但尝试正确调整left和margin-left属性(特别是对于较低的屏幕分辨率,但您可以为此目的使用媒体查询),例如
li span {
position: absolute;
left: 60%;
white-space: nowrap;
margin-left: 100px;
}
li:nth-child(2) span { left: 59%; }
li:nth-child(3) span { left: 58% }
li:nth-child(4) span { left: 57% }
li:nth-child(5) span { left: 56% }
li:nth-child(6) span { left: 55% }
li:nth-child(7) span { left: 54% }
li:nth-child(8) span { left: 53% }
li:nth-child(9) span { left: 52% }
li:nth-child(10) span { left: 51% }
Run Code Online (Sandbox Code Playgroud)
基本上,即使您使用邻接选择器IE8更改每个示例,这个示例也可能起作用(例如):nth-childli + li + li + ... + span
希望它能有所帮助。