teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

5回答

6525閲覧

親子間の距離調整はpadding、兄弟間はmargin?

Silky

総合スコア34

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/08/27 13:54

0

0

いつも、距離調整でmarginとpaddingどちらを使おうか迷います。

そんな時に下記のツイートを見つけました。

「親子間の距離の調節はpadding,兄弟間はmarginで指定すると可読性の高いコードになる」

https://twitter.com/nose_free/status/1164704813327609857?s=21

たしかに今まで模写してきたサイトもそういう作りが多かった気がします。

上のツイートを参考にして、今後コーディングしていこうかなと考えているのですが、ベテランの皆様はどう思われますか?
また、使い分けで心がけていることがあれば教えていただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikadzuchi

2019/08/28 01:08

すいません、「親子間」「兄弟間」というのがどこの事を指しているのか分からないので具体的に図かHTML+CSSの例で示していただけますか?
Silky

2019/08/28 17:07 編集

Lhankor_MhyさんがHTML+CSSの例を挙げてくださったので、下記の例を引用させていただきます。 <section> <h1></h1> <article></article> </section> 親子間:sectionとh1、sectionとarticle 兄弟間:h1とarticle
ikadzuchi

2019/08/29 00:29

了解です。回答は既に十分出ているので私からは特にありません。
guest

回答5

0

ベストアンサー

基本的にその方針でコーディングして問題ありません。
が、そうする理由は「可読性」の問題ではありません。

「親子間の距離の調節」を行う際に子のmarginを使ってしまうと、
親要素にpaddingもborderもなかった場合、子のmarginが親要素の
外側についてしまって「親子間の距離の調節」にならない
仕様があります。
親要素にpaddingまたはborderがついていれば意図したとおりに
「親子間の距離」とすることはできますが、状況によって意図したとおりに
なったりならなかったりするような使い方は間違いの元となるため、
親要素と子要素の間に距離を取りたい場合は親要素にpaddingをつけるのが原則です。

また兄弟間の距離の調節にmarginを使うのは、
そもそもmarginの用途が**「隣接する他の要素との間の余白」を作るもの**なので
それを第一優先に使うのは当然です。

paddingで代用することが可能なケースもありますが、
制作時点ではpaddingが不要だったとしても、後々paddingを追加する必要が出てきた場合に、兄弟間の距離を取るのにpaddingを既に消費してしまっていた場合には
結局marginに付け替える必要が出てきます。
またpadding同士やpaddingとmarginは隣接した場合に相殺される仕組みが
ありませんので、意図的にmargin相殺をするといったテクニックも使えないので
製作時の選択肢がひとつ減ります。

結局、どちらを使っても良さそうに見えたとしても、
基本的には「隣接する要素間の余白はmargin、要素自身の内側の余白はpadding」
という基本仕様に沿った使い方を原則とするのが最も素直な使い方なんですよね。
もちろん「原則」なので何か意図があって「例外」的な使い方をすることは否定しませんが、
あくまで仕様と原則を理解した上での例外であるべきなので、乱用は避けるべきかと思います。

投稿2019/08/27 15:03

aKusano

総合スコア3763

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Silky

2019/08/28 17:20

>親要素にpaddingもborderもなかった場合、子のmarginが親要素の 外側についてしまって「親子間の距離の調節」にならない仕様 試してみるとまさにその通りでした! 可読性の問題ではなく、そのような裏の事情があることは知りませんでした。 勉強になりました。ご回答ありがとうございます!
guest

0

他の回答者さんのご回答にもありますが、
marginとpaddingは、可読性うんぬんで使い分けるのではなく、
あくまで役割・仕様の違いでしかありません。
ブロックの外側に適用されるのが、margin、ブロックの内側に適用されるのがpaddingです。
そのツイッターに出てくるエンジニアが何を意図して可読性が上がるを基準にしているのかは全く謎ですが、(CSSの可読性はまったく変わらないし、HTMLの書き方にしても、paddingにしようがmarginにしようが、それで書き方が変わるようなことはない。それで可読性の良し悪しが出るならはっきり言ってテクニックが足りない)
その考え方だと、簡単な実装においては、結果的には大丈夫だったとしても、
それを鵜呑みにしていると、込み入ったスタイルの実装の時に、行き詰まるかと思います。
(paddingきかせてるのに、全然きかない!←margin(外側)でないと隙間がきかない箇所、など)

