2

両側に 2 つのわずかな翼があるボタンを作成したいのですが、この形状を実現する方法が完全にはわかりません。誰かがガイダンスを提供できるかどうか疑問に思っていましたか?

ここに画像の説明を入力

前と後の擬似を使用する必要があることは理解していますが、ボタンの本体に入るわずかな曲線を作成する方法がわかりませんか?

4

4 に答える 4

2

スターウォーズのオープニングクロール( svg で再作成)のように、POV から離れて回転する 3D 平面の印象を与えるには、(接頭辞付きの)遠近法と、rotate3d (または、rotateX) を使用します。

エイリアシングを防ぐには、ここで説明されているように、1 ピクセルの透明なアウトラインを使用します。

Running example

#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;
}
于 2013-11-05T13:22:00.240 に答える
1

: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/

于 2013-11-05T12:59:32.780 に答える