
CSSで真ん中に配置する際に、positionを使った際のtransform: translate(-50%,-50%);の定義の意味について教えてください。
例えば以下の定義があった場合なのですが…。
■HTML
<div id="parent">
<div class="child"></div>
</div>
■CSS
#parent {
width: 500px;
height: 500px;
background: tomato;
position: relative;
}
#hoge .child {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
background: blue;
}
親の中の真ん中を定義する記述で、
top: 50%;
left: 50%;
を行いますが、この時点では子要素分がずれてしまって、真ん中では無いですよね?
この挙動の意味が良くわかりません、縦横50%で指定しているので、真ん中に来てくれてもよさそうなのに子要素の要素分がずれてしまいますよね?
そのためだと思うのですが、 transform: translate(-50%, -50%);の記述を行うのですが、この記述の意味としては、自分自身、子要素のサイズの半分を縦横50%マイナスに移動させるという定義内容の理解でよいのでしょうか?
何だか、 transform: translate(-50%, -50%);の記述を行うのにとても違和感があるのですが、positionで定義する場合には、こうのようなものだと割り切って理解したらよいでしょうか?
普段はflexで対応しますが、まれにpositionの指定が必要になるのですが、毎回気になってしまいまして…。
transform: translate(-50%, -50%);の意味について私の理解でよいか教えてください。
また、
top: 50%;
left: 50%;
だけでは真ん中に来ない挙動についてご説明頂けますと助かります。
宜しくお願いいたします。
No.3
- 回答日時:
flexbox 等の配置方法が一般化する前には、
領域内で四角形図形を上下に中央寄せするために、
そのものずばりのプロパティが存在しませんでした。
図形幅が固定であれば、単純に top に数値指定できますが、
図形幅が可変である場合でも無理なく中央寄せさせるために、
以下の組み合わせで指定します。
top:50% で、図形上端を「領域」縦幅の中央位置に配置
left:50% で、図形左端を「領域」横幅の中央位置に配置
transform:translateY(-50%) で、図形を「図形」縦幅半分だけ上移動
transform:translateX(-50%) で、図形を「図形」横幅半分だけ左移動
ご提示のサンプルの場合ですと
領域内の図形上端の座標 = 500px/2 - 100px/2 = 200px
領域内の図形左端の座標 = 500px/2 - 100px/2 = 200px
となり
縦幅 100px の図形を上下 200px のマージン
横幅 100px の図形を左右 200px のマージン
を指定するのと同じ表示ができます。
この指定方法の利点としては、図形の width/height の数値を変えても自動的に位置が調整されることです。そもそも無指定であっても構わないので、汎用的な上下中央寄せの技法として、よく使われています。
有難うございます。
ほとんどflex使うことが多いのですが、positionを絡めた設定の時に、たまに使わないといけないので、気になっていたので助かりました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSのtransform: translate(-50...
-
<h1>タグの後の行間を詰めたい。
-
INPUT TEXT内の文字位置を指定...
-
文字を左上に配置したい。
-
ホームページビルダー 空白の...
-
htmlのタグ間の謎の空白
-
iPhone用のサイトの文字がずれ...
-
aタグに直接style=""で:hoverを...
-
text-alignの解除の方法
-
なぜ左に寄っているの?
-
Excelの列や行の幅を表示...
-
エクセルでサイズ指定でPOP...
-
htmlでテーブル内にテキストボ...
-
テーブルで3セル作った行の下に...
-
ノーマルヤリスとGRヤリス
-
ホームページビルダーで横幅に...
-
エクセルでサイズに合ったもの...
-
vbsでIEの操作
-
PDFへてのテキストボックスにて...
-
ワードで「 」(カギかっこ)の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSSのtransform: translate(-50...
-
aタグに直接style=""で:hoverを...
-
text-alignの解除の方法
-
なぜ左に寄っているの?
-
<h1>タグの後の行間を詰めたい。
-
端から端まで横線を引きたい
-
インラインフレームの表示位置...
-
macとwindowsのレイアウト崩れ...
-
CSSでh1とその下の文字との行間...
-
chromeだけbody直下に空白が開く
-
INPUT TEXT内の文字位置を指定...
-
スクロールバーの色変更(長文)
-
CSSについて
-
リストの「・」をセンタリング...
-
SEO対策について-<h1>タグ-そ...
-
CSSにてコンテンツを中央へ寄せ...
-
CSSレイアウトの本当の正しいや...
-
ポインタがリンクの上に乗ると...
-
枠の固定
-
<pre>で折り返させる方法を教え...
おすすめ情報