JSFiddle - React, Tailwind, and code Playground
HTML
<h3>段落上下スペースのオリジナル</h3>
<div class="main">
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
</div>
<h3>本来適用しておきたいのは以下</h3>
<p>
pのmarginはpに対する指定なので、pとそこに連接するpの間には指定したスペースの空きが欲しいが、#mainのpaddingは上下左右同じ量を開けたい。
<br> 例えば、pの前に見出しがあった場合も考えるともっと良い。見出しにもおそらくスペースが開いているだろうから、pの前後にスペースを開けると見出しスペース+Pのスペースとなって思いがけぬスペースが開く。
</p>
<div class="main2">
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
</div>
<h2>見出しを入れた場合の表示</h2>
<p>
見出しはその後に続く段落の件名みたいなものだから、見出し後の最初のpの間はあまりスペースを開けなくても良いはず。ここらはまとまりをどうデザインするかにもよる部分。
</p>
<div class="main">
<h2>見出しを入れてみるテスト</h2>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
</div>
<div class="main2">
<h2>見出しを入れてみるテスト</h2>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
</div>
<h2>同じ体裁が続く場合</h2>
<p>段落上下マージンでは、同じ体裁が続いた場合mainのpadding+最後のpのスペースでmainのボトムにムダなスペースができる</p>
<div class="main">
<h2>見出しを入れてみるテスト</h2>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<h2>見出しを入れてみるテスト</h2>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
<p>
段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落 段落
</p>
</div>
<p>以下では、同じ体裁が続いてもmainのpaddingは維持できているという点に注目。<br>もし仮にmainがこのような1つのブロックのみ表示するものではなく、main自体が横並びになっていたり、カードのように縦にも並ぶ場合、ボトムのスペースがムダにあるとあまり美しく見えないのがポイント。<br>
スペースの都合上mainのpaddingが10pxだけれども、これが大きくなればなるほどにムダなスペースが目立つようになる。</p>
<div class="main2">
...
CSS
.main h2,
.main2 h2 {
margin: 0;
margin-bottom: 0.5em;
}
.main {
padding: 10px;
border: 1px solid #f99;
}
.main p {
margin: 2em 0;
}
.main2 {
padding: 10px;
border: 1px solid #f99;
}
.main2 p {
padding: 0;
margin: 0;
/*ブラウザデフォルトスタイルを含めリセット*/
margin-bottom: 2em;
}
.main2 p:last-child {
margin-bottom: 0;
}