【css】displayの値オススメ5つ!レスポンシブデザインにも便利
webのコーディング作業で使用頻度の高いcssプロパティのうちのひとつ「displayプロパティ」は指定できる値が色々とあります。
displayプロパティを使用すると要素のブロックレベルやインラインの表示方法を設定する事ができます。例を挙げると、spanのようなインライン要素をブロックレベル要素として扱うことができたり、コンテンツの中身を非表示にしたりと、「display」はレスポンシブデザインにも大変便利なcssです。
そして、SEO対策を行うには、htmlの知識も多少必要となります。
本記事ではcssプロパティの「display」の中から特におすすめの値を5つ紹介するので、ぜひコーディングの参考にしてください。
目次
CSSのブロックレベル要素とインライン要素の違いを理解する
はじめに、ブロックレベル要素とインライン要素とは何か。それぞれの特徴や違いを理解しましょう。
ブロックレベル要素 | インライン要素 | |
---|---|---|
表示方法 | 新しい行から始まり、他の要素と縦に並ぶ | 同じ行に他の要素と横に並ぶ |
幅と高さ | 親要素の幅を全て占有し高さも指定できる | 内容に応じ幅と高さが決まり指定することはできない |
使用例 | ページの構造を形成するために使用 | テキストの一部として使用 |
例 | div、p、h1~h6、ul、ol、li、table、section、article、header、footer | span、a、strong、em、img、input、label、abbr、code、q |
よく使われるHTML要素のdisplayの初期値
displayの初期値は要素の表示形式を決定するものですが、通常、displayプロパティの初期値は「inline」となります。
しかし、仮にpタグの初期値はblockですが、「display: inline」を指定することでインライン要素として表示することができます。
以下にHTML要素のdisplayの初期値を紹介します。
※初期値はブラウザでの初期設定に基づいています。
HTML要素 | displayの初期値 |
---|---|
div, p, h1, h2, h3, h4, h5, h6, ul, ol, form, option, main, header, footer, section, nav, article, aside, body, html | block |
a, span, img, iframe, video, label, br | inline |
input, textarea, select | inline-block |
li | list-item |
table | table |
tbody | table-row-group |
tr | table-row |
td, th | table-cell |
head, style, script, meta, title, link | none |
\無料診断の活用で課題を明確に/
外部リンク、内部状況、コンテンツ状況からSEO対策の課題が見えてくる無料調査です。
「対策ページの弱点は何か...」などお悩みをお持ちの方は、一度「SEOパーソナル診断」をご利用ください。
display:none;
「display:none;」を記述すると中身が非表示となります。
div {display:none;}
レスポンシブデザインを導入する際、どうしてもcssだけでは対応しきれなく、PC用のコンテンツを部分的に非表示にしたい時などに便利です。
visibility:hidden;と同じように見えますが、「visibility:hidden;」は、見えなくなるだけで要素は詰まりません。
「display:none;」の方だとそこに無いものとして要素は詰まります。
ただし、display:none;でも、タグは読み込んでいるため、PC/スマホでアドセンスを振り分けたい場合は、3つしか表示させていないつもりでも、1ページに3箇所以上貼っていると判断され、3つ目以降は表示されません。
ここで、隠しテキストはスパムになるのでは?との意見も見かけますが、
次のようにGoogleが公言していることから、レスポンシブデザインは、必要に応じてdisplay:none;を使用しても問題ないと言っていいでしょう。
ただし、隠しテキストがすべて偽装行為と見なされるわけではありません。たとえば、サイトで JavaScript、画像、Flash ファイルといった検索エンジンにとってアクセスしにくい技術が使用されている場合、そのようなアイテムについて説明テキストを使用するとサイトのアクセシ ビリティが向上することがあります。また、スクリーン リーダー、モバイル ブラウザ、プラグインなしのブラウザ、低速接続環境でアクセスする多くの人間のユーザーもそのようなコンテンツを表示できないため、その場合も説明テキス トがあれば役立ちます。
display:inline;
「display:inline;」はインラインで表示するため、横並びの表示になります。
div {display:inline;}
「display:inline;」は、width(幅)とheight(高さ)は指定できません、marginとpaddingの上下も指定できません。
※paddingの上下は指定できますが、上下の要素とのマージン(余白)は変わらないので、重なってしまいます。
spanはインライン要素です
widthとheightも効いていないことがわかります。
<span style="width:200px; height:200px; padding:20px 0; border:solid 2px #999;">spanはインライン要素です</span>
よく使うインライン要素がこちらです。
- a
- br
- button
- iframe
- img
- input
- label
- select
- textarea
欠点は、要素との間に余白ができることです。
これに対応するには、
- html側で該当の箇所では改行しない
- 要素と要素の間をコメントアウトする
などありますが、少し面倒なので、多少の余白なら気にならないような時に使える値です。
これで、表現できない場合は、floatを使った方が管理しやすい場合もありますが、今度はvertical-alignが効かなってしまうので、その時のデザインによって使い分けるようにしましょう。
\無料診断の活用で課題を明確に/
外部リンク、内部状況、コンテンツ状況からSEO対策の課題が見えてくる無料調査です。
「対策ページの弱点は何か...」などお悩みをお持ちの方は、一度「SEOパーソナル診断」をご利用ください。
display:block;
「display:block;」は、ボックス要素として表示するため、横幅に関係なく縦並びとなります。
div {display:block;}
widthとheight、marginとpadding全て指定できます。
aタグに設定するとクリック可能なエリアを大きくできたり、spanなどのインライン要素に設定するとブロック要素扱いとなるため、上下のmarginを設定できたりします。便利ですが、vertical-alignは指定できません。
このように、上にある要素のmargin-bottomと、下にある要素のmargin-topでは、相殺され、大きい方だけが採用されて表示されます。
vertical-alignが効いてないのもわかります。
<div style="width:200px; height:80px; margin:0 0 20px; padding:10px 0; color:#fff; text-align:center; vertical-align:middle; background:#333;">margin-bottom:20px;</div> <div style="width:200px; height:80px; margin:30px 0 0; padding:10px 0; color:#fff; text-align:center; background:#666;">margin-top:30px;</div>
レスポンシブデザインを導入する際、floatして2カラムで組んでいるPCサイトの場合だと、floatを解除するだけで縦に並びますよね?これは<div>がブロック要素だからです。
よく使うブロック要素がこちらです。
- div
- form
- h1~h6
- p
- table
- ul
こちらを多少覚えていると、marginとpaddingの扱いが理解できるのでコーディングする際に便利です。
display:table;
「display:table;」は「display:table-cell;」と一緒に使うことが多いかと思います。
table要素のような表示になります。
<ul> <li>コンテンツA</li> <li>コンテンツB</li> <li>コンテンツC</li> </ul>
ul {display:table;} ul li {display:table-cell;}
とした場合、テーブルを使ったようなレイアウトの段組が表現できます。
\無料診断の活用で課題を明確に/
外部リンク、内部状況、コンテンツ状況からSEO対策の課題が見えてくる無料調査です。
「対策ページの弱点は何か...」などお悩みをお持ちの方は、一度「SEOパーソナル診断」をご利用ください。
display:table-cell;
「display:table-cell;」は先ほども述べたように、floatを使わずに横並びにすることができます。
td要素のような表示になります。
div {display:table-cell;}
親要素にtable-layout:fixed;を指定してあげると横幅が均等に配置されます。
さらに、「display:table-cell;」の利点としては、テーブルセルとして扱える為「vertical-align」を使えるので、コンテンツを上下中央に表示することも可能です。
- コンテンツA
- コンテンツB
- コンテンツC
<ul style="display:table;"> <li style="width:100px; padding:10px; background:#333; color:#fff; text-align:center; display:table-cell; vertical-align:middle;">コンテンツA</li> <li style="width:100px; padding:10px; background:#666; color:#fff; text-align:center; display:table-cell; vertical-align:middle;">コンテンツB</li> <li style="width:100px; padding:10px; background:#333; color:#fff; text-align:center; display:table-cell; vertical-align:middle;">コンテンツC</li> </ul>
そんな時は、display:table;を指定した要素に、border-collapse:separate;と、border-spacingを追記すると余白を確保することができます。
border-spacing:5px 0;の数字は、(横の余白)(縦の余白)の順番です。
- コンテンツA
- コンテンツB
- コンテンツC
<ul style="display:table; border-collapse:separate; border-spacing:5px 0;"> <li style="width:100px; padding:10px; background:#333; color:#fff; text-align:center; display:table-cell; vertical-align:middle;">コンテンツA</li> <li style="width:100px; padding:10px; background:#666; color:#fff; text-align:center; display:table-cell; vertical-align:middle;">コンテンツB</li> <li style="width:100px; padding:10px; background:#333; color:#fff; text-align:center; display:table-cell; vertical-align:middle;">コンテンツC</li> </ul>
また、下記のようなデザインの場合、paddingで余白を確保することができます。
- コンテンツA
- コンテンツB
- コンテンツC
<ul style="display:table;"> <li style="padding:0 20px; border-left:solid 2px #999; border-right:solid 2px #999; text-align:center; display:table-cell;">コンテンツA</li> <li style="padding:0 20px; border-right:solid 2px #999; text-align:center; display:table-cell;">コンテンツB</li> <li style="padding:0 20px; border-right:solid 2px #999; text-align:center; display:table-cell;">コンテンツC</li> </ul>
displayプロパティの2値構文がサポートされている
displayプロパティでは、指定する値を2つ設定できるように特定のブラウザでサポートされています。
現状ではSafariとFirefox、Chrome(2023年7月予定)ですが、2値構文はブロックレベルかインラインレベルなのかが明確化されるようになります。
2値構文は「display: 外側の値 内側の値;」というように設定できますが、使用例は以下です。
display: block flow;
上記は「block」で外側の値を指定し「flow」で内側の値を指定しています。
ちょっとわかりにくいので、いくつか従来の単一での値と2値構文の値を表にしました。
従来の値 | 2値構文の値 |
---|---|
block | block flow |
inline | inline flow |
inline-block | inline flow-root |
便利なdisplayの値5つまとめ
いかがでしたでしょうか。
たった5種類の値だけで色々な組み方に対応できるdisplayプロパティは、本記事でご紹介した値の他にも「flex」「grid」など便利なものがありますが、個人的には今回紹介したものだけで充分な気がします。
これからcssのdisplayを学ぶ方は、まず、この5つの値から覚えていくのが良いかもしれません。
レスポンシブデザインの作り方については下記の記事もご参考ください。
レスポンシブデザインによく使うcssは下記の記事も参考にしてみてください。