Je länger die Zeilenlänge von Textinhalten wird, desto schwerer ist er zu lesen. Daher ist es üblich, die Breite des Inhalts zu begrenzen, wenn sich die Ansichtsfensterbreite erhöht. Oft wird dies erreicht, indem dem Inhalt eine max-width gegeben und er zentriert wird, entweder innerhalb eines umgebenden Elements oder Abschnitt für Abschnitt.
Aber was ist, wenn wir möchten, dass ein Element visuell die volle Breite des Ansichtsfensters einnimmt, zum Beispiel eine Hintergrundfarbe für eine Kopfzeile oder einzelne Überschriften?

Ein Ansatz ist die Verwendung eines inneren Wrappers für den Inhalt, dessen Breite begrenzt werden soll, während das äußere Element bei 100% Breite belassen wird. Dies fügt jedoch zusätzlichen Markup hinzu und ist (wohl, GASP) nicht-semantisch!
<header>
<div class="wrap">
<h2>Header</h2>
</div>
</header>
<h3 class="full-width">
<div class="wrap">Heading</div>
</h3>
<div class="wrap">
<p>... text ... </p>
</div>
header, .full-width {
width: 100%;
background: #ccc;
}
.wrap {
width: 80%;
max-width: 24em;
margin: 0 auto;
padding: 0.25em 0.625em;
}
Es wäre besser, den Inhalt semantisch (z. B. main oder section) zu umschließen und die Überschriften nach Bedarf visuell hervorzuheben. Hier sind einige Möglichkeiten, wie wir das tun können
Verwendung von negativen Abständen
Ein einfacher Ansatz (von Timothy Mackey) verwendet negative Abstände und Polsterung, um den Hintergrund in beide Richtungen zu erweitern. Um horizontalen Scrollen zu vermeiden, müssen wir overflow-x:hidden sowohl für die html- als auch für die body-Elemente festlegen.
html, body {
overflow-x: hidden;
}
.full-width-bar {
margin: 0 -9999rem;
/* add back negative margin value */
padding: 0.25rem 9999rem;
background: rgba(0, 0, 0, 0.5);
}
Siehe den Pen Full Width Bars Using Negative Margins von Chris Coyier (@chriscoyier) auf CodePen.
Möchten Sie, dass der Balken voller Breite eine andere Farbe hat als der Hintergrund der Überschrift? Eine Möglichkeit besteht darin, linke und rechte Ränder zu verwenden. Aber superbreite Ränder haben einige Probleme. Bei Rändern über 960px müssen Sie sie genau 9600px oder 10240px (oder gleichwertige ems) machen, um einen Fehler in Chrome zu vermeiden. Außerdem müssen Sie durchgehende Farben verwenden, da RGBa-Werte in Safari eine winzige Lücke aufweisen. Dies liegt an Rundungsfehlern, wenn das enthaltende Element zentriert ist.
html, body {
overflow-x: hidden;
}
.full-width-borders {
/* also subtract section padding (1.5rem) */
margin: 0 -601.5rem;
/* add back section padding (1.5rem) */
padding: 0.25rem 1.5rem;
background: red;
/* border has to be solid, not RGBa */
/* 9600px or equiv (600rem = 9600/16) */
border-left: 600rem solid maroon;
border-right: 600rem solid maroon;
}
Siehe den Pen Full Width Bars Using Borders von Parker Bennett (@parkerbennett) auf CodePen.
Angesichts der Mühsal bei der Verwendung von Rändern schauen wir uns eine Alternative an
Verwendung von Pseudo-Elementen
Durch Hinzufügen eines :before Pseudo-Elements zur Überschrift können Sie den Hintergrund dahinter vom Balken voller Breite abheben, indem Sie absolute Positionierung und einen negativen z-index verwenden. Dies ermöglicht es uns auch, RGBa für den Balken voller Breite zu verwenden.
.full-width-tinted {
position: relative; /* for child pseudo-element */
z-index: 0;
margin: 0 -600rem;
/* add back negative margin value */
padding: 0.25rem 600rem;
background: #666;
background: rgba(0, 0, 0, 0.25);
}
.full-width-tinted:before {
content: "";
position: absolute;
z-index: -1; /* behind parent */
top: 0;
bottom: 0;
/* subtract h2 padding (1.5rem) */
left: 598.5rem;
right: 598.5rem;
background: green;
}
Siehe den Pen Full Width Bars Using Negative Margins von Chris Coyier (@chriscoyier) auf CodePen.
Sie müssen bei einem negativen z-index etwas vorsichtig sein, da er nur in relativ einfachen Situationen ohne viele verschachtelte Elemente mit eigenen Hintergründen funktioniert.
Wenn Sie noch mehr Flexibilität wünschen, können Sie zwei Pseudo-Elemente, :before und :after, verwenden, um den Hintergrund der Kopfzeile nach links und rechts zu erweitern. So könnte der Hintergrund verschiedene Farben, Breiten oder Höhen enthalten, nur in eine Richtung reichen, mit einem Farbverlauf ausblenden usw.
.full-width {
position: relative; /* for the child pseudo-elements */
/* negative offset = section padding */
margin: 0 -30px;
/* add back section padding value */
padding: 0.25rem 30px;
background: #333;
}
.full-width:before, .full-width:after {
content: "";
position: absolute;
/* fill vertically */
top: 0;
bottom: 0;
width: 9600px;
right: 100%;
background: green;
}
.full-width:after {
width: 320px;
left: 100%;
/* you're free to do something totally different here */
background: green;
}
Siehe den Pen Full Width Bars Using Pseudo-Elements von Chris Coyier (@chriscoyier) auf CodePen.
Verwendung von box-shadow
Eine clevere Methode, um kein horizontales Scrollen auszulösen, ist die Verwendung von box-shadow, um die Hintergrunderweiterungen zu generieren (zumindest nach rechts). Andreas hat eine Demo davon erstellt
Siehe den Pen Full Width Browser Bars with box-shadow von Andreas (@receter) auf CodePen.
Leider gibt es damit Probleme. Charles Stuart wies auf einen Bug in Internet Explorer 11 (v11.0.9600.17501) hin, der die Verwendung von box-shadow unzuverlässig macht. Es scheint, dass IE eine Subpixel-Kantenglättung auf den box-shadow anwendet, auch wenn die Unschärfe auf 0 gesetzt ist.

