Ich habe eine HTML-Seite, die für diese Frage so aussieht:
<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>
Beachten Sie die "sehr lange Linie" und die Hintergrundfarbe dieses div.
Mein Problem (und ich wette, es ist ein grundlegendes) ist, dass die Hintergrundfarbe am Rand des Bildschirms stoppt. Wenn ich nach rechts scrolle, um den Rest des Texts zu sehen, ist der restliche Texthintergrund weiß.
Grundsätzlich möchte ich, dass sich mein div so verhält:
Hat das einen Sinn ergeben?
Gibt es eine Möglichkeit, dies zu tun?
Ich habe hier eine Testseite eingerichtet, die, wenn Sie diese auf dem iPhone anzeigen, obwohl eine kleine Schrift, das Problem anzeigt: http://www.vkarlsen.no/test/test.html
Ich habe die folgenden Fragen als mögliche Duplikate/Vorschläge von SO gesehen. Folgendes ist mir aufgefallen, als ich die folgenden Informationen ausprobiert habe:
iPad-Hintergrund für Div-Blöcke, die sich nicht über die gesamte Bildschirmbreite erstrecken
Versuchte das vorgeschlagene <meta ... viewport .../>
Tag, hat keinen Unterschied gemacht (es ist im Moment auf der Testseite vorhanden.)
Hintergrundfarbe erstreckt sich über die gesamte Breite von ul
<div>
s sind bereits Blockelemente
WebKit malt keine Hintergrundfarbe für die gesamte Breite des letzten Inline-Listenelements
Versucht, das div auf display: inline-block;
aber das schien nichts zu ändern
schwarze Magie:
<style>
body { float:left;}
.success { background-color: #ccffcc;}
</style>
Wenn jemand eine klare Erklärung hat, warum dies funktioniert, kommentieren Sie bitte. Ich denke, es hat etwas mit einem Nebeneffekt des Floats zu tun, der die Einschränkung beseitigt, dass der Körper in die Seitenbreite passen muss.
Das Problem scheint zu sein, dass block
-Elemente nur bis zu 100% ihres enthaltenen Elements skalieren, egal wie groß ihr Inhalt ist - es läuft einfach über. Wenn Sie sie jedoch zu inline-block
- Elementen machen, wird ihre Breite anscheinend an den tatsächlichen Inhalt angepasst.
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; }
(Das container
Element beantwortet Ihre nachfolgende Frage, um das zweite div
so groß wie das vorherige zu machen und nicht nur die Bildschirmbreite.)
Ich habe auch eine JS-Geige eingerichtet, die meinen Demo-Code zeigt .
Wenn Sie mit inline-block
Auf Probleme stoßen (insbesondere bei browserübergreifenden Problemen), sehen Sie sich Elemente auf Blockebene in der Anzeige an: Inline-Block könnte helfen.
.success { background-color: #cffccc; overflow: scroll; min-width: 100%; }
Sie können scroll
oder auto
versuchen.
Das inline-block
Anzeigestil scheint zu tun, was Sie wollen. Notiere dass der <nobr>
-Tag ist veraltet und sollte nicht verwendet werden. In CSS ist ein nicht unterbrechender Leerraum möglich. So würde ich Ihre Beispielstilregeln ändern:
div { display: inline-block; white-space: nowrap; }
.success { background-color: #ccffcc; }
Ändere dein Stylesheet, entferne das <nobr>
-Tags aus Ihrer Quelle und probieren Sie es aus. Beachten Sie, dass display: inline-block
funktioniert nicht in allen Browsern, obwohl es in älteren Browsern eher problematisch ist (neuere Versionen sollten es bis zu einem gewissen Grad unterstützen). Meine persönliche Meinung ist, Codierung für defekte Browser zu ignorieren. Wenn Ihr Code standardkonform ist, sollte er in allen gängigen modernen Browsern funktionieren. Jeder, der noch IE6 (oder früher) verwendet, verdient den Schmerz. :-)
Versuche dies,
.success { background-color: #ccffcc; float:left;}
Es liegt daran, dass Sie das width:100%
, der sich per definitionem nur über die Breite des Bildschirms erstreckt. Sie möchten das min-width:100%
was es auf die Breite des Bildschirms einstellt ... mit der Fähigkeit darüber hinaus zu wachsen.
Stellen Sie außerdem sicher, dass Sie min-width:100%
für body
und html
.
Die Breite wird durch die Körpergröße begrenzt. Wenn Sie die Breite des Körpers vergrößern, bleibt dieser auf einer Linie mit der Hintergrundfarbe.
Mindestbreite einhalten: Mindestbreite: 100%
oder versuchen Sie es,
.success { background-color: #ccffcc; overflow:auto;}