面包屑溢出问题

时间:2013-11-18 10:22:12

标签: html css3

我找到了一个css3面包屑教程,并对其进行了一些编辑(虽然教程版本有同样的问题),并发现如果面包屑进入一个新行,那么由于它使用overflow:hidden会失败隐藏伪元素......

HTML

<ul class="crumb">
    <li><a href="#">Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
    <li><a href="#">..Crumbs</a></li>
</ul>

CSS

.crumb {
    list-style: none; 
    overflow: hidden;
    margin-bottom: 3px;
}
.crumb li {
    line-height: inherit;
}
.crumb li a {
    color: white;
    text-decoration: none; 
    padding: 0 0 0 20px;
    background: #777;
    position: relative; 
    display: block;
    float: left;
    border: solid 2px #777;
    font-size: 10px;
}
.crumb li a:after { 
    content: " "; 
    width: 0; 
    height: 0;
    line-height: 0;
    border-top:25px solid transparent;
    border-bottom: 25px solid transparent;
    border-left: 15px solid #777;
    position: absolute;
    top: 50%;
    margin-top: -25px; 
    left: 100%;
    z-index: 2; 
}   
.crumb li a:before { 
    content: " ";
    width: 0; 
    height: 0;
    line-height: 0;
    border-top: 25px solid transparent;
    border-bottom: 25px solid transparent;
    border-left: 15px solid white;
    position: absolute;
    top: 50%;
    margin-top: -25px; 
    margin-left: 2px;
    left: 100%;
    z-index: 1;
}
.crumb li:first-child a {
    padding-left: 8px;
}
.crumb li a:hover { 
    border-color: black;
    background: black;
}
.crumb li a:hover:after { 
    border-left-color: black !important;
}
.crumb li:last-child a:hover:after { 
    border-left-color: #e67e22 !important;
}
.crumb li:last-child a:after { 
    border-left-color: #e67e22 !important;
}
.crumb li:last-child a {
    border-color: #e67e22;
    background: #e67e22; 
}

这是小提琴...... http://jsfiddle.net/kGgNb/40/

我试图对css进行更改以修复此问题,但似乎无法看到更改伪元素的方法而不会使它们变窄,但这也意味着有极其尖锐的点。

HTML正在服务器上呈现,我能想到的最好的解决方案是在渲染之前进行一些检查,以检查将生成多少个元素,然后将任何溢出的元素抛出一个特定的屏幕大小。新列表并在每次达到该宽度时开始。

一位同事提出的另一个想法是使用图像作为分数,但如果可行,我宁愿坚持使用css修复。

还有其他想法/修正吗?

感谢。

更新 - 抱歉,我会澄清一下。我不希望箭头出现,正确版本的面包屑将如下所示。 http://jsfiddle.net/kGgNb/49/

问题在于使用border&amp;在css3中制作三角形的高度,因为我想要三角形的点,伪元素必须非常大,设置溢出:隐藏通过摆脱剩余来解决这个问题,但是当面包屑跨越一条线时页面,问题出现。

我可以使用偏斜,但是它在IE8中不起作用。

1 个答案:

答案 0 :(得分:1)

http://jsfiddle.net/kGgNb/50/

只需将箭头缩小,这是更改:

.crumb li a:after { 
    ....
    border-top:9px solid transparent;
    border-bottom: 9px solid transparent;
    border-left: 9px solid #777;
    ....
    top:-2px;
}   
.crumb li a:before { 
    ....
    border-top: 9px solid transparent;
    border-bottom: 9px solid transparent;
    border-left: 9px solid white;
    ....
    top:-2px;
}