[解決済み] margin-block-startとmargin-topの違いは何ですか?
質問事項
両者の使い方の違いを理解したいのですが、そのような比較を詳しく説明している記事やドキュメントを見つけることができません。提供された例を取ると こちら を想定して、以下のようにします。
div {
background-color: yellow;
width: 120px;
height: 120px;
}
.exampleText {
writing-mode: vertical-lr;
margin-block-start: 20px;
background-color: #c8c800;
}
<div>
<p class="exampleText">Example text</p>
</div>
との違いは
このインスタンス
とは異なり
margin-top
が使われています。
は、かなり小さいです(ただし、見える)。
は、その
仕様書
と記載されています。
margin-block-start
レイアウトモデルに依存する
一方
margin-top
包含するブロックの幅を参照する
. どなたか平易な言葉で説明していただけると幸いです。
どのように解決するのですか?
公式より 1 仕様 を読むことができます。
これらのプロパティは、margin-top, margin-bottom, margin-left, margin-rightプロパティに対応する。マッピングは、要素のwriting-mode、direction、text-orientationに依存する。
デフォルトでは、以下のようなマッピングになります。
margin-block-start = margin-top
margin-block-end = margin-bottom
margin-inline-start = margin-left
margin-inline-end = margin-right
例
.margin {
margin-top:50px;
margin-bottom:10px;
margin-left:100px;
margin-right:200px;
}
.margin-alt {
margin-block-start:50px;
margin-block-end:10px;
margin-inline-start:100px;
margin-inline-end:200px;
}
div {
border:2px solid;
padding:20px;
}
<div class="margin">
A
</div>
<hr>
<div class="margin-alt">
A
</div>
ここで、書き込みモードを変更すると、異なるマッピングになることがおわかりいただけると思います。
.margin {
margin-top:50px;
margin-bottom:10px;
margin-left:100px;
margin-right:200px;
}
.margin-alt {
margin-block-start:50px;
margin-block-end:10px;
margin-inline-start:100px;
margin-inline-end:200px;
}
div {
border:2px solid;
padding:20px;
writing-mode: vertical-lr;
}
<div class="margin">
A
</div>
<hr>
<div class="margin-alt">
A
</div>
<div class="margin-alt" style="writing-mode: vertical-rl;">
A
</div>
上記で
vertical-lr
に相当するマッピングが
margin-block-start = margin-left
margin-block-end = margin-right
margin-inline-start = margin-top
margin-inline-end = margin-bottom
を使用する場合は
vertical-rl
margin-block-start = margin-right
margin-block-end = margin-left
margin-inline-start = margin-top
margin-inline-end = margin-bottom
すべてのケースの詳細は省きますが、基本的にはそれぞれ
margin-*-*
プロパティは
margin-*
の値に基づいて
writing-mode
,
direction
および
text-orientation
.
さまざまな値で遊んで、さまざまなケースを確認することができます。
あなたの例は、マージン折りたたみとデフォルトマージンを
p
ということで、わかりにくいですね。
より良いものを紹介します。
div:not([class]) {
background-color: yellow;
width: 120px;
height: 120px;
border:1px solid;
}
.exampleText {
writing-mode: vertical-lr;
margin-block-start: 20px; /* we will end with a margin-left */
background-color: #c8c800;
}
.exampleText2 {
writing-mode: vertical-lr;
margin-top: 20px; /* this will remain a margin-top */
background-color: #c8c800;
}
<div>
<div class="exampleText">Example text</div>
</div>
<div>
<div class="exampleText2">Example text</div>
</div>
1 : あなたが使っているリンクは MDN のページで、これは良い参考資料ですが、公式の仕様ではありません。
関連
-
[解決済み】CSS "margin: 0 auto" が中央揃えにならない。
-
[解決済み] 画面サイズ、現在のウェブページ、ブラウザウィンドウのサイズを取得する
-
[解決済み] SCSSとSassの違いは何ですか?
-
[解決済み] HTMLのid属性に有効な値は何ですか?
-
[解決済み] visibility:hiddenとdisplay:noneの違いは何ですか?
-
[解決済み] inline/inline-block要素間のスペースを削除するにはどうすればよいですか?
-
[解決済み] divブロック内のテキストを(水平方向と垂直方向に)センタリングするにはどうすればよいですか?
-
[解決済み] display: inlineとdisplay: inline-blockの違いは何ですか?
-
[解決済み] ビューのパディングとマージンの違いについて
-
[解決済み] [Solved] What's the difference between <b> and <strong>, <i> and <em>?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】iframeの背景色を変更する問題
-
[解決済み】WebページでWindows 95のフォントを使用する
-
[解決済み] HTMLでSVGを使用して三日月を描画する
-
[解決済み] テーブルセルの背景を透明にする方法
-
[解決済み] d3.tipが動作しないのはなぜですか?
-
[解決済み] HTMLファイルへのリンクは可能ですか?
-
[解決済み] Bootstrapのカラム内で画像を中央に配置する方法 [重複]について
-
[解決済み] フッターの内容が重なっているのを修正するには?
-
[解決済み] TD rowspan が機能しない
-
[解決済み] mailchimpのメールインラインスタイルのコーディングがいつも通りできない