この質問のために、次のようなHTMLページがあります。
<html>
<head>
<style>
div { width: 100%; }
.success { background-color: #ccffcc; }
</style>
</head>
<body>
<div class="success">
<nobr>This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line. This is a very long line.</nobr>
</div>
</body>
</html>
「非常に長い線」とそのdivの背景色に注意してください。
私の問題(そして基本的なものだと思います)は、背景色が画面の端で止まることです。テキストの残りを表示するために右にスクロールすると、テキストの残りの背景は白になります。
基本的に、divを次のように動作させます。
それは理にかなっていますか?
これを行う方法はありますか?
ここにテストページを設定しました。これをiPhoneで表示すると、小さいフォントで問題が表示されます。 http://www.vkarlsen.no/test/test.html
次の質問がSOによる潜在的な重複/提案としてリストされているのを見ました。
提案された<meta ... viewport .../>
タグを試しましたが、違いはありませんでした(現在、テストページにあります)。
<div>
sはすでにブロック要素です
WebKitは最終インラインリスト項目の幅全体に背景色をペイントしません
Divをdisplay: inline-block;
に設定しようとしましたが、これは何も変更しないようでした
黒魔術:
<style>
body { float:left;}
.success { background-color: #ccffcc;}
</style>
なぜこれが機能するのかについて明確な説明がある場合は、コメントしてください。それは、本文がページ幅に収まらなければならないという制約を取り除くフロートの副作用と関係があると思います。
問題は、block
要素は、コンテンツの大きさに関係なく、含まれる要素の100%までしか拡大しないということです。ただし、inline-block
要素を作成すると、幅が実際のコンテンツに合わせて明らかに変更されます。
HTML:
<div id="container">
<div class="wide">
foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</div>
<div class="wide">
bar
</div>
</div>
CSS:
.wide { min-width: 100%; display: inline-block; background-color: yellow; }
#container { display: inline-block; }
(container
要素は、画面の幅だけでなく、2番目のdiv
を前の質問と同じ大きさにするための追加の質問に対処します。)
デモコードを示すJSフィドル も設定しました。
inline-block
で問題(特にクロスブラウザの問題)に遭遇した場合、 ディスプレイ内のブロックレベルの要素:inline-block が役立つ場合があります。
.success { background-color: #cffccc; overflow: scroll; min-width: 100%; }
scroll
またはauto
を試すことができます。
inline-block
表示スタイルは、あなたが望むことをするようです。 <nobr>
タグは非推奨であり、使用しないでください。 CSSでは、改行なしの空白を使用できます。以下に、スタイルルールの例を変更する方法を示します。
div { display: inline-block; white-space: nowrap; }
.success { background-color: #ccffcc; }
スタイルシートを変更し、ソースから<nobr>
タグを削除して、試してみてください。 display: inline-block
はすべてのブラウザで機能するわけではありませんが、古いブラウザでのみ問題になる傾向があることに注意してください(新しいバージョンではある程度サポートする必要があります)。私個人の意見では、壊れたブラウザのコーディングを無視することです。コードが標準に準拠している場合、主要な最新のブラウザすべてで動作するはずです。まだIE6(またはそれ以前)を使用している人は誰でも苦痛に値します。 :-)
これを試して、
.success { background-color: #ccffcc; float:left;}
これは、定義により画面の幅のみに及ぶwidth:100%
を設定したためです。画面の幅に設定するmin-width:100%
を設定します...それを超えて成長する能力を持ちます。
また、body
およびhtml
にmin-width:100%
を設定してください。
幅は体のサイズによって制限されています。ボディの幅を大きくすると、背景色で1行に表示されます。
最小幅を維持するには:min-width:100%
またはこれを試して、
.success { background-color: #ccffcc; overflow:auto;}