
display:flexで横並びを作成しているのですが、画像があると挙動がおかしいです。
実現したいことは・・・
スマホでは画像の下に文字を表示。
PCでは画像と文字を横並びにしたいと考えております。
IE11で見ると画像と文字の間に大きな余白ができてしまいます。
※画像は2000pxサイズでテストしています
■html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="inner">
<div class="flex">
<div><img src="image.jpeg" alt="あいうえお"></div>
<div>かきくけこ</div>
</div>
<div class="flex">
<div>あいうえお</div>
<div>かきくけこ</div>
</div>
</div>
</body>
</html>
■css
.inner {
margin: auto;
width: 90%;
}
.flex {
display: -webkit-flex;
display: flex;
}
img {
max-width: 100%;
}
@media screen and (max-width: 480px) {
.flex {
-webkit-flex-flow: column wrap;
flex-flow: column wrap;
}
}
画像の部分を文字にすると隙間は表示されないので、画像を縮小した際のバグ的なもの?
かと思っているのですが、このような場合はどうすれば解決できますでしょうか?
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
HTMLとCSSの基本から学びなおしましょう。
まずはHTML4.01とCSS2.1でよいですから、仕様書程度は最初に通読しておきましょう。HTML 4.01 Specification (ja)( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )
Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification( http://www.w3.org/TR/CSS2/ )
HTMLは文書構造をマークアップするものでデザインのためではありません。→構造とプレゼンテーションの分離( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )
たとえば、div要素は、HTML4.01の時代から『id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』であって、決してデザインのためではありません。<div class="inner"><div class="flex">のように間違った使い方があまりに多いため、HTML5では文書構造を示す<header><section><footer><nav><aside>のような新しい要素が導入され、divは原則使えなくなりました。
そしてdivは原則使わない。
NOTE:Authors are strongly encouraged to view the div element as an element of last resort, for when no other element is suitable.( http://www.w3.org/TR/html5/grouping-content.html … )
★著者は他に適切な要素がない時の最後の最後の手段としてdiv要素を使うよう強く推奨される。
★他に適当な要素がない場合にも、必ず文書構造をしめすものにする。
class="frex" だと意味が分からないし、将来display:inline-blockとかにしようとした時、齟齬が生じるでしょ。
また、スタイルシートは、CSS2以降は起点セレクタから書くことになっています。
『単体セレクタは型セレクタもしくは 全称セレクタのいずれかの直後に、0個以上の属性セレクタ、IDセレクタ、擬似クラスが任意の順序で続くものである。( http://momdo.s35.xrea.com/web-html-test/spec/CSS … )』
そしてセレクタはHTMLの文書構造に従って記述する。
>実現したいことは・・・
>スマホでは画像の下に文字を表示。
>PCでは画像と文字を横並びにしたいと考えております。
>img {max-width: 100%;}
でしたら、まだ勧告に至っていない不安定なflexを使わなくても簡単に実現できます。CSS2.1で十分です。
※それがheader内にあるナビゲーションだとして書くと
<body>
<header><!-- この文書のヘッダ -->
<h1>ページタイトル</h1>
<nav><!-- ここはナビゲーション -->
<ul><!-- 順不同リスト -->
<li><img src="" width="" height="" alt="">
<p>画像の説明</p>
<p>画像の説明</p>
</li>
<li><img src="" width="" height="" alt="">
<p>画像の説明</p>
<p>画像の説明</p>
</li>
</ul>
</nav>
</header>
というHTMLをまず書きます。
スタイルシートはパソコンの場合
header nav ol{list-style:none;margin:5px 0;padding:0;}
header nav ol li{display:block;margin:0;padding:0;width:100%;}
header nav ol li img{width:50%;height:auto;}
だけで済む
タブレットやスマホには
header nav ol li img{display:block;width:100%;}
ちなみに、HTML4.01でしたら、
<body>
<dic class="header"><!-- この文書のヘッダ -->
<h1>ページタイトル</h1>
<div class="nav"><!-- ここはナビゲーション -->
<ul>
<li><img src="" width="" height="" alt="">
<p>画像の説明</p>
<p>画像の説明</p>
</li>
<li><img src="" width="" height="" alt="">
<p>画像の説明</p>
<p>画像の説明</p>
</li>
</div>
</ul>
</div>
となります。
やつと本題ですが、HTMLを見ても構造がわからないために、実はされたいことが見えてこない。
あなたが挙げられている
<div class="inner"><!-- このブロックはどういう意味をもつのか -->
<div class="flex"><!-- このブロックはどういう意味をもつのか -->
<div><img src="image.jpeg" alt="あいうえお"></div><!-- これは段落(pragraph)なので<p></p>?? -->
<div>かきくけこ</div><!-- これは段落(pragraph)なので<p></p>?? -->
</div>
<div class="flex">
<div>あいうえお</div>
<div>かきくけこ</div>
</div><!-- 上記div.flexと並列なものならリスト<li>でマークアップすべき -->
</div>
の部分を意味が分かるように書き直したうえで、それぞれをどのように配置したいかを図示してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- HTML・CSS PCサイズで赤い画像2つと、青い画像2つがそれぞれ横に2つずつ並んでいるのですが、これをスマホサイズ 5 2022/04/11 12:01
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS CSSがなぜかfont-sizeだけ効かない...記述がまちがっているんでしょうか 5 2022/04/09 17:52
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html の divとtable の役割
-
CSSで子ボックスに背景画像を設...
-
<div id="container">の使いか...
-
htmlのolやulなどlistにtitleや...
-
cssで見出しが複数行になると先...
-
h1のテキストサイズよりh2の方...
-
divを追加すると下に隠れてしまう
-
CSSで、任意の場所に空白を入れ...
-
オシャレな区切り線はありませ...
-
SSIを利用してCSSレイアウトを...
-
スペースを使わず文字位置を揃...
-
CSSで、contentsがfooterに重な...
-
HTML文章の文字サイズについて
-
article、section、hgroup?
-
hタグの右横に画像を表示
-
RMS レフトナビ問題
-
HTML属性での「""」 「''」違い
-
音声ブラウザ、スクリーンリー...
-
footerのclear:bothが効きません
-
htmlのブラウザごとの表示について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
html の divとtable の役割
-
複数のボタンを等間隔に、かつ...
-
ヘッダーとフッターだけ背景を...
-
div要素が重なってします
-
<div id="container">の使いか...
-
1時間30分を簡単に表したいで...
-
グリッドレイアウトで"auto-fit...
-
min-heightとheightの違いについて
-
divとpの使いわけ
-
セクションをdivで囲むと見出し...
-
スペースを使わず文字位置を揃...
-
divの中に外部のHTMLを埋め込む
-
要素間、要素内に隙間が空く
-
body>div{}の意味を知りたい
-
ヘッダーを左右に二分割する方...
-
html5でheaderの中にnav
-
hタグを使わずに小見出し
-
CSSで、contentsがfooterに重な...
おすすめ情報