Wenn wir CSS schreiben, vergessen wir manchmal einige Randfälle in den Designs. Wenn beispielsweise der Inhalt länger ist als erwartet und wir diese Möglichkeit nicht berücksichtigt haben, kann unser Design brechen. Wir können nicht garantieren, dass unser CSS immer wie erwartet funktioniert, aber zumindest können wir dies durch das Testen verschiedener Inhaltstypen reduzieren.
Wenn Sie CSS codieren, schreiben Sie abstrakte Regeln, um unbekannte Inhalte auf einem unbekannten Medium zu organisieren. – Keith J. Grant
In diesem Artikel werden wir verschiedene UI-Fehler von realen Websites durchgehen, damit wir sie von Anfang an berücksichtigen können. Bereit? Los geht's!
Ein Button mit einem Symbol auf der rechten/linken Seite

Dies ist ein Toggle-Button für ein Akkordeon. Auf der rechten Seite befindet sich ein Symbol, das hervorhebt, dass es klickbar ist. Wenn der Bereich jedoch nicht groß genug ist, überlappt der Text das Symbol. Dies kann passieren, wenn wir keinen langen Inhalt berücksichtigen.
Eine Lösung wäre, dem rechten Bereich ausreichend Polsterung hinzuzufügen, um die Größe des Symbols unterzubringen
.button {
padding-right: 50px;
}
Beachten Sie, wie die Erhöhung der Polsterung einen sicheren Bereich für das Symbol schafft. Jetzt können wir sicher sein, dass es nicht abbricht, wenn der Text länger wird.

Siehe den Pen Ein Button mit einem Symbol von Ahmad Shadeed (@shadeed) auf CodePen.
Input-Platzhalter
Wenn wir das Float-Label-Muster für unsere Formulare verwenden, insbesondere mit einem Button auf der rechten Seite. Wir sollten dies gründlich testen, um Probleme zu vermeiden, wenn das Label zu lang ist.

Eine Lösung wäre, dem Button position: relative hinzuzufügen. Dadurch wird er über das Label verschoben.
Siehe den Pen Langer Platzhalter von Ahmad Shadeed (@shadeed) auf CodePen.
Lange Namen

Bei diesem Design ist das Bild links gefloatet und wir haben rechts einen Autorennamen. Was passiert, wenn der Name länger als erwartet ist? Die Benutzeroberfläche bricht.
Das Problem ist, dass wir nur das Bild nach links gefloatet haben. Dies kann dazu führen, dass der Autorenname daneben gerückt wird. Dies funktioniert jedoch nur, wenn der Name nicht lang ist.
Um es robuster zu machen, sollten wir das Autorenbild floaten und dem Wrapper des Autornamens overflow: hidden hinzufügen. So erhalten wir den Vorteil des Block-Formatierungskontexts (dank Thierry Koblentz, der darauf in den Kommentaren hingewiesen hat). Oder als weitere Lösung verwenden Sie Flexbox, da sie für diese kleine Komponente geeignet ist.
Siehe den Pen Langer Personenname von Ahmad Shadeed (@shadeed) auf CodePen.
Lange Links/Wörter in einem Artikeltext

Manchmal gibt es lange Links oder Wörter in einem Artikel. Das verursacht möglicherweise kein Problem bei einer sehr breiten Ansicht. Aber für kleinere Größen wie auf Mobilgeräten oder Tablets führt dies zu horizontalem Scrollen, was störend ist.
Wir haben zwei Lösungen für ein solches Problem
1) CSS word-break verwenden
.article-body p {
word-break: break-all;
}
Bitte testen Sie gründlich, wenn Sie word-break verwenden, da es Unterschiede zwischen den Browsern gibt. Wir empfehlen Ihnen, diesen Artikel zu diesem Thema zu lesen.
2) overflow zum Wrapper-Element und text-overflow zu den Links hinzufügen
.article-body p {
overflow: hidden;
text-overflow: ellipsis;
}
Diese Lösung ist sicherer und besser für Links. Aber für Wörter würde ich word-break verwenden.

Siehe den Pen Lange Links / Wörter von Ahmad Shadeed (@shadeed) auf CodePen.
Lange Artikel-Tags

Wenn wir einen Artikel-Tag über eine Karte legen, sollten wir nur Polsterung für den Abstand hinzufügen. Die Bestimmung von Breite und Höhe kann die Benutzeroberfläche unterbrechen, wenn der Tag-Inhalt zu lang ist.
Wenn Sie eine Mindestbreite für den Tag haben möchten, ist das in Ordnung. Wir können min-width mit Polsterung um den Tag-Inhalt herum verwenden. So wird die Breite dynamisch und das Problem ist gelöst.
Siehe den Pen Lange Artikel-Tags von CSS-Tricks (@css-tricks) auf CodePen.
Abschnittsüberschrift mit einem Link

In diesem Beispiel haben wir einen Abschnittstitel zusammen mit einem "Mehr anzeigen"-Link auf der rechten Seite. Es gibt verschiedene Möglichkeiten, dies in CSS zu codieren, eine davon ist die absolute Positionierung des Links.
Dies führt zu Problemen, falls der Titel zu lang war. Eine bessere Lösung könnte die Verwendung von Flexbox sein. So wird der Link automatisch in eine neue Zeile verschoben, wenn nicht genügend Platz vorhanden ist.

