
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で質問しましょう!
似たような質問が見つかりました
- JavaScript 画面に表示したらアニメーションを開始したい 3 2023/01/13 15:38
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSのtransform: translate(-50...
-
aタグに直接style=""で:hoverを...
-
macとwindowsのレイアウト崩れ...
-
インラインフレームの表示位置...
-
IE8ではtext-align: center;で...
-
INPUT TEXT内の文字位置を指定...
-
端から端まで横線を引きたい
-
なぜ左に寄っているの?
-
右と左の両端に色を付けるには?
-
外部CSSがFireFoxで反映されません
-
Excelの列や行の幅を表示...
-
PDFへてのテキストボックスにて...
-
ワードで「 」(カギかっこ)の...
-
htmlでテーブル内にテキストボ...
-
バーコードのサイズは拡大縮小...
-
エクセルでサイズに合ったもの...
-
エクセル 画面表示拡大率によ...
-
エクセルの行の幅がずれる
-
Excel で等間隔で縦線を引きた...
-
外枠線と内枠線の色の指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSSのtransform: translate(-50...
-
aタグに直接style=""で:hoverを...
-
text-alignの解除の方法
-
なぜ左に寄っているの?
-
端から端まで横線を引きたい
-
<h1>タグの後の行間を詰めたい。
-
FireFoxで見るとブラウザの幅に...
-
HTMLフォームのSELECTの幅を一...
-
INPUT TEXT内の文字位置を指定...
-
macとwindowsのレイアウト崩れ...
-
インラインフレームの表示位置...
-
chromeだけbody直下に空白が開く
-
htmlのタグ間の謎の空白
-
iPhone用のサイトの文字がずれ...
-
ホームページビルダー 空白の...
-
CSSの設定
-
CSSでh1とその下の文字との行間...
-
外部CSSがFireFoxで反映されません
-
表をページ中央に表示
-
topmarginをネスケで
おすすめ情報