Mobile Safariを使用してhttp://m.google.comページにアクセスすると、ページの上部に美しいバーが表示されます。
そのような台形(米国:台形)を描きたいのですが、どうすればいいのかわかりません。css3 3d変換を使用する必要がありますか?あなたがそれを達成するための良い方法を持っているなら、私に教えてください。
Mobile Safariを使用してhttp://m.google.comページにアクセスすると、ページの上部に美しいバーが表示されます。
そのような台形(米国:台形)を描きたいのですが、どうすればいいのかわかりません。css3 3d変換を使用する必要がありますか?あなたがそれを達成するための良い方法を持っているなら、私に教えてください。
これは今ではかなり古いので、いくつかの新しいテクノロジーでいくつかの新しい更新された回答で使用できると思います。
.trapezoid {
width: 200px;
height: 200px;
background: red;
transform: perspective(10px) rotateX(1deg);
margin: 50px;
}
<div class="trapezoid"></div>
<svg viewBox="0 0 20 20" width="20%">
<path d="M3,0 L17,0 L20,20 L0,20z" fill="red" />
</svg>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.moveTo(30, 0);
ctx.lineTo(170, 0);
ctx.lineTo(200, 200);
ctx.lineTo(0, 200);
ctx.fillStyle = "#FF0000";
ctx.fill();
<canvas id="myCanvas" width="200" height="200"></canvas>
次のようなCSSを使用できます。
#trapezoid {
border-bottom: 100px solid red;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
height: 0;
width: 100px;
}
<div id="trapezoid"></div>
このすべての形を作るのは本当にクールです。もっと素敵な形を見てください:
http://css-tricks.com/examples/ShapesOfCSS/
編集:このcssはDIV要素に適用されます
任意の形状を描画するには、以下のようにCSSclip-pathプロパティを使用できます。
無料のオンラインエディターを使用して、このコードを生成できます(例:https ://bennettfeely.com/clippy/ )
.trapezoid {
clip-path: polygon(0 0, 100% 0, 84% 41%, 16% 41%);
}
より適応性が必要な場合は、次のようなSassミックスインを定義できます。
@mixin trapezoid ($top-width, $bottom-width, $height) {
$width: max($top-width, $bottom-width);
$half-width-diff: abs($top-width - $bottom-width) / 2;
$top-left-x: 0;
$top-right-x: 0;
$bottom-left-x: 0;
$bottom-right-x: 0;
@if ($top-width > $bottom-width) {
$top-left-x: 0;
$top-right-x: $top-width;
$bottom-left-x: $half-width-diff;
$bottom-right-x: $top-width - $half-width-diff;
} @else {
$top-left-x: $half-width-diff;
$top-right-x: $bottom-width - $half-width-diff;
$bottom-left-x: 0;
$bottom-right-x: $bottom-width;
}
clip-path: polygon($top-left-x 0, $top-right-x 0, $bottom-right-x $height, $bottom-left-x $height);
width: $width;
height: $height;
}
そして、このような目的の要素に使用します(ここで、パラメーターは$ top-width、$ bottom-width、$ heightです):
.my-div {
@include trapezoid(8rem, 6rem, 2rem);
}
利用できるオプションがいくつかあります。画像を単純に使用したり、svgで何かを描画したり、css変換で通常のdivを歪めたりすることができます。画像は最も簡単で、すべてのブラウザで機能します。svgでの描画はもう少し複雑であり、全面的に機能することは保証されていません。
一方、css変換を使用すると、シェイプdivを背景に配置してから、実際のテキストを別の要素でそれらの上に重ねて、テキストも歪まないようにする必要があります。繰り返しますが、ブラウザのサポートは保証されていません。
これは古い質問です...しかし、言及されていないメソッドを追加したいと思います。半透明の半色のグラデーションで三角形を描くことができ、3つのグラデーション形状から台形を作ることができます。これがサンプルコードです。理解を深めるために、3つのブロックが異なる色で描かれています。
#example {
width: 250px;
height: 100px;
background-image:
linear-gradient(to top left, red 0 50%, transparent 50% 100%),
linear-gradient(to top right, green 0 50%, transparent 50% 100%),
linear-gradient(blue 0 100%);
background-size:
20% 100%, 20% 100%, 60% 100%;
background-position:
left top, right top, center top;
background-repeat: no-repeat;
}
<div id="example"></div>