使用本机CSS和HTML设置漏斗堆栈布局的样式

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/

浏览器支持:现代浏览器很好,传统支持,只要它很好地降级.

fca*_*ran 4

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,但尝试正确调整leftmargin-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

希望它能有所帮助。