如何使用剪辑路径创建 CSS 面包屑?

问题描述 投票:0回答:1

我正在尝试使用

clip-path
制作面包屑路径。

#clip span {
  padding: 3px 20px;
  background-color: #666;
  color: white;
  display: inline-block;
  clip-path: polygon(0 0, 90% 0, 100% 50%, 90% 100%, 0 100%, 10% 50%);
}
<div id="clip">
  <span>hello</span><span>tiny</span><span>world</span><span>welcome!</span>
</div>

这给出了

虽然我喜欢这种方法的简单性,但问题来自于坐标

90%
,它与单词的长度相关。因此“欢迎!”没有与“tiny”相同的箭头角度。

当然,我可以在单词之间添加两个空白块,以粘在前一个和后一个跨度上,并根据需要形状。

但是有没有办法为

polygon
指定类似于 X-Windows 的“几何”坐标样式,例如
-10px
(将从元素的右侧/底部开始计数;因此对于 100 像素元素) ,这将给出 90 像素,即距元素另一侧 10 像素)?

因此,“几何”之类的规则将类似于(这在 CSS 中不起作用,因为从左/上开始计算 -10 像素)

clip-path: polygon(0 0, -10px 0, 100% 50%, -10px 100%, 0 100%, 10px 50%);
css coordinates breadcrumbs clip-path
1个回答
6
投票

我有一篇关于创建此类形状的详细文章:如何使用 CSS 创建面包屑导航


您可以尝试

calc
,然后使用类似
(100% - 10px)
的内容。它的行为就像元素右侧的负坐标:

#clip span {
  padding: 3px 20px;
  background-color: #666;
  color: white;
  display: inline-block;
  clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 50%, calc(100% - 10px) 100%, 0 100%, 10px 50%);
}
<div id="clip">
  <span>hello</span><span>tiny</span><span>world</span><span>welcome!</span>
</div>

我还建议考虑其他更受支持的方式。

使用多个背景:

#clip span {
  color: white;
  display: inline-block;
  padding: 3px 20px;
  border-right:10px solid transparent;
  border-left:10px solid transparent;

  background:
    linear-gradient(to top    right,transparent 47%,#666 51%) top left     border-box,
    linear-gradient(to top    left ,transparent 47%,#666 51%) bottom right border-box,
    linear-gradient(to bottom right,transparent 47%,#666 51%) bottom left  border-box,
    linear-gradient(to bottom left ,transparent 47%,#666 51%) top right    border-box,
    #666 padding-box;
  background-size:10px 50%;
  background-repeat:no-repeat;
}
<div id="clip">
  <span>hello</span><span>tiny</span><span>world</span><span>welcome!</span>
</div>

使用伪元素和倾斜变换:

#clip span {
  color: white;
  display: inline-block;
  padding: 3px 15px;
  margin:0 5px;
  position:relative;
  z-index:0;
}
#clip span:before,
#clip span:after {
  content:"";
  position:absolute;
  z-index:-1;
  left:0;
  right:0;
  height:50%;
  background:#666;
}
#clip span:before {
  top:0;
  transform:skewX(45deg);
}
#clip span:after {
  bottom:0;
  transform:skewX(-45deg);
}
<div id="clip">
  <span>hello</span><span>tiny</span><span>world</span><span>welcome!</span>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.