変形

transform-box

transform-box は、transform-origin や translate の % を測るときの基準の箱(参照ボックス)を選びます。主に SVG の図形を、自分の中心で回したいときに使います。

構文

content-box | border-box | fill-box | stroke-box | view-box

プレビュー

The quick brown fox jumps over the lazy dog. 素早い茶色の狐がのろまな犬を飛び越える。
プリセット
右下の角をドラッグするとサイズを変えられます

コード

.box {
  background: linear-gradient(
    135deg,
    #88d1c7,
    #77a7d7,
    #eaac3a
  );
  border-radius: 8px 32px;
  border: 16px solid rgb(31 41 55 / 0.3);
  padding: 32px;
  transform-origin: left top;
  transform: rotate(30deg) scale(0.6);
  transform-box: content-box;
}

コントロール

transform-boxcontent-box
transform-box
The quick brown fox jumps over the lazy dog. 素早い茶色の狐がのろまな犬を飛び越える。

解説

値の書き方

  • content-box:内側の余白(padding)の内側の箱を基準にします。
  • border-box:枠線(border)の外側までの箱を基準にします。
  • fill-box:SVG の図形そのものを囲む箱を基準にします。
  • stroke-box:SVG の図形を、線の太さも含めて囲む箱を基準にします。
  • view-box:初期値です。いちばん近い SVG の表示領域(viewBox)を基準にします。

HTML の要素では、fill-box は content-box と、stroke-box と view-box は border-box と同じになります。そのため HTML の要素の初期値は、枠線の外側までの箱です。

何が変わるか

transform-origin の位置と、translate(50%) などの % がどの箱に対して決まるかが変わります。このページのプレビューは、補助の宣言で枠線と内側の余白を付け、transform-origin: left top を中心に rotate(30deg) scale(0.6) で回して縮めています。点線の枠が元の位置です。content-box では中心が内側の余白の内側の角になり、border-box では枠線の外の角になるので、回ったあとの位置がずれます。

よく使う場面

SVG の中の図形は、初期値の view-box では SVG 全体の表示領域が基準になり、transform-origin の初期値も左上(0 0)です。図形を自分の中心で回すアニメーションでは、transform-box: fill-box と transform-origin: center を組み合わせます。

気をつけること

  • 主要なブラウザすべてで使えます。content-box と stroke-box は Chrome・Edge が 118、Firefox が 125 から対応しています。

コメント