DIVタグをベタベタならべて、あとはcssでサイズや属性を指定してページをレイアウトしようとしています。しかし、inline-block指定をネストすると表示が急にずれることに気づきました。
まず3つのdivタグを並べます。inline-blockを指定することで横に並べます。
例えば次のようなものです。
■■■▲▲▲●●●
■■■▲▲▲●●●
■■■▲▲▲●●●
後の説明の都合上、3×3の大きさで描いていますが、■/▲/●がそれぞれ一つのDIVに対応していて
<DIV id="■"></DIV>
<DIV id="▲"></DIV>
<DIV id="●"></DIV>
となっていて、cssで適当なサイズが指定されていると考えてください。
ここで、▲を縦に3つに分けるために、<DIV id="▲"></DIV>のなかにネストしたDIVタグを3つ挿入します。
<DIV id="■"></DIV>
<DIV id="▲">
<DIV id="□"></DIV>
<DIV id="△"></DIV>
<DIV id="○"></DIV>
</DIV>
<DIV id="●"></DIV>
■■■□□□●●●
■■■△△△●●●
■■■○○○●●●
このように▲の中に□/△/○の3つのdivを置いて分割します。縦に並べるため、今度は□/△/○にinline-blockを指定していません。
更にこの△の部分を、今度は横に3分割することを考えます。つまり、<DIV id="△"></DIV>の中に
<DIV id="◆"></DIV><DIV id="◇"></DIV><DIV id="▼"></DIV>
を挿入します。今度は横並びにしたいので、◆/◇/▼はcssファイルでinline-blockを指定します。
期待している表示は、
■■■□□□●●●
■■■◆◇▼●●●
■■■○○○●●●
なのですが、実際には
■■■___●●●
■■■□□□●●●
■■■◆◇▼●●●
___○○○___
(___は空白)
のように真ん中のDIVが下にずれて表示されてしまいます。
試行錯誤した結果、どうやら外側のinline-blockの底辺と、内側のinline-blockの底辺とを一致させようとするロジックが働いているように見えます。
この現象はchrome/firefox/safariのいずれでも同じでした。
ということは、この動作はhtml/cssで規定されている動作でしょうか?
それとも、たまたますべてのブラウザで同じような実装上の不具合がある、と考えるべきでしょうか?
ちょっと分かりにくいかも知れませんが、ご存じの方、コメントをよろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>一般論ではなく、私の質問の内容からどこがマズイのかを<具体的に>指摘してもらえると助かります。
ずばり書いてあるはずです。その前提として、説明が必要でした。
inline-blockは、画像と同じinline要素ですから、行のベースラインに合わせられます。サンプルで示したように、きちんとabsoluteやfloatで並べればよいのです。
もう一度、回答をお読みなさい。
たびたびコメントありがとうございます。
ようやく理解しました。
absolute属性とtop/left/width/heightを使えば任意に位置を指定できるから、inline-blockで無理に揃える必要はないということでしたか。
それならそうと最初にその一言があってその後に頂いたコメントが続けばまだ良かったのですが、いきなり「HTMLとは・・・」に始まって「CSSとは・・・」で終わっているのでは、質問に対する関連性が見えにくく不親切だと感じました。
それにやはり回答は私の質問からずれています。
私の質問は「ずれないように表示する方法を教えて下さい」ではなくて、「ずれるのは、html/cssで規定された動作なのかどうか?」「それともブラウザ実装上の不具合なのか?」という点であって、それをハッキリと書いています。
私なり方法でもずれずに表示させる方法は見つけていますが、「ずれるのが規定の動作ならばそこにある配置ルールはどうなっているのだろう?」という疑問から質問させていただきました。
そういう点では、
もう一度、私の質問をお読みなさい。
と言いたいところですが、こういう言い方をされていい気がしますでしょうか。
ご回答の内容をみれば、私なんかよりもずっと知識と経験をお持ちなのは分かりますが、
>もう一度、回答をお読みなさい。
という言い方もちょっと上から目線であまり気持ちいいものではないです。せめて「もう一度回答を読み直してみましょう」くらいの表現であって欲しかったのが残念です。
ともあれ、別の方法を提示していただいた点については感謝します。ありがとうございました。
No.2
- 回答日時:
HTMLの基本から・・
HTMLは、文書構造をマークアップするもので、デザインを元にマークアップするとダメです。
「DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」
たとえば、
<body>
_<div class="header">
__<h1>見出し</h1>
_</div>
_<div class="section">
__<div class="section">
___<h2>見出しa</h2>
__</div>
__<div class="section">
___<h2>見出しb</h2>
__</div>
__<div class="section">
___<h2>見出しc</h2>
__</div>
_</div>
_<div class="footer">
_</div>
</div>
とかになるはずです。
★class名は、3.1. 新しい要素 ( http://standards.mitsue.co.jp/resources/w3c/TR/h … )を参考にしました。
その上で、CSSでデザインしていきますが、どの要素にスタイルを適用させるかは、セレクタを使って指定していきます。
★5. セレクタ ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )
そうすることで、将来的にデザインをまったく変える時でもHTMLは触らなくて済みます。--スタイルシートを使うことでデザインを一新できる--
div.section{position:relative;height:400px;
}
div.section div.section{
position:absolute;width:30%;top:0;left:0;
background-color:yellow;
}
div.section div.section+div.section{
left:33%;height:100%;
background-color:aqua;
}
div.section div.section+div.section+div.section{
left:66%;
background-color:green;
}
とかね。
そしてスタイルシートにCSSを使う場合は、その名のとおり「6.4 カスケード処理(The cascade) ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )」を使わないと意味がありません。
ご意見はありがたいのですが、質問の本質とはずれてしまっている気がします。
おっしゃりたいのは、「HTMLでは文書構造を、CSSではデザインやスタイルを定義するのが望ましい」ということでしょうか?
いちおうそういう方向性があること自体は理解していてそれに近づくようにしているつもりですが、私はWEB技術は専門ではありませんので、一般論ではなく、私の質問の内容からどこがマズイのかを<具体的に>指摘してもらえると助かります。
いまは良い解説がWEB上にゴロゴロ転がっていますから、私の質問内容や例示した例とは関係のない一般論を論じられるのでしたら、ここでいろいろ書いていただくお手数のことを考えると、URLを挙げていただくだけで十分ではないかと思います。
もし、私の質問に対する回答やヒントをお持ちでしたら、よろしくお願いします。
No.1
- 回答日時:
ありがとうございます。
まず、vertial-alignがデフォルトでbaselineになっていることは承知しています。
その上で、ご呈示いただいたURLをちょっと読んでみました。
今回例示したケースでは、ネストした<DIV>タグの外側のvertical-alignと内側のvertical-alignまで同一の位置に合わせようとしている(ように見える)のが、ちょっと不可解です。
<DIV>hoge</DIV><DIV>foo</DIV><DIV>bar</DIV>
と描いた3つのDIVにdisplay:inline-block;を指定すればbaselineが揃って横並びになるのは当たり前です。
真ん中の<DIV>foo</DIV>のfooの代わりに、<DIV></DIV>を入れ子にして何個か入れたとき、入れ子にした<DIV>をinline-blockにすると、外側の<DIV>hoge</DIV>とかと同じ垂直位置に合わせられるのが仕様なのかどうか、先のURLを読んでみてもまだはっきりしません(というか理解しづらい)。
おそらく「行」(というか「インライン要素」)の厳密な定義が理解できていないのが原因だと思います。もう少し調べてみますが、何かおわかりでしたら引き続きよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS PCサイズで赤い画像2つと、青い画像2つがそれぞれ横に2つずつ並んでいるのですが、これをスマホサイズ 5 2022/04/11 12:01
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- PHP 掲示板を作成しておりアップロードファイルとメッセージを並べたいので、アドバイスお願い致します 2 2023/07/17 21:01
- HTML・CSS HTML、cssのatomつぅーやつで 課題Ex1ってやつを表示させたいのですが、 私は課題Ex1が 2 2022/12/15 16:56
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
画面を縮小するとカラムが落ち...
-
div要素が重なってします
-
html の divとtable の役割
-
要素間、要素内に隙間が空く
-
可変長要素を中は左寄せのまま...
-
<div id="container">の使いか...
-
空のspanタブについて
-
HTML属性での「""」 「''」違い
-
1時間30分を簡単に表したいで...
-
hタグを使わずに小見出し
-
min-heightとheightの違いについて
-
一括で全体を右にずらす
-
divを追加すると下に隠れてしまう
-
複数のボタンを等間隔に、かつ...
-
htmlとcssの文章構造、これは正...
-
ブログのサイドバーが下にくる
-
ヘッダーを左右に二分割する方...
-
<DIV> と </DIV> の間が空です。
-
<div>テキスト</div>
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
複数のボタンを等間隔に、かつ...
-
div要素が重なってします
-
html の divとtable の役割
-
1時間30分を簡単に表したいで...
-
<div id="container">の使いか...
-
ヘッダーとフッターだけ背景を...
-
divの中に外部のHTMLを埋め込む
-
min-heightとheightの違いについて
-
セクションをdivで囲むと見出し...
-
スペースを使わず文字位置を揃...
-
3カラムレイアウトで「常に残り...
-
hタグの右横に画像を表示
-
inline-blockをネストすると表...
-
要素間、要素内に隙間が空く
-
リストで画像を右に表示したい
-
画面を拡大すると横幅が切れる
-
<div>テキスト</div>
-
<!-- #BeginLibraryItemとは
おすすめ情報