No.4ベストアンサー
- 回答日時:
質問者様のイメージに完全には合わないかもしれませんが、妥協案が2つあります。
下記サンプルはwidth: 500pxの領域に、左から一定の位置に上揃えで2アイテムづつ画像+テキストのブロックを並べる、という想定です。
検証環境はIE6/7、Firefox2.0~、Opera9.25 on Windows XPのみです。
ただし、どちらの場合も質問者様のコメントにありました背景画像でボトム合わせにしたライン、というのを上記4環境で完全に同じ結果を得ることはhackを使ってもできませんでした。
【妥協案A】では下記CSSサンプル中の<li>に対するbackgroundプロパティを:
---------------------------------------------------------------------
background: url(../images/line.gif) repeat-x bottom left;
---------------------------------------------------------------------
と定義すれば、IE6/7を除く他環境では下揃えでFIXしてくれているのですが、IE6/7ではスクロールバーが発生した場合は下がりきった位置でないと表示しません。で、IE6はアンダースコア・ハックで
---------------------------------------------------------------------
_background-attachment: fixed;
---------------------------------------------------------------------
を追加すれば固定位置に表示されるのですが、IE7はこれを適用すると逆に背景が表示されなくなりますので、結果、IE7ではこのレイアウトを実現するのは無理でした。
ですので、ラインを画像ではなくborderプロパティを使って引く、という仕様にサンプル中では変更しています。
---------------------------------------------------------------------
【妥協案A】overflowでスクロールバーが出てもよい
---------------------------------------------------------------------
【HTMLサンプル】
---------------------------------------------------------------------
<ul class="sample">
<li>
<img src="./images/img_a.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキスト</p>
</li>
<li>
<img src="./images/img_b.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>
</li>
<li>
<img src="./images/img_c.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>
</li>
<li>
<img src="./images/img_d.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキスト</p>
</li>
</ul>
---------------------------------------------------------------------
【CSSサンプル】
---------------------------------------------------------------------
ul.sample {
display: inline-block;
width: 500px;(親要素で幅が決まっていれば特に定義不要)
list-style: none;
padding: 0;
margin: 0;
}
ul.sample:after {
content: "";
display: block;
clear: both;
}
ul.sample li {
width: 240px;(500pxを2等分したものから更に右マージン10pxを引いた値)
height: 60px;(これは適当なので、適切な値を定義)
float: left;
overflow: auto;
border-bottom: solid 1px #000000;
padding: 0;
margin: 10px 10px 10px 0;(上下マージンの値はお好みで)
}
ul.sample li img,
ul.sample li p {
margin-right: 20px;(overflowでスクロールバーが出た時に中のデータの右端がスクロールバーに隠れてしまうのを防ぐ為の余裕)
}
---------------------------------------------------------------------
メリット:テキスト量やフォントサイズの変更に左右されることなく、固定値の高さを保ったままアイテムを均一に並べて行くことが可能。中に入るデータ量を気にせず、どのアイテムにも同じマークアップとクラスが適用される為、アイテムの増減があってもメンテナンスが楽。
デメリット:スクロールバーが発生するアイテムの場合、一瞥で全体を見ることができない。
---------------------------------------------------------------------
【妥協案B】スクロールバーを出さず、アイテム全体を見せたい。
---------------------------------------------------------------------
【HTMLサンプル】
---------------------------------------------------------------------
<ul class="sample first-row">
<li>
<img src="./images/img_a.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキスト</p>
</li>
<li>
<img src="./images/img_b.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>
</li>
</ul>
<ul class="sample">
<li>
<img src="./images/img_c.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキスト</p>
</li>
<li>
<img src="./images/img_d.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>
</li>
</ul>
<ul class="sample">
<li>
<img src="./images/img_c.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>
</li>
<li>
<img src="./images/img_d.gif" alt="画像" width="150" height="17">
<p>テキストテキストテキスト</p>
</li>
</ul>
---------------------------------------------------------------------
【CSSサンプル】
---------------------------------------------------------------------
ul.sample {
(【妥協案Aと同じ】)
}
ul.sample:after {
(【妥協案Aと同じ】)
}
ul.another li {
width: 200px;
float: left;
padding: 10px 0 0 0;
margin: 10px 10px 10px 0;
border-top: solid 1px #000000;
}
ul.another li img,
ul.another li p {
(【妥協案Aと同じ】)
}
ul.first-row li {
border-top: none;
margin-bottom: 0;
}
---------------------------------------------------------------------
メリット:アイテム全体が表示される。
デメリット:アイテムのデータ量によって、下の余白はまちまちとなる。2アイテムづつ上揃えにするには、2アイテム毎に<ul>~</ul>でマークアップしなければならない。ボーダー位置を揃えて見せる為に、border-bottomではなくborder-topで指定している為、最初の列には常に別のクラスも併合しておかなければならず、最後の列はボーダーを付けられない。
丁寧にご提案いただきありがとうございます!
ご提案頂いたようにこの件は妥協しようと思っています。
まずスクロールさせる案ですが、私はスクロールは少し抵抗があるのと
これは内容的に合わないので今回は使用しないですが
B案は一番理想に近いと思うので使わせて頂こうと思います。
デメリットで書いてらっしゃる通りボーダーの処理が必要で、今回は
ulにボーダーbottomを付けることにしました。
(テストしてうまくいきました。)
本当にありがとうございました!
感謝致します。
No.5
- 回答日時:
こんにちは
え~~と、お伝えしたかったのはそういうことではなくておそらく大外の枠のwidthのみ設定して(#2で言うところの<ul style="width:800px">)、float解除することなくfloat:left;した<li>を並べたものにしているのでしょうから左右の<li>の高さが異なると(#2で言うところのheight:51px;、height:50px;)(←これは<div>で生成されてる高さを表しています)
左の高さが右の高さより多いと必然的に
■■
■
の状態になるということです
なので左右の高さを揃えるか、clear:both;によってfloat解除する方法を提示しました
#2下側のサンプルで解決したというお声がかからないということは・・・
>背景画像で下記のようにラインも入れてありますし
このライン画像も同じ位置にしたいのでしょうか?
HTMLでは無理(やろうと思えばできると思いますが)なのでjavascriptを使用することになります
『haightLine.js』
http://blog.webcreativepark.net/2007/07/26-01033 …
↑ここから取得してください
<script type="text/javascript" src="./heightLine.js"></script>
<style type="text/css"><!--
li {
width:400px;
float:left;
background-image:url("****.gif");
background-position:bottom;
background-repeat:no-repeat;
}
.left {
clear:both;
}
--></style>
<ul style="width:800px;margin:0px;padding:0px;list-style:none;">
<li class="heightLine-group1" style="background-color:red;">aa<br>ee</li>
<li class="heightLine-group1" style="background-color:blue;">bb</li>
<li class="heightLine-group2,left" style="background-color:yellow;">cc</li>
<li class="heightLine-group2" style="background-color:green;">dd<br>ff<br>gg</li>
</ul>
<div style="clear:both;"></div>
※サンプルですのでとりあえず<li>につけてますが質問の流れ的には<div>の方に画像は配置されてるでしょうから<li>ではなく<div>の方にclass="heightLine-group*"指定してください
※3番目の<li>についているclass="left"はjavascript off用のものですがjavascript offの時には左右の位置関係は変わりませんが上下のレイアウトは崩れます
一番いいのは2つずつ<ul>で結んで<li><div>にheight指定(左、右の高い方のheightで指定)しておいて
>文字サイズを変更できるようにしてあったので
↑javascript使用(?)の中で<li><div>のheightも同じ倍率掛けてやればできると思います
お返事頂きありがとうございます!
おっしゃる通りです。
高さを揃えたい理由はラインの位置も揃えたいからだったんです。
javascriptを使って揃える方法
これはいいですね。
今使うかは悩み中ですが(他のjavascriptの使用とを考えて)方法があるにはあるんですね。今後使えそうです。
ありがとうございます。
取り急ぎお礼まで。
No.3
- 回答日時:
>li{
ん?divの指定は無いんだね
divは描画機構によってはliを無視した位置で描画されてliからはみ出るよ。
それが原因じゃない?
li側でoverflowを書いておくか内側のdivもwidthで制限したら治らない?
widthはいれてあったので高さ指定とoverflow入れてみたんですが、
文字サイズを変更できるようにしてあったので、文字サイズ大にすると結局ダメでした。
やっぱりちょっと無理がありますよね。
No.2
- 回答日時:
こんにちは
いまいちピンとこないですが・・・
■1つで<li>を表していて width:400px; 中に画像とテキストがあるということですよね?
heightはどうなっていますか?
左右2つのheightが揃っていないとそういった現象は確認できますが・・・
(例)※違いが分かるようにそれぞれにstyle指定してます
<ul style="width:800px;margin:0px;padding:0px;list-style:none;">
<li style="width:400px;height:51px;float:left;background-color:red;">aa</li>
<li style="width:400px;height:50px;float:left;background-color:blue;">bb</li>
<li style="width:400px;height:50px;float:left;background-color:yellow;">cc</li>
<li style="width:400px;height:50px;float:left;background-color:green;">dd</li>
</ul>
<div style="clear:both;"></div>
なので左右のheightを揃えるか
右と左でclass分けするなどして左のCSSにclear:both;を入れてください
(例)
<style type="text/css"><!--
li {
width:400px;
float:left;
}
.left {
clear:both;
}
--></style>
<ul style="width:800px;margin:0px;padding:0px;list-style:none;">
<li style="height:51px;background-color:red;">aa</li>
<li style="height:50px;background-color:blue;">bb</li>
<li style="height:50px;background-color:yellow;" class="left">cc</li>
<li style="height:50px;background-color:green;">dd</li>
</ul>
<div style="clear:both;"></div>
・・・position:relative;している意味は何でしょうか?
heightは指定していません。widthのみ指定しています。本当は高さを指定すれば解決するのですが。テキストの量が確定ではない以上、
背景画像で下記のようにラインも入れてありますし、
background-repeat:repeat-x;
background-position:bottom;
liに高さの想定最大値を指定すると、ものによってはテキストの下ががら空きになってしまいます。
position:relative; はたぶん間違いだと思います。
すいません。まだ未熟なもので。
きっと上手いやり方があるのだと思うのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS リストの並べ替え 1 2022/09/13 15:27
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS インラインブロックの中のテキストを上下中央に合わせたい 1 2022/12/24 17:46
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
画面幅に合わせてテーブルのカラム数を変えたい
HTML・CSS
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
liタグの中に<p>タグやら<dl>を...
-
li タグ全体をリンクに。
-
html/cssの、navを2段にする...
-
dlタグの中にdivは使える?
-
リストマーカーをボックス内に...
-
HTMLのdlとul どちらが正しいと...
-
ボタンを横に並べて表示させる方法
-
ulタグやliタグの中でbrタグ...
-
ol要素の番号とリスト項目の離...
-
リストを2つに分割して、それぞ...
-
HTMLで画像を3つ並べる方法
-
【CSS】メニュー上部に固定させ...
-
リストの数字のフォントサイズ...
-
「・」(黒い点)を非表示にした...
-
複数行にまたがる括弧を表示し...
-
タグの前にある空白について
-
更新履歴の作り方
-
CSS li float 2列組み
-
画像にリンクを張ると画像がず...
-
javascriptのアコーディオンメ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リストマーカーをボックス内に...
-
ulタグやliタグの中でbrタグ...
-
liタグの中に<p>タグやら<dl>を...
-
リストの数字のフォントサイズ...
-
html/cssの、navを2段にする...
-
<ul>~</ul>が二つ続くと間に改...
-
HTMLで組織図を作成する方法
-
<ul><li></li></ul>にするメリ...
-
レスポンシブWebデザインでリン...
-
番号付きリスト(<Ol><Li>・・...
-
<table>の高さ固定。情報増加時...
-
ol要素の番号とリスト項目の離...
-
htmlの<ol>タグで、数字などを...
-
html <ul></ul>の並びで一行空...
-
divタグ内のコンテンツが重なっ...
-
ulとliで囲った文字の一部を変...
-
HTML5のfooterに見出しを付けて...
-
文法チェックの<A>と</A>の間が...
-
jQuery-もっと見るボタンをスマ...
-
テーブル内のプルダウンの下に...
おすすめ情報