LoginSignup
10
7

More than 5 years have passed since last update.

CSS3で3D変形

Posted at

だいぶ前にホームページで使おうと思ったけど、結局ボツになったのでメモ

3D回転描画

3D回転と書いているがアニメーションではなく、以下のようにX軸やY軸に傾けて表示を行う。
image

sample.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Transform Sample</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <style>
    .container {
      float: left;
      perspective: 100px;
      width: 400px;
      margin: 45px;
      font-size: 80%;
      color: #666;
      border: solid #333 2px;
      font-family: "Hiragino Kaku Gothic","メイリオ", sans-serif;
    }

    .rotate3d {
      margin: 0px;
      transform-style: preserve-3d;
      border: dotted #ccc 1px;
      text-align: center;
    }

    .rotate3d.X {
      transform: rotateX(-7deg);
    }

    .rotate3d.Y {
      transform: rotateY(-7deg);
    }
    </style>
  </head>

  <body>

    <div class="container">
      <div class="rotate3d X">
        <h1>Title</h1>
        <p>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
        </p>
      </div>
    </div>

    <div class="container">
      <div class="rotate3d Y">
        <h1>Title</h1>
        <p>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
          TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT<br>
        </p>
      </div>
    </div>

    <br style="clear:both">
  </body>
</html>

解説

点線の枠のrotate3dスタイルクラスの以下の部分が3D回転を行うスタイルだが、これだけでは3D変形は行われない。

transform-style: preserve-3d;
transform: rotateX(-7deg);

実線の枠で表示している親のcontainerスタイルクラスがポイントとなる。

perspective: 100px;

3D表示する際の視点で、どれだけ離れた場所から見ているかの指定。同じ角度で回転させても、この値を大きくすると、回転角度が少なくなったように表示される。
以下は同じコードでperspective: 200px;に設定した場合の表示。
image

ちなみにサンプルでは3D回転させた角度がわかりやすいように、実践枠をはみ出た部分も表示しているが、containeroverflow: hidden;を追加してあげると、実践枠内のみの表示となる。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7