http://jsbin.com/hefavo/1/edit
嘿,我偶然发现了这个问题,试图做类似的事情。查看我的解决方案。它并不完美,因为您无法更改箭头的角度(边框宽度不能是百分比),这意味着箭头始终会伸出一定距离。
例如,如果你尝试一个三行高的东西,它会看起来很奇怪。但是,要对此进行调整,您可以简单地将前后伪元素的“margin-left”设置为 15px。
工作原理:每个 li 元素都有一个 before 伪元素,它是箭头的下半部分,是一个延伸到 500 x 1000 的 CSS 三角形。after 伪元素是上半部分。然后将三角形定位到菜单项的右侧(不完全是……见下文),左边距设置控制它突出的程度。
.filters .selected:before {
position:absolute;
height: 0;
top: 50%;
// transform:scaleY(-1);
max-width: 300%;
border-right: 500px solid #3aa5de;
border-bottom: 1000px solid transparent;
content: "";
left: 50%;
border-radius:0;
margin-left: 10px;
transform: scaleX(-1) translateX(100%);
}
.filters .selected:after {
position:absolute;
height: 0;
top: 50%;
transform:scaleY(-1) scaleX(-1) translateY(100%) translateX(100%);
max-width: 300%;
border-radius:0;
border-right: 500px solid #3aa5de;
border-bottom: 1000px solid transparent;
content: "";
left: 50%;
margin-left: 10px;
}
li 元素本身用于屏蔽我们不需要的三角形部分。由于三角形超出了前面的“100%”,我将 li 元素宽度设置为 200%,将伪元素位置设置为 50%,并将 a 元素(菜单项)设置为 50% 宽度。
.filters li{
overflow:hidden;
width: 200%;
position:relative;
}
.filters li a{
width:50%;
position:relative;
z-index: 1;
}
编辑:在css的相关位中添加