
widthが可変長の要素があって、その中は左寄せのまま、中央寄せにしたいです。
次のようにテーブルを使えばできたのですが、
テーブルを使わずにやることはできますか?
<style>
.outer{
width:500px;
margin:0 auto;
background:#eee;
text-align:center;
}
.inner{
background:yellow;
margin:0 auto;
text-align:left;
}
</style>
<div class='outer'>
<table class='inner'>
<tr>
<td>可変長の文字列・・・・・・・・・・</td>
</tr>
<tr>
<td style='padding:20px 0;'>aaa</td>
</tr>
<tr>
<td>bbbbbbbbbbbbbb</td>
</tr>
</table>
</div>
display:inline-blockを使っても中央寄せにはなりますが、
「行間」の設定が困難でこれではだめでした。
(1行だけならline-heightで設定できるが、複数行になったとき意図したものではなくなる)
<div class='outer' >
<span class='inner' style='display:inline-block'>
<span>可変長の文字列・・・・・・・・・・・・・・</span><br>
<span>「行間」の設定はできないのでだめ</span>
</span>
</div>
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
それはできないのです。
(無理やりは可能でしょうが)理由は
・並列した要素は互いに他に属していないために、他の要素の子孫足りえない。
あなたのあげられたサンプルでいうと、三行目の新たな要素の巾が3つの要素の巾を決定したとしても、他の要素がそれを参照できることはない。
※無理やりなら可能です。
display:table,display:table-rowを指定してもダメです。
三番目の要素がもっとも長いと分かっていれば、それを元に親要素の巾を決定し、他の要素はその親要素の子孫としてabsoluteないしrelativeで指定する。
理由はお気づきのようにtableは、その描画方法が特殊だからです。
No.1
- 回答日時:
スタイルシートを利用する最大の目的は「構造とプレゼンテーションの分離(
http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」です。【デザインのためにHTMLは書かないということ】divのclass名は【文書に構造を付加するため( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )】だということ。
>「行間」の設定が困難でこれではだめでした。
行間と行高さを区別しましょう。
HTMLでは段落が変わるところは必ず<p></p>です。Mbr>は通常はまったく使わないはずです。brは「forced line break」強制改行ですから、「一つの段落でありながら改行する」、HTML5だと『br 要素は、詩や住所のように、改行自体がコンテンツの一部をなすような改行に対してのみに使わなければなりません。br elements must be used only for line breaks that are actually part of the content, as in poems or addresses.』
段落間のマージンが行間になります。
<br>で強制改行されたときは、行高さ-文字高さがテキスト間にあきます。
★class名は文書構造を示すものに、inerとかouterなんて使わない。
★必ず基点セレクタを書くようにしましょう。
.innerはCSS1の時代の名残で、一応解釈はしてくれるけど。div.innerとか*.innerとか・・
http://momdo.s35.xrea.com/web-html-test/spec/CSS …
でも基本は、タイプセレクタですよ。
<body>
<div class="header">
<h1>サンプル</h1>
</div>
<div class"section">
<h2>本文</h2>
<div class="section">
<h3>項目見出し</h3>
<p>
widthが可変長の要素があって、その中は左寄せのまま、中央寄せにしたいです。
</p>
<p>
次のようにテーブルを使えばできたのですが、テーブルを使わずにやることはできますか?
</p>
<p>
display:inline-blockを使っても中央寄せにはなりますが、「行間」の設定が困難でこれではだめでした。(1行だけならline-heightで設定できるが、複数行になったとき意図したものではなくなる)
</p>
</div>
</div>
<div class="footer">
<h2>文書情報</h2>
</div>
</body>
において、
html,body{margin:0;padding:0;}
body{background-color:gray;line-height:1.6em;}
p{margin:0;text-indent:1em;}
div.header,div.section,div.footer{
width:50%;/* ボックス中央寄せ */
margin:0 auto;
padding:5px;
}
div.section div.section{
width:auto;
margin:0 100px;
}
div.header{background-color:aqua;}
div.section{background-color:silver;}
div.footer{background-color:lime;}
div.section div.section{background-color:white;}
ちなみにHTML5だと
<body>
<header>
<h1>サンプル</h1>
</header>
<section>
<h2>本文</h2>
<section>
<h3>項目見出し</h3>
<p>
widthが可変長の要素があって、その中は左寄せのまま、中央寄せにしたいです。
</p>
<p>
次のようにテーブルを使えばできたのですが、テーブルを使わずにやることはできますか?
</p>
<p>
display:inline-blockを使っても中央寄せにはなりますが、「行間」の設定が困難でこれではだめでした。(1行だけならline-heightで設定できるが、複数行になったとき意図したものではなくなる)
</p>
</section>
</section>
<footer>
<h2>文書情報</h2>
</footer>
</body>
html,body{margin:0;padding:0;}
body{background-color:gray;line-height:1.6em;}
p{margin:0;text-indent:1em;}
header,section,footer{
width:50%;/* ボックス中央寄せ */
margin:0 auto;
padding:5px;
}
section section{
width:auto;
margin:0 100px;
}
header{background-color:aqua;}
section{background-color:silver;}
footer{background-color:lime;}
section section{background-color:white;}
この回答への補足
ありがとうございます。
section section{
width:auto;
margin:0 100px;
}
これだと、「子ボックス」のwidthは明示的には指定していませんが、「親要素のwidth-左margin100px-右margin100px」となり、親要素のwidthに対して常に固定幅ですよね。
私がやりたかったことは、「子ボックス」の文字数に応じて、「子ボックス」のwidthを可変にしたいということでした。
分かりやすく例えると親ボックスが「20文字」の幅を持っているて、子要素のテキストが短いもの(「ああ」と「いいいい」)の場合、
教えて頂いたものだと次のようになると思います。
(「マ」はマージン)
親親親親親親親親親親親親親親親親親親親親
ママああ ママ
ママいいいい ママ
そうではなくて、この場合子要素のテキストの最長の「いいいい」の長さで中央寄せになるようにしたいのです。
親親親親親親親親親親親親親親親親親親親親
ママママママママああ ママママママママ
ママママママママいいいいママママママママ
子要素のテキストが長くなればそれによって次のようになる
親親親親親親親親親親親親親親親親親親親親
ママママママああ ママママママママ
ママママママいいいい ママママママママ
ママママママううううううママママママママ
始めに質問したとおりテーブルを使えばこのようにできたのですが、
テーブルを使わずに、ORUKA1951様のような綺麗なhtmlで書くことは可能でしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- JavaScript htmlとcssで分数を表示後、分数の右側に文書を書きたい 1 2022/04/28 10:09
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
セクションをdivで囲むと見出し...
-
HTML属性での「""」 「''」違い
-
htmlでdivをなるべく使わないで
-
複数のボタンを等間隔に、かつ...
-
改行がしたいのですが、うまく...
-
インラインフレームのページ内...
-
htmlのブラウザごとの表示について
-
グリッドレイアウトで"auto-fit...
-
開始タグと終了タグについて
-
<div id="container">の使いか...
-
floatを使った時のブラウザでの...
-
コピーライト下・フッター一番...
-
inline-blockをネストすると表...
-
ローカルとWeb上で見え方が違う...
-
ヘッダーとフッターだけ背景を...
-
html の divとtable の役割
-
2段組レイアウト時に意図しな...
-
自分のサイトにいろんなサイト...
-
align="middle"が無視される T...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
html の divとtable の役割
-
<div id="container">の使いか...
-
ヘッダーとフッターだけ背景を...
-
1時間30分を簡単に表したいで...
-
スペースを使わず文字位置を揃...
-
div要素が重なってします
-
divの中に外部のHTMLを埋め込む
-
複数のボタンを等間隔に、かつ...
-
min-heightとheightの違いについて
-
セクションをdivで囲むと見出し...
-
htmlでdivをなるべく使わないで
-
要素間、要素内に隙間が空く
-
ブログのサイドバーが下にくる
-
body>div{}の意味を知りたい
-
スライド部分のリンクが貼れな...
-
画面を縮小するとカラムが落ち...
-
htmlの見出しタグ(<h1>)の次...
-
インラインフレームのページ内...
おすすめ情報