こういうやつ。考えられるのは、
-
box-shadow
を使う -
border
を使う - 擬似要素を使う
-
border-image
を使う
今回はサンプルの見栄えを揃えるためにwidth
を適用させたりしているが、実際にはボタンのラベルの長さに左右されないような、という前提でつくる。
box-shadow
を使う
btn {
box-shadow: 0 6px 0 #369;
}
ぼかしが0
のbox-shadowにすることでそれっぽく見せる。 ただこれだとAndroid2.3(2.2かもしれない)以下では影が見えないので注意。
border
を使う
.btn {
border-bottom-width: 8px;
}
これもそれっぽく対応できるが、border-radius
を使っている場合にはborderの外側部分にだけborder-radiusが適用されるので注意。
※もしかしたらブラウザによって違うかも。
擬似要素を使う
.btn{
position: relative;
}
.btn:after {
display: block;
content: "";
position: absolute;
left: -2px;
right: -2px;
bottom: -8px;
z-index: -1;
border-radius: inherit;
height: 100%;
background-color: #369;
}
擬似要素で影部分のオブジェクトをつくり、position
で配置を制御する。 もしサンプルのようにborder
がある場合には、その分の値をleft
、right
で調整する。大きさはbottom
で。
悪くはない感じもするが、少し大げさかもしれない。
border-image
を使う
.btn {
/* box-sizing: border-box; */
border-color: transparent;
background-color: transparent;
border-style: solid;
border-width: 8px 8px 16px 8px;
border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAsBAMAAAD2lqe8AAAAJ1BMVEUaZJwcZZ0lbaJJga1Lga5Tn7taqMCCp8eDqMiP5N6q/+/i6/L////KlPzsAAAAnUlEQVQoz+2SoRHCUBBE9zq4JYEME0UJlJASaAMXTToAg41H5Lso6CARWxQmZP5RAIrn9s3OmT1Ir4YL5VWCZmbcBDW7Pi0Mp1KYNmtOaTh0GPcp416jPefiUaHpczGUYArwL34hLM7gsDiUw+KUDo9jG2jb7B2coOcPYwQJ+0QHCX6BY8wF2igqjFHUmKLooHCkEBQqnSA9105xkd4swUbH0UjqRQAAAABJRU5ErkJggg==) 8 8 16 8 fill repeat;
}
border-image
も結構あり。ただborder
なので、デザインによってはその太さ分見栄えが大きくなってしまうので、box-sizing: border-box
のようなものも使うといいかもしれない。その場合はpadding
のことも考慮しないといけないけど。
今回のサンプルはCodePenに。