.header-2 {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
}
Die obige Technik wird als „Alignment Shifting Wrapping“ bezeichnet. Ich habe sie vor zwei Jahren in diesem Artikel gelernt.
Siehe den Pen Abschnittsüberschrift mit einem Link von Ahmad Shadeed (@shadeed) auf CodePen.
Fazit
Ich habe auf die harte Tour gelernt, dass die Verwendung von Dummy-Inhalten oder das einfache Hinzufügen von Dingen nach dem Zufallsprinzip nicht ausreicht. Wir sollten alle Arten von Inhalten zu unseren Layouts hinzufügen, bis etwas bricht. Ich verwende gerne Heydon Pickerings forceFeed.js, um zufällig Inhalte zu einer bestimmten Komponente hinzuzufügen.
Sehr interessanter Beitrag, danke :)
Für das gefloatete Bild können Sie auch das CSS-Tabellenlayout verwenden, das sehr robust und einfach ist.
Ein weiteres Beispiel, das ich zu oft sehe, sind lange Listen mit Symbolen, die Mehrspaltensätze verwenden. Wenn der Inhalt zu lang ist: Der Text kommt unter das Symbol, was nicht wirklich schön ist.
Schön.
Ich suche nach einer Lösung,
Wie kann man eine Popup-Box schweben lassen, wenn der Inhalt der Webseite größer ist als die Fenstergröße?
Wenn der Hintergrundinhalt scrollbar ist und das Popup-Fenster oft aus dem Sichtbereich der Windows-Vorschau verschwindet. In diesem Fall muss der Benutzer leider scrollen, um die Position der Popup-Box für die Interaktion zu finden.
Ich bin mir nicht sicher, ob ich das gut verstehe, aber können Sie nicht
position: fixed; top: 0;verwenden?Geben Sie der Popup-Box die Position "fixed"!
Der Abschnitt Lange Namen zeigt ein „Media Object“ an, ohne die „richtige Lösung“ vorzuschlagen.
Die Angabe einer
widthfür beide Elemente würde Einschränkungen schaffen (mithilfe von Prozentangaben oder durch Kenntnis der Breite der übergeordneten Box) und die Verwendung vonflexboxbietet nicht die beste Browserunterstützung. Ein robusterer Ansatz ist die Gestaltung der Elemente neben einem Float als Block-Formatierungskontext (BFC). Dies hat den Vorteil, dass es in allen Browsern funktioniert, einschließlich IE6 (über „hasLayout“).Dieser Artikel scheint die Stärke von „Floats und BFCs“ zu vermissen, da er hauptsächlich Fehler vorschlägt, die durch absolut positionierte Elemente ausgelöst werden, was von Anfang an immer eine schlechte Idee war. Ich denke, die Empfehlung,
flexboxsei eine einfache Lösung, ist eine verpasste Gelegenheit, gute alte Layout-Techniken zu lernen.Hallo Thierry, vielen Dank für Ihren Kommentar.
Ich stimme Ihnen vollkommen bei der Verwendung von Floats zu. Der Grund, warum ich Fehler mit
position: absolutegezeigt habe, ist, dass ich sie auf einigen Websites gesehen habe und sie nur zeigen wollte.Wenn ich zum Beispiel etwas wie das Media Object erstellen möchte, würde ich Float verwenden und es bei Bedarf mit Flexbox verbessern.
Sie wollen wahrscheinlich nicht
word-break; es wurde entwickelt, um andere Alphabete in CJK-Seiten zu integrieren, und es bricht Zeilen nach ostasiatischen Typografieregeln, nicht nach westlichen.word-wrapist fast immer vorzuziehen.Vielen Dank für Ihren Kommentar, Taylor.
Ja, das habe ich auf einer Website gesehen, an der ich arbeite. Aber meine Frage ist, wie man lange Wörter in einem Absatz behandelt, ohne
word-breakzu verwenden? Ich würde gerne Ihre Gedanken dazu hören.Macht
word-wrap: break-word;nicht das, was Sie brauchen?Ja! Danke :)
Schöner Artikel Ahmad, aber meiner Erfahrung nach ist dies (bezogen auf Ihre Einleitung) kein „Randfall“. Dies ist ein sehr reales, frustrierendes und häufiges Problem.
Was würden Sie tun, wenn Sie eine eingebettete Twitter-Timeline hinzufügen und diese auf dem Handy zu breit ist, weil ich eine Länge für die große Ansicht festlegen musste? Sie befindet sich in einem Wrapper, um die Breite anzupassen. Ich kann die eine oder die andere nicht beeinflussen, ohne die eine oder die andere zu beeinträchtigen. Das gilt für kleine und große Abfragen. Gibt es eine bessere Möglichkeit mit JavaScript? Ein Link zu einer Referenz wäre großartig.
Laut [url=https://dev.twitter.com/web/embedded-timelines]dem Code für eingebettete Timelines auf dev.twitter[/url] ist die Einbettung responsiv. Wenn ich mein Browserfenster verkleinere, passt sich die Einbettung entsprechend an.
Vielleicht haben Sie alten Einbettungscode?
Für .card .author können Sie overflow:hidden statt float:left hinzufügen. Wichtig ist, dass der Autor ein Blockelement sein muss.
Ich schätze, Sie meinen einen Block-Formatierungskontext. Ich stimme zu, das ist der richtige Weg, um einen „Media Block“ zu gestalten.
Das trifft wirklich den wunden Punkt, den ich habe! Es ist gut, solche Lösungen zu sehen, die Sie entwickelt haben.
Ich denke, was der Artikel am meisten vermittelt, ist die Notwendigkeit zu testen, testen, testen.
Auch wenn Lösungen für solche Probleme sehr nützlich sind, sollte sich der Entwickler / Designer zur gleichen Zeit dieser Randfälle bewusst sein.
Wenn Sie nichts brechen sehen, werden Sie nichts sehen, was behoben werden muss.