2024.06.14

HTML・CSS

90°回転させた要素をブロック要素内右側に収めるtransform-originの設定

右上に配置した長方形の要素を90°回転させた時に、親のブロック要素内に収めるtransform-originの設定です。
デモページはこちら

htmlは以下のように準備して確認します。

<p>transform: rotate(90deg);設定前の状態</p>
<div class="div-parent"><div class="div-child-01"></div></div>

<p>transform-origin: 50% 50%;の場合(初期値)</p>
<div class="div-parent"><div class="div-child-02"></div></div>

<p>transform-origin: top left;の場合</p>
<div class="div-parent"><div class="div-child-03"></div></div>

<p>transform-origin: 60px 20px;の場合</p>
<div class="div-parent"><div class="div-child-04"></div></div>

<p>transform: translateY(40px);、transform-origin: 60px 20px;の場合</p>
<div class="div-parent"><div class="div-child-05"></div></div>

<p>left: 100%;、transform-origin: top left;の場合</p>
<div class="div-parent"><div class="div-child-06"></div></div>

まず、長方形を回転させる前の状態です。長方形のサイズは幅80px、高さ40pxで統一します。長方形はposition: absolute;で、top: 0;right: 0;を設定して右上に配置します。

.div-parent {
	position: relative;
	min-height: 100px;
	margin: 0 0 1em;
	background-color: #fff;
}
.div-child-01 {
	position: absolute;
	top: 0;
	right: 0;
	width: 80px;
	height: 40px;
	background-color: orange;
}

次に、長方形を90°回転させてtransform-originを設定しなかった時の状態です。transform-originは初期値のtransform-origin: 50% 50%;が適用されます。回転の基準点となる原点が長方形の中心となるため、親のブロック要素内に収まりません。

.div-child-02 {
	position: absolute;
	top: 0;
	right: 0;
	width: 80px;
	height: 40px;
	background-color: blue;
	transform: rotate(90deg);
}

次に、transform-origin: top left;を設定します。この場合、長方形の左上が原点となるため親のブロック要素の右側に余白ができます。

.div-child-03 {
	position: absolute;
	top: 0;
	right: 0;
	width: 80px;
	height: 40px;
	background-color: green;
	transform: rotate(90deg);
	transform-origin: top left;
}

次に、transform-origin: 60px 20px;を設定します。長方形の左上から右下方向へX軸60px→Y軸20pxの位置が原点です。やはり親のブロック要素内に収まりません。

.div-child-04 {
	position: absolute;
	top: 0;
	right: 0;
	width: 80px;
	height: 40px;
	background-color: red;
	transform: rotate(90deg);
	transform-origin: 60px 20px;
}

次に、transform-origin: 60px 20px;に加え、transform: translateY(40px);を設定します。長方形を下方向へ40px移動させることで親のブロック要素内に収めることができました。

.div-child-05 {
	position: absolute;
	top: 0;
	right: 0;
	width: 80px;
	height: 40px;
	background-color: brown;
	transform: translateY(40px) rotate(90deg);
	transform-origin: 60px 20px;
}

ただし上記の方法では長方形の幅が可変の場合に対応できません。そこで、right: 0;で配置していた長方形をleft: 100%;で配置し、transform-origin: top left;を設定します。これで回転の原点や長方形の移動距離を測ることなく、親のブロック要素内に収めることができました。

.div-child-06 {
	position: absolute;
	top: 0;
	left: 100%;
	width: 80px;
	height: 40px;
	background-color: purple;
	transform: rotate(90deg);
	transform-origin: top left;
}

関連記事

2021.09.13

HTML・CSS

nth-childの関数表記でカラムごとにCSSを設定

デモページはこちら 3カラムで複数行のコンテンツに、カラムごとに背景色のCSSを設定します。3カラムの場合、1カラム目は:nth-child(3n + 1)、2…

2020.10.30

HTML・CSS

Twitterボタンの設置とカスタマイズ

デモページはこちら Twitterボタンの設置とカスタマイズのまとめです。ボタンのソースコードは以下の公式サイトから生成できます。ただし、jsの読み込みが必要に…

2021.12.01

HTML・CSS

transformプロパティのskewで写真を傾斜変形

transformプロパティのskewで写真を傾斜変形させます。単純に傾斜変形させるだけでは写真がゆがみ左右がコンテンツの外側にはみ出してしまうので、それも調整…

2020.08.19

HTML・CSS

iOS Safariのツールバーと表示エリアの挙動

iOS Safariで表示される画面下部のツールバーは、下にスクロールすると非表示になります。正確には上部のアドレスバーが小さくなり、下部のツールバーが消えます…

2020.07.18

HTML・CSS

CSSアニメーションで画像を横スクロール無限ループ

CSSアニメーションで画像を横スクロール無限ループさせます。まずhtmlのコードです。同じ画像を2つ配置して、クラス名loop_wrapのdivタグで囲います。…

上に戻る