両側に 2 つのわずかな翼があるボタンを作成したいのですが、この形状を実現する方法が完全にはわかりません。誰かがガイダンスを提供できるかどうか疑問に思っていましたか?
前と後の擬似を使用する必要があることは理解していますが、ボタンの本体に入るわずかな曲線を作成する方法がわかりませんか?
両側に 2 つのわずかな翼があるボタンを作成したいのですが、この形状を実現する方法が完全にはわかりません。誰かがガイダンスを提供できるかどうか疑問に思っていましたか?
前と後の擬似を使用する必要があることは理解していますが、ボタンの本体に入るわずかな曲線を作成する方法がわかりませんか?
スターウォーズのオープニングクロール( svg で再作成)のように、POV から離れて回転する 3D 平面の印象を与えるには、(接頭辞付きの)遠近法と、rotate3d (または、rotateX) を使用します。
エイリアシングを防ぐには、ここで説明されているように、1 ピクセルの透明なアウトラインを使用します。
#trapezoid {
-webkit-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
-moz-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
-o-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
-ms-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
border-radius : 5px 5px 0 0;
outline : 1px solid transparent;
}
テキストを回転させたくない場合は、上記のコードを::before
疑似要素に適用し、親に対して絶対的に配置します。
Running example with non rotated text
コード:
#trapezoid {
width : 200px;
height : 50px;
margin : 10px;
padding : 10px;
position : relative;
text-align : center;
}
#trapezoid::before {
-webkit-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
-moz-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
-o-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
-ms-transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
transform : perspective(400px) rotate3d(1, 0, 0, 20deg);
outline : 1px solid transparent;
border-radius : 5px 5px 0 0;
position : absolute;
top : 0;
bottom : 0;
left : 0;
right : 0;
content : '';
z-index : -1;
background : red;
}
:before
と を使用して、そのスタイルを実現できます:after
。トリックは、次のように、側面の要素を歪め、滑らかな丸みのために少し境界半径を適用することです:
button {
border: 0 none;
background-color: red;
position: relative;
font-size: 4em;
margin-left: 100px;
}
button:before,
button:after {
content: '';
position: absolute;
background-color: inherit;
top: 0;
bottom: 0;
width: 1em;
z-index: -1;
}
button:before {
left: -0.5em;
-webkit-transform: skew(-10deg);
transform: skew(-10deg);
border-top-left-radius: 10%;
}
button:after {
left: auto;
right: -0.5em;
-webkit-transform: skew(10deg);
transform: skew(10deg);
border-top-right-radius: 10%;
}
ここでフィドル:http://jsfiddle.net/JyhwZ/1/