Verwendung von Viewport-Einheiten
Lisa schlug eine Methode vor, um horizontales Scrollen zu vermeiden, indem eine Kombination aus vw und calc() verwendet wird, die jetzt ziemlich solide Browserunterstützung hat. Sie könnte unter den richtigen Umständen nützlich sein (aber berücksichtigt noch keine Dinge wie padding oder min-width).
Siehe den Pen Full width bars von Chris Coyier (@chriscoyier) auf CodePen.
Großartig und nett :D
Danke
Schöne Lösung, aber sie ist bei niedrigen Auflösungen ziemlich fehleranfällig. Es erscheint eine unnötige horizontale Scrollleiste.
Ich habe von dieser Scrollleiste gesprochen, die unnötig ist ;)
Danke für dieses großartige Tutorial.
Aber warum verwenden Sie und Tags? Gibt es einen Grund, warum Sie beide verwenden?
Oh, WordPress entfernt HTML-Tags
„Aber warum verwenden Sie h1 und h2 Tags?“
Er stylt Überschriften?
Das ist ein spektakulärer Tipp! Ich habe mich immer gefragt, ob es eine saubere, semantische Möglichkeit gibt, dies ohne zusätzlichen Markup zu tun. Es scheint, dass eine riesige Anzahl von Websites wählt, etwas Ähnliches wie dieser Stil zu implementieren, aber sie alle scheinen Tricks mit Wrapper-Divs oder ähnlichem zu verwenden. Das habe ich auf meiner Website gemacht. Muss diese Änderung jetzt vornehmen.
Danke dafür!
Nun, ich suchte nach etwas Ähnlichem, aber wie würde man etwas wie das hier machen: http://www.disketa.si/media/uploads/2011-05/5310d5f7863c73bf5d73697b613e6800.png? Ich hatte riesige Probleme, es ohne Tabellen zu machen.
h2 { border-radius: 10px 0 0 }
h2:before { top: 50% }// Oder welcher Prozentsatz auch immer Sie möchten
Verdammt, ich habe mich immer gefragt, wie man das macht!
Ich wünschte, Sie hätten eine Liste all Ihrer Demos erstellt, das würde helfen
+1 für die Liste!
+2
+2 für die Liste
Es ist immer interessant, eine neue Lösung für ein Problem zu sehen! Ich habe versucht, dies vor ein paar Monaten zu erreichen, und die Lösung, die ich fand, beinhaltete die Kombination eines großen negativen links/rechts-Abstands mit einem ebenso großen positiven links/rechts-Padding, wie folgt:
Ich habe dann dasselbe getan wie Sie und overflow hidden auf den body angewendet
Körper {overflow-x: hidden;
}
Ich konnte diese Methode in FF 2+, IE6+, Safari (Version?) und Chrome (Version?) zum Laufen bringen.
Sie können ein Beispiel in Aktion unter http://www.stdi.ca/ sehen. Die Navbar hat diese spezielle Formatierung (sowie einige andere Elemente, die nur in privaten Bereichen der Website sichtbar sind.) In diesem Anwendungsfall habe ich eine bedingte Formatierung für IE6 hinzugefügt, die dem Element eine feste Breite gibt, aber ich glaube, das war nur, um die absolut positionierte Login-Box nicht vom linken Bildschirmrand verschwinden zu lassen.
Ich würde sagen, das ist noch besser.
Sehr schön!
Das erinnert mich an eine ähnliche Lösung für ein anderes Problem, nämlich das Erstellen von Spalten gleicher Höhe.
Gigantöses (unteres) Padding + negativer Abstand + overflow hidden
Ich habe darüber hier gelesen: http://www.ejeliot.com/blog/61
Das gefällt mir einfach, weil man sich keine Gedanken über die Neubedienung der Hintergrund-Eigenschaften auf den Pseudo-Elementen machen muss. Schön!
Großartig! Ich habe nach so etwas gesucht und tatsächlich genau dasselbe versucht (aber margin: 0 -100% verwendet, um sehr, sehr zukunftssicher zu sein), was mir Scrollleisten gab. Ich habe nicht daran gedacht, overflow-x: hidden zu verwenden, wollte es aber vermeiden. Das Design, das ich jetzt dafür verwenden möchte, wird responsiv sein, daher gab es ohnehin keinen Weg, dass jemand horizontale Scrollbalken bekommt.
Das ist wirklich clever
Ignoriert Mobile Safari overflow-x: hidden für andere auch?
@geoff, ich sehe nichts, was darauf hindeutet, dass overflow-x:hidden ignoriert wird (Test auf iOS 4, iPhone 3GS).
Was genau ist das Problem, das Sie sehen? Übermäßige Scrollbalken?
Ich habe einen kleinen Fehler in FF4 auf meinem MBP mit dieser Technik bemerkt. Eine horizontale Scrollleiste erscheint nicht am unteren Fensterrand, aber wenn Sie z.B. die Zwei-Finger-Wischbewegung verwenden, um sich auf dem Bildschirm zu bewegen, und nach rechts wischen, scrollt die Seite nach rechts. Seltsam, aber ein kleiner Fehler, und es kann etwas sein, das ich falsch mache. Es wird mich jedoch nicht davon abhalten, diese Technik für einige Designs zu verwenden, an denen ich gerade arbeite.
Bug bestätigt Jason, und ist auch in Opera vorhanden.
Hallo,
Ich habe Ihre Methode ausprobiert, und ich habe immer noch das berüchtigte Mac Trackpad Scroll-Problem, wie oben beschrieben. Ich habe jedoch bemerkt, dass Ihre Website nicht dasselbe Verhalten aufweist. Ich kann einfach nicht herausfinden, wie Sie es behoben haben.
Haben Sie einen Hinweis?
Prost.
Vielen Dank für die Veröffentlichung dieser großartigen Lösung.
Ich habe mysteriöse Schwierigkeiten, overflow-x in IE7 zum Laufen zu bringen. Ich weiß, dass es eine CSS3-Eigenschaft ist und es daher nicht out-of-the-box unterstützen sollte, aber seltsamerweise verhält sich IE6 richtig.
Ich habe versucht, den Browserpräfix -ms-overflow-x zu verwenden, aber ohne Erfolg. Andere Hacks wie das Festlegen von overflow-y und overflow-x sind ebenfalls nicht erfolgreich.
Wenn ich mir Ihr Beispiel ansehe, haben Sie overflow-x gar nicht auf dem body gesetzt, daher frage ich mich, wie Ihr Beispiel in jedem Browser, einschließlich IE7, korrekt dargestellt wird? Jede Hilfe wird geschätzt!
Ich bin wahrscheinlich unwissend, aber warum konnte man nicht einfach einen Span anstelle eines Divs einfügen?
Alternativ wäre es nicht besser, etwas Nicht-Semantisches zu haben, das überall funktioniert, als etwas Semantisches, das es nicht tut?
Zuletzt, warum nicht einfach ein Padding von 25% rechts und links für jedes Element?
Macht das nicht genau dasselbe?
Meine Demo: http://dl.dropbox.com/u/116053/css-fullwide.html
Ihr Beispiel hat 100% Breite für body (wrapper), es funktioniert nicht für feste Breite.
Ich denke, das ist auch eine gute Lösung. Sie unterscheidet sich geringfügig darin, dass alle Elemente volle Browserbreite haben, sodass Positionierung und Styling anders durchdacht werden müssen, aber in diesem einfachen Beispiel würde ich sagen, dass dies besser ist.
Ich glaube, ich habe eine bessere Lösung, ohne horizontale Scrollbalken zu deaktivieren.
Schau: http://jsfiddle.net/marakoss/rG4kA/
(ein z-index-Fehler in IE8, aber andere Browser funktionieren großartig)
Und vergessen Sie nicht, eine min-width in Pixel zum section-Tag (aus der Demo) oder einem anderen Element mit Prozentbreite hinzuzufügen.
Das ist auch clever, aber Sie legen exakte Pixelhöhen für die Kopfzeilen fest, was wahrscheinlich keine gute Idee ist. Um das zu vermeiden, setzen Sie die relative Positionierung der Kopfzeile und machen die Höhe des Pseudo-Elements dynamisch, indem Sie sowohl top als auch bottom auf 0 setzen. Aber wenn Sie die Kopfzeile relativ machen UND einen Hintergrund auf die Sektion setzen (sehr wahrscheinlich in einer realen Umgebung), verschwinden die Pseudo-Elemente. Immer noch clever, ich mag die Minimierung des Einsatzes, nur eine Warnung.
Chris, unter iOS enthält die Demoseite einen umfangreichen horizontalen Scrollbereich.
Wie schlagen Sie vor, den Überlauf in diesem Szenario zu behandeln?
Ich habe die Seite im mobilen Safari getestet und dieses Problem nicht gesehen. (Nun, ich hatte es zuerst, dann habe ich es behoben. Zuerst habe ich overflow auf dem html-Element versteckt, aber das funktionierte nicht, ich habe es zu body geändert). Welche Version verwenden Sie?
iOS 4.3.3 (8J2). Habe das iPad auch gerade zurückgesetzt, das Problem besteht weiterhin.
Chris, ich bin neugierig, haben Sie das Gefühl, dass iOS Safari das neue „IE“ wird? Ein viel leistungsfähigerer, standardkonformerer und sich ständig verbessernder Browser, aber dennoch eine Barriere für die Implementierung einer Funktion, die ansonsten keine Probleme in einem Nicht-Mobilbrowser hätte?
Angefangen bei der Neugestaltung von UI-Elementen wie Hover (interessante Sicht auf mögliche Lösungen dafür von Trent Walton unter http://trentwalton.com/2010/07/05/non-hover/) und Rollover zu JavaScript, das manchmal sehr träge oder gar nicht läuft (aufgrund dessen, was ich nur als unterdimensionierte Geräte vermuten kann, die Schwierigkeiten mit nicht optimiertem Code haben), bis hin zu bestimmten Elementen, die sich unter iOS unterschiedlich verhalten (z. B. Musikbeispiele auf Chris-Mcgarry.com, die nicht im Hintergrund, sondern auf eigenen Seiten abgespielt werden).
Ich bin Grafikdesignstudent und bereite mich darauf vor, mein Portfolio online zu stellen, und habe das Web nach HTML, CSS und JQuery durchsucht (Ihre Website war dabei von unschätzbarem Wert). Während ich die Notwendigkeit verstehe, ältere Browser zu unterstützen, muss ich zumindest im Moment sicherstellen, dass das Portfolio in mobilen Browsern einwandfrei funktioniert. Daher ist iOS zu einem Maßstab für die Beurteilung der Funktionsimplementierung geworden.
Es wäre sehr interessant, Ihre Position zu diesem Thema zu lesen.
Hallo, Chris.
Tolle Seite, großartige Artikel, ich bin Ihr Fan, blah-blah-blah. Das ist dieses Mal nicht wichtig.
Nun ein paar Worte zur Formularvalidierung von Kommentaren: sie ist nicht so gut, wie sie sein sollte (wir sprechen von css-tricks.com, richtig?).
Wenn eines der Felder „Name“ oder „E-Mail“ leer ist und der Senden-Button gedrückt wird, erscheint ein schöner Hinweis, der über einen Fehler informiert. Das ist gut.
Wenn das Kommentarfeld leer ist und gesendet wird, lädt die Seite neu, die Meldung „Fehler: Bitte geben Sie einen Kommentar ein.“ erscheint. Keine Schaltflächen, keine Links, kein Text drumherum. Das ist schrecklich.
WordPress kann das besser. Bitte machen Sie etwas, AJAX ist eine Option.
Mit freundlichen Grüßen, Dmitry.
Und eine weitere Lösung ist vielleicht so etwas
Und Korrekturen für IE6/IE7.
Das Problem ist, dass man immer etwas berechnen muss, wie z.B. 100*(Breite des Abschnitts)/(Abstand des Abschnitts) = x
Meine Entschuldigung.
100*(Abstand des Abschnitts)/(Breite des Abschnitts) = x
x – benötigter negativer Abstand/Padding
Noch ein großartiger, aber einfacher Pseudo-Artikel. Rep +100 =)
Autsch… Denkt nur ich, dass die Suche nach semantischem HTML nicht zu aufgeblähtem CSS-Müll führen sollte?
Ja, es ist mehr CSS. Es hat 4 Zeilen CSS in 22 verwandelt. Aber wenn es auf jeder Seite einer großen Website mit vielen Kopfzeilen verwendet wird, könnten wir Tausende von Divs sparen. Wer ist jetzt aufgebläht?
Ich ziehe aufgeblähtes CSS vor, weil es, wie Chris erwähnt, wiederverwendet wird, und philosophisch gesehen soll CSS nichts bedeuten, also verschleiert unordentlicher Code keine Daten und Inhalte.
muss nicht unbedingt ein Container für ein Element sein, semantische Tags werden für eine Suchmaschine benötigt. Sie können klare konventionelle Divs verwenden und dann Ihr Markup mit semantischen Tags umschließen. Browser brauchen keine semantischen Tags, sie sind für Suchmaschinen, also müssen wir sie nicht stylen. Zumindest in den nächsten paar Jahren.
Der hält keine semantische Bedeutung, er ist nur für Stil.
„div“ stammt von „division“, daher ist es semantischer, als Sie denken, ein Div in h1 einzufügen.
Zu dieser Lösung: Sie ist schrecklich, nicht nur schrecklich, sie ist hässlich. Und hier ist warum: Anstatt einer einfachen, leichten, browserübergreifenden Lösung, verfolgen Sie Semantik, um ein 1-Element des Markups zu entfernen, und schreiben eine Menge CSS, das in älteren Browsern nicht funktioniert. WOFÜR?
Semantik ist ein Ideal, Semantik ist der Punkt, auf den man hinarbeiten sollte, die Suche nach besseren Lösungen ist gut, aber es ist unmöglich, das hier Gesagte auf echten Projekten zu verwenden.
<section>muss nicht unbedingt ein Container für ein Element sein *Das
<div>hat keine semantische Bedeutung, es ist nur für den Stil.fu**** Editor >:o
Hier ohne Fehler
<section>muss nicht unbedingt ein Container für ein Element sein, semantische Tags sind für Suchmaschinen erforderlich. Sie können herkömmliche Divs klar verwenden und dann Ihr Markup mit semantischen Tags umschließen. Browser benötigen keine semantischen Tags, sie sind für Suchmaschinen, also müssen wir sie nicht stylen. Zumindest in den nächsten paar Jahren.Das
<div>hat keine semantische Bedeutung, es ist nur für den Stil.„div“ stammt von „division“, daher ist es semantischer, als Sie denken, ein Div in h1 einzufügen.
Über diese Lösung: Sie ist schrecklich, nicht nur schrecklich, sie ist hässlich. Und hier ist der Grund: Anstatt einer einfachen, leichten, browserübergreifenden Lösung, verfolgen Sie Semantik, um ein Element Markup zu entfernen, schreiben eine Menge CSS, das in älteren Browsern nicht funktioniert. WOFÜR?
Semantik ist ein Ideal, Semantik ist das Ziel, auf das man hinarbeiten sollte. Die Suche nach besseren Lösungen ist gut, aber es ist unmöglich, das hier Gesagte auf echten Projekten zu verwenden.
Seit letztem Monat hat die Unterstützung für Pseudo-Elemente 92,1% bei den aktuellen Browsernutzungsniveaus, und das steigt schnell. Ich wette, innerhalb eines Jahres wird das so nahe bei 100% sein, dass es für „echte Projekte“ ein absolutes No-Brainer ist.
Semantische Tags sind nicht „nur“ für Suchmaschinen. Tatsächlich ist das, wie ich Semantik in absteigender Reihenfolge der Wichtigkeit betrachten würde
1) Dinge schlank halten für Verständlichkeit und schnellere Seitenladezeiten
2) Barrierefreiheit – Bildschirmsprachausgaben helfen, die Inhalte genau zu beschreiben und zu navigieren.
3) Als Nebeneffekt verstehen auch Suchmaschinen die Inhalte besser und können sie besser einstufen und klassifizieren.
Chris, in diesem Beitrag, den Sie verlinkt haben, greifen Sie auf W3Schools-Statistiken zurück. Die besseren Statistiken, die Sie verwenden sollten, sind StatCounter. Ich weiß nicht, ob das die besten sind, aber sie sind viel genauer als W3Schools.
W3Schools zählt nur Besucher ihrer eigenen Webseiten, die ausschließlich technisch orientierte Personen sind. Als Beispiel, laut W3Schools, hatten Chrome und Firefox letzten Monat mehr Nutzer als alle Versionen von Internet Explorer zusammen. Das ist völlig falsch und sehr irreführende Statistik für Kundenprojekte. Und leider behält W3Schools den #1-Platz bei Google für „Browser-Statistiken“ und verwandte Begriffe, was viele Leute dazu verleitet, zu glauben, sie würden legitime Zahlen liefern.
Zum jetzigen Zeitpunkt ist aus irgendeinem Grund StatCounters Daten nicht verfügbar (ich gehe davon aus, dass dies bald behoben wird), aber Sie können StatCounters Statistiken in diesem WikiPedia-Artikel einsehen. Sie werden dort sehen, dass die Nutzung von IE (alle Versionen) letzten Monat etwa 44% betrug.
Also, alle sollten sich einen Gefallen tun und praktisch alles von W3Schools ignorieren, besonders ihre Browserstatistiken. Sehen Sie sich Paul Irishs Seite W3Fools für weitere Informationen über sie an.
Und Chris, Sie wären gut beraten, Ihrem Link zu den W3Schools-Statistikseiten ein „nofollow“ hinzuzufügen (oder besser noch, den Artikel zu aktualisieren, um bessere Statistiken einzufügen) – sie haben bereits genug irreführende Link-Juice, sie brauchen nicht mehr. :)
Mit StatCounter liegen wir bei 88% Kompatibilität. Immer noch ziemlich gut. Und je nach genauem Szenario ist ein Fallback von nichts vielleicht kein großes Problem.
StatCounter sieht ziemlich legitim aus.
Außerdem bin ich kein so großer Hater von W3Schools wie viele andere. Der Name ist mir egal. Ich wünschte, sie wären reaktionsschneller und würden all die vorgeschlagenen Änderungen auf W3Fools umsetzen, aber ich denke auch, dass sie vielen Leuten geholfen haben, dies zu lernen.
Ich werde eine Notiz machen, um diesen Pseudo-Elemente-Artikel zu aktualisieren.
Sie haben Recht, sie haben vielen Leuten geholfen, auch mir. Aber wenn sie nicht reaktionsschnell sind, dann entwertet das alles, was sie getan haben, denn dann ist offensichtlich, dass sie mehr an ihren Seitenaufrufen und ihrer Werbung interessiert sind als an der Bereitstellung korrekter Inhalte. (Was seltsam ist, denn wenn sie die Dinge einfach reparieren würden, würden sie zu einer wertvolleren Ressource werden, was langfristig zu einem besseren Geschäftsergebnis führen würde.)
Und zur Information – hier ist eine alternative Quelle für Browserstatistiken, die für Unternehmensumgebungen relevanter zu sein scheint. Laut ihren Statistiken wäre die Unterstützung für Pseudo-Elemente etwas geringer, bei etwa 81%.
Okay, sagen wir, wir kümmern uns nicht um 8% (!!!) der Benutzer.
Aber warum machen Sie das?
Körper {overflow-x: hidden;}Die anderen 92% der Desktop-Browser-Benutzer bleiben ohne horizontalen Scroll, und dann sprechen Sie über Barrierefreiheit…
1) Dinge schlank halten für Verständlichkeit und schnellere Seitenladezeiten
Nehmen Sie Google, haben Sie ihren Quellcode gesehen?
Das ist, was ich dort sehe
1. <table></table>
2. <div style=””></div>
3. <div class=”gbh”>, <div class=”lgpd”>, <div class=”lsb”>
onclick=””
align=center
usw.
Glauben Sie, dass sie sich um HTML-Semantik und klaren Code kümmern? Ich glaube nicht.
schnellere Seitenladezeiten – ja.
Verständlich bleiben – ja, aber nicht auf einer Produktionsseite, nur auf einem lokalen Projekt.
Auf einer Produktionsseite brauchen wir keinen verständlichen HTML-, CSS-Code, wir wollen, dass unsere Seiten so schnell wie möglich geladen und gerendert werden, also müssen wir HTML, CSS, JS minimieren, die Anzahl der HTTP-Anfragen an den Server reduzieren, GZIP aktivieren, die Bildgrößen reduzieren, sogar die Klassennamen auf 3-5 Buchstaben reduzieren.
Die Leute kümmern sich nicht um Ihren Code, sie kümmern sich darum, wie er aussieht und wie schnell er lädt. Google weiß das.
Wie ich sage: Wenn Sie etwas mit der gleichen Funktionalität einfacher, sauberer und browserübergreifend implementieren können, wäre das gut.
2) Barrierefreiheit – Bildschirmsprachausgaben helfen, die Inhalte genau zu beschreiben und zu navigieren.
4 Fragen
1. Haben Sie die Website schon einmal mit Screenreadern getestet?
2. Welche davon sind derzeit am beliebtesten?
3. Sind Sie sicher, dass Screenreader HTML5 semantische Tags lesen können? (Link zum Beweis?)
4. Welchen Prozentsatz Ihrer Nutzer rufen Seiten über Screenreader auf?
3) Als Nebeneffekt verstehen auch Suchmaschinen die Inhalte besser und können sie besser einstufen und klassifizieren.
Woher haben Sie, dass Google oder andere Suchmaschinen HTML5-Semantik unterstützen? (Link zum Beweis?)
//
Sie sagen, HTML5-Semantik-Tags sind gut für Screenreader und gut für Suchmaschinen, ja, das stimmt, aber nicht jetzt, vielleicht in Zukunft.
Alles, was ich sagen will, ist, dass wir sie nicht formatieren müssen. Wenn Sie HTML5-Semantik auf Ihrer Website wünschen, umschließen Sie einfach Ihre div.aside, div.header, div.footer, ul.nav, ul.menu damit.
Für alte Browser wird dies ignoriert und Ihre Website bricht nicht ohne JavaScript.
Entschuldigung für mein Englisch.
Der geringe Prozentsatz der Nutzer ist nicht im Stich gelassen, sie sehen einfach keine „vollbreiten Browser-Balken“, was… große Sache. Und wenn Sie sie berücksichtigen wollen… http://code.google.com/p/ie7-js/
Das Ausblenden von overflow-x auf dem Body erfordert einige Überlegungen, aber 1) wenn Ihre Website eine fließende Breite hat, wird es wahrscheinlich nie eine Rolle spielen, und 2) kann dies leicht mit Media Queries behandelt werden, die ebenfalls polyfillbar sind.
Ich verstehe nicht, wie die Verwendung von schlechtem Markup durch Google in einigen ihrer Apps hier relevant ist. Sagen Sie damit, dass wir absichtlich schlechteres Markup verwenden sollen?
Hier ist die Sache, das
ist semantischer als das
Punkt. Ein Header ist ein Header, kein Header mit einer einzigen „Abteilung“ darin. Es ist weniger Code (Sie scheinen auf Seitengeschwindigkeit Wert zu legen, oder?) es ist verständlicher, es ist semantischer. Ich bin mir nicht sicher, ob ich anders überzeugt werden kann.
Den Code sauber zu halten ist wichtig.
Wenn das nicht ausreicht, um die gleichen Schritte wie die alte Lösung auszuführen, aber es einfacher oder effizienter ist und nicht mehr Zeit in Anspruch nimmt.
Reale Welt.
Benutzer kümmern sich nicht darum, was in Ihrem Code vor sich geht, es ist nur wichtig, wie schnell er geladen wird und wie gut er in allen Browsern aussieht.
Zeit.
Zum Beispiel haben Sie eine Website mit alten bewährten Lösungen erstellt und sie funktioniert und sieht überall gut aus (sogar in IE6), aber dann haben Sie sich etwas hier überlegt, das nicht semantisch korrekt ist, und weitere 8 Stunden investiert, um alles mit JavaScript und Pseudo-Elementen zu machen. Warum?
Benutzer.
Ein Benutzer kommt mit IE6 auf Ihre Website, er sieht, dass Ihre Website in seinem Browser scheiße aussieht, und er kauft Ihr Produkt nicht, bestellt keine Dienstleistung, registriert sich nicht oder geht einfach weg, weil Ihre Website in seinem Browser schlecht aussieht.
„IE6-Nutzer sind mit Geld nicht anders als andere Nutzer.“
Wenn Sie über den semantischen Rahmen hinauswachsen, verstehen Sie vielleicht, für wen Sie Ihre Website erstellen und was sie von Ihrer Website erwarten.
„Sie gestalten das Erlebnis so gut wie möglich.“
Geschwindigkeit.
ie7.js
1. Sehr langsame Bibliothek, funktioniert nur auf kleinen Seiten schnell.
2. Der Benutzer, der kein JavaScript hat oder dessen JavaScript noch nicht geladen ist, dessen Seite wird zusammenbrechen. Und das ist noch schlimmer, als eine voll funktionsfähige, schöne Website nicht anzuzeigen.
Glauben Sie, dass das schnellere .class oder 2 :before?
Ihr Artikel https://css-tricks.de/efficiently-rendering-css/?
„Universelle, Kind-, Nachbarselektoren, Pseudoselektoren sollten nur in Fällen angewendet werden, in denen sie wirklich benötigt werden, da sie wesentlich ressourcenintensiver sind als ID- und Klassenselektoren.“
Schnell und hübsch vs. langsam und hässlich, was wählen Sie?
Chris, ich mag diese Technik. Das ist ein Problem, das mir die ganze Zeit im Kopf herumschwirrt und ich versuche, bessere Wege zu finden, es zu lösen. Das einzige, was mir bei dieser Technik fehlt, ist, wie man horizontale Scrollbalken in schmaleren Browserfenstern berücksichtigt. Zum Beispiel, wenn Ihre Inhaltsbreite auf 960px eingestellt ist und der Benutzer sein Browserfenster auf 900px eingestellt hat, wie wird er dann auf den Inhalt zugreifen, der in die verbleibenden 60px überläuft?
Lassen Sie das einfach nicht passieren (CSS-Media-Queries!)
Anstatt width:960px können Sie max-width:960px verwenden ;)
Schöne Tutorials wie immer! Aber fügen Sie einen Tweet-Button hinzu ;) Ja, bitte!
Diese Tage arbeite ich an einem Design, das den gleichen Effekt hat und habe mir bereits überlegt, wie ich es umsetzen kann, und hier bin ich auf diesen Beitrag gestoßen, ohne überhaupt nach der Lösung zu suchen.
Danke für den Tipp.
Das ist brillant. Genau das, was ich gesucht habe, um den Code auf einem Projekt, an dem ich gerade arbeite, einfach zu halten.
Jetzt die Hürde, die ich zu lösen versuche und für die ich keine offensichtliche Lösung sehe – Wie bekomme ich das mit einem Clearfix zum Laufen…
Ich denke, dieser Tipp ist wirklich gut, aber ich habe ein Problem damit auf meinem Mac in Safari. Ein horizontaler Scrollbalken erscheint nicht, aber wenn ich diagonal (oder einfach nicht perfekt gerade) auf meinem Touchpad scrolle, scrollt die Seite horizontal. Erlebt das jemand dasselbe, wenn ja, gibt es Lösungen?
Hatte gerade dieses Problem, es scheint, als ob es behoben werden kann, indem man „overflow-x: hidden“ zu html und body hinzufügt =)
Dan – Das hat bei mir nicht funktioniert. Haben Sie weitere Vorschläge?
Das ist jetzt ziemlich genial – und ich bin mir ziemlich sicher, dass ich einen kleinen Fehler bemerkt habe! Er wird die Demoseite oder irgendetwas nicht beeinflussen, ich dachte nur, Sie würden es gerne wissen, damit Sie es in diesem Beitrag korrigieren können. ;)
Im ersten HTML-Block haben Sie einen [zweitebene] Header in ein div-Tag eingepackt – gute Arbeit. Nicht semantisch, rabble rabble rabble! :P Aber dann stylen Sie im ersten CSS-Block das „h1“-Element – und nicht „h2“. Dachte nur, ich weise Sie darauf hin. :P
Warum benutzen wir nicht „width:auto“?
hm… ich verstehe das Problem irgendwie nicht. Was ist daran falsch?
Oder das, wenn Sie einen Wrapper-Container verwenden.
Oder wenn Sie ein super großes Element wollen.
Alle davon sind meiner Meinung nach viel einfacher.
Großartige Tutorial! Dies könnte für dieses Projekt nützlich sein, an dem ich gerade arbeite… :) Prost!
Das ist eine wirklich interessante Lösung. Leider hatte ich auch einige Probleme mit Scrollbalken.
War es nicht einfacher, dem div einfach die Stile „width:100%“ zu geben und eine feste Höhe zuzuweisen?
Noch eine Idee.
h1 {
padding-left: 50%;
text-indent: -480px; (oder was auch immer, um auf die gewünschte feste Breite auszurichten)
background: #blabla;
}
Das ist nur eine Idee; sie funktioniert nicht in jeder Umgebung (stellen Sie sich vor, wie sich die zweite Zeile verhält; außerdem gibt es nichts, das den Text auf eine feste Breite verkleinern würde).
Erkunde nur einige Möglichkeiten :).
Was bedeutet das?
content: “”;
Und warum muss man Positionen setzen (relativ, absolut)?
Das macht ein Pseudoelement zu einem Pseudoelement. Wenn Sie :before oder :after verwenden, MÜSSEN Sie irgendeinen Inhalt verwenden, selbst wenn es nur ein leerer String ist. In diesem Fall brauchen wir ein generisches leeres Element, in dem wir positionieren und einfärben können, daher der leere String.
Hallo Chris, das sieht gut aus, aber es klingt, als gäbe es potenzielle Konflikte mit Elementen (z. B. DIVs, die Login, Navigation, Anzeigen usw. enthalten), die nach links, in die Mitte und nach rechts schweben… ist das richtig oder gibt es kein Problem? Es wäre schön, eine komplexere Version Ihrer Demo zu sehen, die zeigt, wie diese alle gut koexistieren können… oder nicht, je nachdem…?
Ich fand, ich musste „height:100%“ zu den html-, body-Tags hinzufügen, sonst hätte ich einen vertikalen Scrollbalken am unteren Rand des Vollbreite-Elements bekommen.
Anstatt die background-color der Pseudoelemente manuell zu definieren, habe ich ihre background-color auf „inherit“ gesetzt, was bei mir überall funktioniert!
Ich mag die Idee dieses Tutorials wirklich nicht, und es gibt eine viel effektivere Methode, um ein Feld voller Länge mit einem Inneren darin zu erreichen.
Einfach gesagt.
header {
background-color: #whatever
margin: 0 auto;
Erstellen Sie dann einen Header-Inhalt für das Innere des Headers.
headercontent {
position: relative;
}
Die riesigen Breiten- und negativen Margin-Methoden, die im Artikel erwähnt werden, führten dazu, dass horizontal gescrollt werden konnte, selbst wenn „overflow-x: hidden“ auf die html- und body-Elemente angewendet wurde. Es gab keinen horizontalen Scrollbalken, aber wenn Sie Text auswählten und Ihren Cursor über die rechte Seite der Seite bewegten, würde sich die Seite scrollen (das gilt sogar für die im Artikel gegebenen Demos). Die einzige Methode, die das horizontale Scrollen verhinderte, war die Box-Shadow-Methode.
Es stellt sich heraus, dass dieses Problem nur in Chrome auftritt. Es könnte sich um einen kürzlich eingeführten Fehler handeln.
Ich habe dasselbe Problem festgestellt – ich habe auch Browserstack bis hin zu Chrome Version 14 getestet und es tat dasselbe, daher bin ich mir nicht sicher, ob dies ein Problem war, das ursprünglich übersehen wurde? Das würde mich überraschen.
Es ist schade, dass keine davon perfekt ist – der Box-Schatten scheint der beste zu sein, aber ich versuche, eine Klasse zu erstellen, die ich einfach auf ein Element fallen lassen und es erweitern lassen kann. Das ist ziemlich einfach, bis man auf diesen Fehler stößt.
Ich muss sagen: DANKE! Ich weiß, dass dieser Beitrag alt ist, aber er hat mir unzählige Male geholfen, und dieser Beitrag hat mir wirklich, wirklich sehr geholfen. Viel Liebe für dich!_
Ich habe es im Header verwendet. und es war, vielen Dank. aber ich habe eine Frage wie diese. Wenn ich einen Schatten gebe, sieht es aus wie zwei Teile des Headers. Vor und nach dem Erhalt verschiedener Schatten.
Peter Sieg hat Recht. Ich habe dieses Problem unter Chrome festgestellt und leider scheint es Probleme bei responsiven Websites auf Mobilgeräten zu verursachen. Auf Mobilgeräten scheint die Zoomstufe automatisch so eingestellt zu sein, dass sie den „außerhalb der Seite“ liegenden Bereich einschließt (selbst bei Verwendung von ``). Dadurch bleibt eine mobile Website mit viel Leerraum nach rechts.
Hat jemand einen Vorschlag zur Lösung?
Was ist, wenn ich direkt nach einem h2-Text einen Bildhintergrund haben und ihn horizontal über das gesamte div erstrecken möchte?
Ich habe damit Probleme. Ich habe einen span:after verwendet, aber repeat-x funktioniert in diesem Fall nicht :( Weiß jemand, wie man das behebt?
background-repeat: repeat;
es sollte funktionieren, da ich die gleiche Methode bereits am ersten Tag des Spielens mit CSS übernommen hatte.
Entschuldigung, falls ich etwas Falsches gepostet habe, da ich neu in CSS bin :)
Als CSS-Anfänger genieße ich es sehr und dieser Beitrag ist einer der Beiträge, die ich zu Beginn dieser Reise besucht habe.
Was ist, wenn ich viele ähnliche divs voller Größen auf einer Seite erstellen möchte? Sollte ich den gleichen Weg gehen?
Was ist mit etwas wie dem?
#header {
width:100%;
height:80px;
padding:20px;
position: fixed;
display: inline-block;
top: 0px;
left: 0px;
z-index: 5;
overflow-x: visible;
overflow-y: visible;
}
Um die BORDER-TECHNIK zu beheben, die eine 1px weiße Leiste links anzeigt, die in Firefox sichtbar ist oder wenn man in Chrome zoomt.
Verwenden Sie left: -9990px anstelle von left: -9999px.
http://codepen.io/lemnis/pen/djtCb
Meine Idee mit etwas vw und calc Magie.
Schön :D
Eine weitere Calc-Version, die von Memmie Lenglet eingesandt wurde.
http://codepen.io/chriscoyier/pen/158a2712b7db1c7281d0f53572c6cfaf