[CSSチュートリアル】よくある2D変換を5つ実現するCSS
CSSの2次元変換では、移動、回転、拡大縮小、反りなどの基本的な変形を2次元で行うことができます。変換された要素は、周囲の要素に影響を与えず、重なり合うことができるという点で、絶対位置指定要素と似ていますが、変換された要素が変換前と同じページ上の空間をまだ占めていることを除けば、そのようなことはありません。
2次元の変形は、CSSのtransformプロパティと以下の変換関数で実現できる。
- matrix():6つの値(a, b, c, d, e, f)を持つ変換行列の形式で2D変換を指定します。これは、[a,b,c,d,e,f]の変換行列を直接適用することと等価です。
- translate():オブジェクトをX軸とY軸に沿って平行移動させる。この関数は1〜2個の引数を取り、1個目はX軸に、2個目はY軸に対応する。2個目の引数が与えられない場合、デフォルト値は0である。
- translatex():オブジェクトをX軸(水平)に沿って平行移動させます。
- translatey():オブジェクトをY軸(垂直方向)に沿って平行移動させます。
- rotate():指定したオブジェクトを回転させます。回転角度は関数の引数で指定します。
- scale(): オブジェクトを拡大縮小します。この関数には1つまたは2つのパラメータが必要で、第1パラメータはX軸、第2パラメータはY軸に対応し、第2パラメータが提供されない場合は、第1パラメータの値がデフォルトで使用されます。
- scalex():オブジェクトを拡大縮小する(要素の幅を変更する)。
- scaley():オブジェクトを拡大縮小します(要素の高さを変更します)。
- skew():X軸とY軸に沿ってオブジェクトを傾ける。この関数は1または2の引数を取り、最初の引数はX軸に対応し、2番目の引数はY軸に対応する。2番目の引数が与えられない場合、デフォルト値は0です。
- skewx():オブジェクトを(水平)X軸に沿って歪ませる。
- skewy():オブジェクトをY軸(垂直方向)に沿ってワープさせます。
1. トランスレート()
translate()関数は、指定されたパラメータに従って要素を水平方向(X軸)または垂直方向(Y軸)に移動するための関数で、以下のような構文形式を持ちます。
トランスレート(tx, ty)
ここで、tx は要素が水平方向に移動する距離(x 軸)、ty は要素が垂直方向に移動する距離(y 軸)に対応します。ty は無視でき(デフォルトは 0)、両方のパラメータは負にすることも可能です。
[例】 translate()関数を使って、指定した要素を移動させる。
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: #CCC;
transform: translate(100px, 10px);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
実行結果は、以下の画像のようになります。
図:Translate()関数デモ
また、要素を水平方向に移動させるだけ、あるいは垂直方向に移動させるだけの場合は、translateX() (要素を水平方向に移動させる) や translateY() (要素を垂直方向に移動させる) を使用することができます。translateX()とtranslateY()関数はどちらも1つの引数だけを必要とします、例えば
translateX(100px); /* equivalent to translate(100px, 0px); */
translateY(10px); /* equivalent to translate(0px, 10px); */
2.回転()
rotate()関数は、要素を指定した角度だけ回転させるための関数で、次のような構文形式を持ちます。
回転(a)
ここで、引数aは要素を回転させる角度を示す。正のaは時計回りの回転を、負のaは反時計回りの回転を示す。
[例】 rotate()関数を使って、要素を回転させる。
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: #CCC;
margin: 20px 0px 0px 20px;
transform: rotate(45deg);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
実行結果は、以下の画像のようになります。
図:Rotate()関数デモ
3. スケール()
scale()関数は、指定した要素を拡大・縮小するための関数であり、その構文は以下の通りです。
スケール(sx, sy)
ここで、sx は水平方向のスケール、sy は垂直方向のスケールである。また、syパラメータは省略可能であり、そのデフォルト値はsxと同じである。
[例】 scale()関数を使用して、指定した要素を拡大縮小する。
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: #CCC;
transform: scale(0.7);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
実行結果は、以下の画像のようになります。
図:Scale()関数デモ
ヒント:scale()で指定した引数値が-1〜1の範囲外の場合は要素が拡大され、引数値が-1〜1の範囲内の場合は要素が縮小されます。
<スパン translate() 関数と同様に、要素を水平方向のみ、または垂直方向のみに拡大縮小する場合、scaleX() (要素を水平方向に拡大縮小) および scaleY() (要素を垂直方向に拡大縮小) 関数を使用することができます。
scaleX(0.5); /* is equivalent to scale(0.5, 1); */
scaleY(0.5); /* equivalent to scale(1, 0.5); */
4.スキュー()
skew()関数は、以下の構文形式で、要素を水平方向(X軸)および垂直方向(Y軸)に傾けるために使用します。
skew(ax, ay)
ここで ax は要素の水平方向の傾き、ay は要素の垂直方向の傾きである。また、引数ayは省略可能で、省略した場合のデフォルト値は0である。
[例】skew()関数を使って、指定した要素を反らせる。
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: #CCC;
margin: 20px 0px 0px 10px;
transform: skew(-15deg, 20deg);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
実行結果は、以下の画像のようになります。
図:skew()関数のデモ
また、水平方向のみ、または垂直方向のみに要素を歪ませる場合は、skewX() (要素を水平方向に拡大縮小する) および skewY() (要素を垂直方向に拡大縮小する) 関数を使用して行うことも可能です。
skewX(15deg); /* equivalent to skew(15deg, 0deg); */
skewY(15deg); /* equivalent to skew(0deg, 15deg); */
5.マトリックス()
matrix()関数は、skew(), scale(), rotate(), translate() の省略形と見ることができ、すべての2次元変換は、以下の構文形式を持つ matrix() 関数によって同時に定義することができる。
マトリックス(a, b, c, d, tx, ty)
matrix()関数の6つの引数は、scaleX(), skewY(), scaleY(), translateX(), translateY() 関数に対応しており、matrix()を用いて、以下のような様々な2次元変換操作を実装することが可能です。
- translate(tx, ty) = matrix(1, 0, 0, 1, tx, ty);: ここでtxとtyは水平と垂直の平行移動の値です.
- rotate(a) = matrix(cos(a), sin(a), -sin(a), cos(a), 0, 0);: ここで、aは次数の値である。sin(a)と-sin(a)の値を入れ替えると、逆回転を行うことができます。
- scale(sx, sy) = matrix(sx, 0, 0, sy, 0 ,0);: ここで sx と sy は水平と垂直方向のスケール値です。
- skew(ax, ay) = matrix(1, tan(ay), tan(ay), 1, 0 ,0);: ax と ay は水平と垂直の値を deg で表します.
[例題】 matrix()関数を使って、要素に2次元変換を施す。
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: #CCC;
margin: 20px 0px 0px 10px;
float: left;
}
.one {
transform: matrix(0.866, 0.5, -0.5, 0.866, 0, 0);
}
.two {
margin-left: 35px;
transform: matrix(0.586, 0.8, -0.8, 0.686, 0, 0);
}
.three {
margin-left: 40px;
margin-top: 25px;
transform: matrix(0.586, 0.8, -0.8, 0.866, 0, 0);
}
.four {
transform: matrix(0.586, 0.8, -0.8, 0.586, 40, 30);
}
</style>
</head>
<body>
<div class="one"></div>
<div class="two"></div>
<div class="three"></div>
<div class="four"></div>
</body>
</html>
実行結果は、以下の画像のようになります。
図:Matrix()関数デモ <スパン
5つの一般的な2D変換を実現するCSSの記事はこれで終わりです。もっと関連するCSSの2D変換は、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください、今後ともスクリプトハウスを応援していただけると嬉しいです
関連
-
[CSSチュートリアル】CSS擬似要素::マーカー解説
-
[CSSチュートリアル】CSSのクラスとidの共通命名規則
-
[CSSチュートリアル】CSSもこんな風に遊べる?気まぐれグラデーションの極意
-
[CSSチュートリアル】CSS3で3つの効果例の背景をぼかす。
-
[CSSチュートリアル】CSSプロパティ*-gradientの有用性を探る
-
[css3]CSS3アニメーションによるグラフィックドロップ効果
-
[css3]水平方向のプログレスバーの最後にテキストを表示するCSSコード
-
[CSSチュートリアル】CSSでデータホットスポット効果を実現する方法
-
[CSSレイアウト例】6種類の適応的な2カラムレイアウトを実現するCSS
-
[CSSチュートリアル】cssのボックスモデルを解説 余白のパディングと省略について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
cssで背景色の半透明化を実現する2つの方法
-
[CSSチュートリアル】CSSアニメーション 途中で止める方法とポーズを維持する方法
-
[CSSチュートリアル】overflow:hiddenの役割を解説(overflow hidden、clear float、外周マージンの崩れを解決する)。
-
[css3]赤いパケットのジッター効果を実現するCSS3
-
[CSSチュートリアル]テーブル table :nth-child()を使って行間の色変更と整列を実現する。
-
[Web標準チュートリアル】html5+CSS3コーディング規約
-
[CSSレイアウト例】等間隔の四角形で完璧なページレイアウトを実現する方法
-
[CSSチュートリアル]cssに0.5pxの行を実装してモバイル互換の問題を解決する(推奨)
-
[css3]css3 elastic box flexによる3カラムレイアウトの実装。
-
[CSSチュートリアル]マウスをスライドさせてカードを浮かせるCSSの例