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

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

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

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

CSS

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

Q&A

解決済

3回答

11391閲覧

画像を内包するaタグのCSS設計について

qasev

総合スコア60

HTML5

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

CSS

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

0グッド

0クリップ

投稿2016/07/28 03:32

<a href="#"> <img src="#"> </a>

※例として、画像の幅は40x40

aタグ、imgタグはデフォルトではinline要素だと思いますが、aタグ自体は内包するimgタグ分の高さは出ない認識です。

イメージ説明

高さを出すには、aタグにdisplay: inline-blockを付与する必要があると思いますが、CSS設計の思想として、わざわざ高さを出すために画像を内包するaタグにinline-blockを付ける必要はあるのでしょうか。

高さを出さない(inline)でも実動作上は問題無いのですが、デベロッパーツール等で確認するといつも気になっています。

恐れ入りますが、ご教示お願いできると幸いです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

検証ツールでは確かに画像分の高さは出ていませんが、
ブラウザの挙動としてaに内包されたimg要素はそれ全体がリンク領域として機能しますので、
個人的には装飾・レイアウト上の理由がなければそのままで良いという認識です。

逆にレスポンシブWebデザインの際、全てのa要素がinline-blockになっていることで、
IE11で内包されたimg要素のmax-widthがうまく機能しないバグが発生する可能性があるので
理由もなくむやみに全部inline-blockにするのは危険と考えております。

投稿2016/07/28 06:33

aKusano

総合スコア3763

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

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

qasev

2016/07/28 06:59

IE11のバグの件は初耳でした。ありがとうございます。 不要なコードは極力入れないというのがまず原則ということで、 他の回答者様の回答含め、理解させていただきました。 しかし、コーダーのレベル?によっては、aタグ自体の領域が画像領域の下にはみ出しており、そのはみ出し分を余白として使うなどの誤った使い方をするケースがたまに見られます。 コーディングルールを制定することのない小規模かつ複数人での開発時にこのようなことになると、結合時に不要な手間がかかることがあります。 こういった事象はそもそも論外だと思いますが、 inline-blockさえつけたらこのようなことも起きなくなるのでは、 というのも質問の背景の一つです。 ご意見をいただき大変参考になります。
aKusano

2016/07/28 08:00

IE11のバグは、max-width:100%;が設定されているimg要素の直接の親要素(例えばa要素)がinline-blockまたはtable-cellで、かつwidthがautoである場合に発生します。 直接の親がinlineなら、スルーして更にその親要素の幅に合わせて伸縮してくれますが、なぜかinline-blockとtable-cellの場合にはこれが効かないんですよね。。。 意図的に設定した場合は気づきやすいですが、一律inline-blockになっていると思わぬ所でアレ!? という現象が起きかねないのでリスクは避けたほうがいいかな、と思った次第です。
qasev

2016/07/28 11:01

詳細にバグ内容ご教示いただきまして誠にありがとうございます。 理解いたしました。 極力必要ではないコードは使わないようにという所を意識するようにいたします。 ありがとうございます。
guest

0

思想…ということなので個人的な意見を述べると、CSS自体はただの装飾なので、つけてもつけなくても好きにしていいと思っています。
ただ設計として考えると、要素の状態は人間の想像に近くしておいた方がいいのかなと思うので、私ならinline-blockを指定しますね。
修正するときとか、ほかの人がデバッグするときのことを考えれば視覚的に混乱させないようにしたほうが親切かな、と。

投稿2016/07/28 03:38

NatsumiOki

総合スコア1298

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

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

qasev

2016/07/28 03:54

ご回答ありがとうございます。 私もNatsumiOki様と同じ考えなのですが、色々なサイトを見てもinline-blockにしているところが殆どなく、あれ?考え方間違っていたのか?と思うようになりまして今回の質問に至ります。 ありがとうございました。
NatsumiOki

2016/07/28 05:17

パフォーマンスの観点からは不要なソースは書かないほうがいいですが、プロジェクトによってはメンバーのスキルが均質でないこともあるので、人が理解しやすくメンテナンスしやすい方が、結果としてクオリティが落ちにくいという考え方をしています。 自分一人で作るなら気にしなくていいんですけどね(;´∀`)
qasev

2016/07/28 07:05

そうですね。不要な記述は1語でも削りたいという考えはあります。 保守性も考え、落とし所を探るしかないのかもしれません。 別の回答者様から、IEのバグの件もお話がありましたので、 使いドコロを見計らうということになってくると思います。 色々とアドバイスありがとうございます。
guest

0

a要素に対して特に装飾するつもりが無いならそのままでもOK。

css

1a { 2 border: 5px #F00 solid; 3}

などのようにa要素に対して装飾するならば高さをださないと、この場合ボーダーが画像を囲ってくれません。

css

1img { 2 border: 5px #F00 solid; 3}

とするか、

css

1a { 2 display: inline-block; 3 border: 5px #F00 solid; 4}

と記述する必要があります。

この考え方を基準に使い分けてはいかがでしょうか。

投稿2016/07/28 05:11

Qual

総合スコア13

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

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

qasev

2016/07/28 07:08

ありがとうございます。 基本的には、この考えですよね。 特に装飾がなければあえてdisplay: inline-blockを付けない、 という方が多く、色々なご意見がいただけ勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問