11

我正在制作一个面包屑菜单并尝试在纯 CSS 中完成它,因此我不必使用背景图像来获得箭头形状。是否可以使用纯 CSS 实现这种有角度的边框样式?

箭头面包屑

我能做的最好的看起来是这样的(这只是我不久前制作的截图草稿,所以请忽略它暗示面包屑是水果和/或美味):

在此处输入图像描述

我使用这样的 CSS 来实现它:

.breadcrumb li {
    border-right: 2px solid #ECECEC;
    border-top-right-radius: 40px;
    border-bottom-right-radius: 40px;
}

这是整个 CSS 以防万一:

div.breadcrumb {
    display: block;
    float: left;
    border-bottom: 2px solid gray;
}
ul.breadcrumb {
    display: block;
    float: left;
    list-style-type: none;
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 0px;
}
.breadcrumb li {
    float: left;
    display: list-item;
    background-color: #F2F2F2;
    border-right: 2px solid #ECECEC;
    border-top-right-radius: 40px;
    border-bottom-right-radius: 40px;
    position: relative;
    padding: 9px 20px 10px 35px;
    margin-left: -32px;
}
.breadcrumb li.first-crumb {
    background: #E7E7E7;
    padding-left: 20px;
    margin-left: 0px;
}
.breadcrumb li.last-crumb {
    border-top: 1px solid #E3E3E3;
    border-right: 1px solid #E3E3E3;
    background: white;
    padding-top: 9px;
    padding-bottom: 9px;
    border-top-right-radius: 0px;
    border-bottom-right-radius: 0px;
}
.breadcrumb li:not(.first-crumb) {
    padding-left: 45px;
}
.breadcrumb li:not(.last-crumb) a:after {
    content: "\27F6";
    margin-left: 10px;
    color: #444444;
    margin-right: 0px;
}
.breadcrumb li a,
.breadcrumb li span {
    display: block;
    float: left;
    position: relative;
}
.breadcrumb li a {
    text-decoration: none;
}
.breadcrumb li.first-crumb a {
    padding-left: 0px;
    margin-left: 0px;
}

我的标记如下所示:

<div class="breadcrumb">
    <ul class="breadcrumb">
        <li class="breadcrumb first-crumb"><a href="#">Produce</a></li>
        <li class="breadcrumb"><a href="#">Fruits</a></li>
        <li class="breadcrumb last-crumb"><span>breadcrumb-ilicious!</span></li>
    </ul>
</div>

编辑:如果我能让它看起来也有一个实际的边框,那就太好了。这是我的粗略草图:

在此处输入图像描述

(我尝试按照奥拉夫的建议添加几个三角形,唯一无法解决的问题是在不改变三角形突出形成边界的角度的情况下纠正两个三角形之间的明显间隙。)

在此处输入图像描述

4

3 回答 3

10

从CSS Tricks - CSS Triangle中窃取,你可以做类似的事情

li.breadcrumb:after {
    content: "";
    display: inline-block;
    width: 0;
    height: 0;
    border-top: 20px solid #eee;
    border-bottom: 20px solid #eee;
    border-left: 20px solid #ccc;
}

li.breadcrumb:after {
    content: "";
    display: inline-block;
    width: 0;
    height: 0;
    border-top: 20px solid #eee;
    border-bottom: 20px solid #eee;
    border-left: 20px solid #ccc;
}
li.first-crumb:after {
    border-top: 20px solid #ccc;
    border-bottom: 20px solid #ccc;
    border-left: 20px solid #aaa;
}
li.last-crumb:after {
    border-top: 20px solid #fff;
    border-bottom: 20px solid #fff;
    border-left: 20px solid #eee;
}

li.breadcrumb {
    list-style-type: none;
    background-color: #ccc;
    display: inline-block;
    float: left;
    line-height: 0;
}
li.first-crumb {
    background: #aaa;
}
li.last-crumb {
    background: #eee;
}
li.breadcrumb a {
    text-decoration: none;
}
<div class="breadcrumb">
    <ul class="breadcrumb">
        <li class="breadcrumb first-crumb"><a href="#">Hurr</a>
        </li>
        <li class="breadcrumb"><a href="#">Durr</a>
        </li>
        <li class="breadcrumb last-crumb"><span>Furr</span>
        </li>
    </ul>
</div>
<div class="arrow-right"></div>


原始JSFiddle

于 2013-11-01T23:46:17.717 回答
2

如果你愿意,你也可以得到这些边界(我已经改进了 Olaf Dietsche 之前的答案):

HTML:

<div class="breadcrumb">
    <ul class="breadcrumb">
        <li class="breadcrumb first-crumb"><a href="#">Hurr</a></li>
        <li class="breadcrumb"><a href="#">Durr</a></li>
        <li class="breadcrumb last-crumb"><span>Furr</span></li>
    </ul>
</div>

CSS:

li.breadcrumb:before {
    content:'';
    width: 28.28427px; /* sqrt(40*40 / 2) */
    height: 28.28427px;
    background:transparent;
    position:absolute;
    -moz-transform:rotate(45deg);
    -webkit-transform:rotate(45deg);
    transform:rotate(45deg);
    transform-origin: top right;
    top: 20px;
    margin:0;
    right: 0;
    border-right: #000 solid 1px;
    border-top: #000 solid 1px;
}

li.breadcrumb:after {
    content: "";
    display: inline-block;
    width: 0;
    height: 0;
    border-top: 20px solid #eee;
    border-bottom: 20px solid #eee;
    border-left: 20px solid #ccc;
}
li.first-crumb:after {
    border-top: 20px solid #ccc;
    border-bottom: 20px solid #ccc;
    border-left: 20px solid #aaa;
}
li.last-crumb:after {
    border-top: 20px solid #fff;
    border-bottom: 20px solid #fff;
    border-left: 20px solid #eee;
}

li.breadcrumb {
    list-style-type: none;
    background-color: #ccc;
    display: inline-block;
    float: left;
    line-height: 0;
    position: relative;
    height: 40px;
}
li.first-crumb {
    background: #aaa;
}
li.last-crumb {
    background: #eee;
}
li.breadcrumb a {
    text-decoration: none;
}

和小提琴:http: //jsfiddle.net/piotku/9cs1zy4h/

于 2017-04-11T08:19:03.013 回答
1

另一种方法是使用 :after 元素并使其成为具有两个边框的矩形并旋转它。

这是一个示例:面包屑

主要CSS:

li-item:after {
  content: "";
  width: 5rem;
  height: 100%;
  display: inline-block;
  position: absolute;
  background: transparent;
  right: 0;
  top: 0;
  transform: translateX(-1rem) rotate(45deg); 
  border-right: 4px solid white;
  border-top: 4px solid white;
}
于 2019-02-21T14:51:59.257 回答