実装したいレイアウトを見た時、自ずと、marginにすべきか、paddingにすべきかは見えてくるかと思いますので、仕様に則った正しい方を選択すべきでしょう。
ただし、aKusanoさんがおっしゃる通り、例外的に、marginではうまくレイアウトが効かないパターンは実際にあるので、実務の上では、本来marginにすべきだが、致し方なくpaddingに置き換えるということはよくあります。

投稿2019/08/28 01:22

miyabi_takatsuk

総合スコア9559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Silky

2019/08/28 17:15

>実装したいレイアウトを見た時、自ずと、marginにすべきか、paddingにすべきかは見えてくるかと思いますので、仕様に則った正しい方を選択すべきでしょう。 確かにその通りですね。型にはまった考え方だと柔軟性がなくなってしまうので、その場その場で適切だと判断したほうを使用していきたいと思います。 ありがとうございました。
guest

0

html

1<section> 2 <h1></h1> 3 <article></article> 4</section>

css

1section{ 2} 3h1{ 4 margin: 20px 20px 10px; 5} 6article{ 7 margin: 10px 20px 20px; 8}

と書くより、

css

1section{ 2 padding: 20px; 3} 4h1{ 5 margin: 0 0 10px; 6} 7article{ 8 margin: 10px 0 0; 9}

と書いた方がいい、ということですよね。

それは正しいと思いますが、原則論として覚えてしまうのはどうかと思います。
そのツイートも「コードレビューで指摘を受けた」と書いてあるだけで、原則論として書いているわけではないと思いますよ。

投稿2019/08/28 02:23

Lhankor_Mhy

総合スコア37460

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Silky

2019/08/28 17:10

HTML+CSSの実例で示していただき、ありがとうございます。 確かに原則論としては覚えずに、こういう考え方のもとに今回はmarginを使う、paddingを使う、というようにしていきたいと思います! ありがとうございました。
guest

0

可読性を上げる時、利便性・デザイン性を損なってしまっては意味がありません。
兄弟間や親子間でpaddingやmarginを使い分けるよりもいろいろ試してデザイン性・利便性に理にかなった物にしたほうが良いです。

その上でyoshinaviさんがおっしゃるようにパーツの名前をわかりやすくしたり無駄をなくしたりした方が良いです。

少なくとも自分はそんなポリシーを持ってます。

自分のホームページデザインが適当な奴が言えることではないですけどご参考までに

投稿2019/08/28 01:59

kyoya0819

総合スコア10434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Silky

2019/08/28 17:14

確かに、可読性をあげるため、利便性・デザイン性を犠牲にするのは意味がないですよね。。。 paddingやmarginを兄弟間、親子だからと言うように型にはまった考え方で判断するのではなく、おっしゃられるとおりデザイン性・利便性を考慮して決定していきたいと思います ありがとうございました。
guest

0

個人的な感想なので偏っているかもですが・・・

CSSはデザインを担当します。
marginには背景色は設定できませんが、paddingには設定できる事が、デザインには大きな違いになります。
「兄弟だからmargin」「親子だからpadding」に拘ったところで可読性は変わりがないです。

状況は千差万別であり、「aKusano」さんの回答にもあるようにmarginだと支障をきたす場合があるので注意は必要ですが、可読性をあげるのであれば、クラス名、プロパティ・プロパティ値の記述統一、部品の共通化、等の方に気を使った方が良いかと思います。

投稿2019/08/27 21:16

yoshinavi

総合スコア3525

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Silky

2019/08/28 17:19

>marginには背景色は設定できませんが、paddingには設定できる事が、デザインには大きな違いになります。 確かにその通りですね。これはpaddingとmarginの大きな違いですね! >可読性をあげるのであれば、クラス名、プロパティ・プロパティ値の記述統一、部品の共通化、等の方に気を使った方が良いかと思います。 確かに可読性という点ではそれらのほうが大切ですね。自分も今後命名や、プロパティとその値の記述の統一、部品の共通化などより意識していきたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問