http://jsbin.com/hefavo/1/edit
ねえ、似たようなことをしようとして、この質問に出くわしました。私の解決策をチェックしてください。矢印の角度を変更できないため(境界線の幅をパーセンテージにすることはできません)、矢印が常に特定の距離だけ突き出ているため、完全ではありません。
たとえば、3 行の高さを試してみると、奇妙に見えます。ただし、それを調整するには、前後の疑似要素の「margin-left」を 15px に設定するだけです。
仕組み: 各 li 要素には、500 x 1000 まで拡張される css 三角形としての矢印の下半分である before 疑似要素があります。after 疑似要素は上半分です。次に、三角形はメニュー項目の右側 (正確には下を参照) に配置され、margin-left の設定でどれだけ突き出ているかを制御します。
.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 の関連ビットに追加