
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ランキング
-
ホームページを作ったのですが...
-
topmarginをネスケで
-
要素の中央表示 CSS or HTML
-
CSSで中央ぞろえにするには?
-
requireでtextデータを読み込ん...
-
スクロールバーが表示されない。。
-
Firefox 横スクロールバーを表...
-
テキストボックスの文字を右揃...
-
CSSのtransform: translate(-50...
-
右端に1pxの余白ができてしまう
-
iPhone用のサイトの文字がずれ...
-
ウィンドウを狭めても中の表示...
-
Dreamweaverで画面サイズを一定...
-
htmlのタグ間の謎の空白
-
aタグに直接style=""で:hoverを...
-
スクロールバーによって表示が...
-
CSSでセンタリングしたい
-
divタグを中央寄せでwidthを指...
-
外部CSSがFireFoxで反映されません
-
右と左の両端に色を付けるには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSSのtransform: translate(-50...
-
aタグに直接style=""で:hoverを...
-
<h1>タグの後の行間を詰めたい。
-
text-alignの解除の方法
-
インラインフレームの表示位置...
-
なぜ左に寄っているの?
-
INPUT TEXT内の文字位置を指定...
-
FireFoxで見るとブラウザの幅に...
-
端から端まで横線を引きたい
-
macとwindowsのレイアウト崩れ...
-
外部CSSがFireFoxで反映されません
-
HTMLフォームのSELECTの幅を一...
-
CSSでh1とその下の文字との行間...
-
パソコンのみで反映される余白...
-
chromeだけbody直下に空白が開く
-
cssでheight: auto;を指定して...
-
ホームページビルダー 空白の...
-
iPhone用のサイトの文字がずれ...
-
アップロードするサーバーによ...
-
CSSで見出し(タイトル)行の右...
おすすめ情報