No-Jank CSS-Streifen

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Bei der Erstellung von Streifen in CSS denke ich sofort an repeating-linear-gradient und harte Farbverläufe. Man erstellt einen Streifen, indem man die gleiche Farbe zwischen zwei Farbstopps verwendet, und einen weiteren Streifen (oder mehr), aber mit einer anderen Farbe zwischen zwei Farbstopps (wobei der mittlere geteilt wird).

Also wie

background: repeating-linear-gradient(
  45deg,
  black,
  black 10px,
  #444 10px,
  #444 11px
);

Das erzeugt schräge dunkelgraue Streifen mit 10px Abstand auf schwarzem Hintergrund.

Aber so rendert es auf meinem Bildschirm

Sehen Sie diese Darstellungsruckler, bei denen ein oder zwei der Streifen heller und dünner erscheinen als die anderen? Ich habe keine Ahnung, warum. Ich gehe davon aus, dass es etwas mit Subpixel-Rendering oder Ähnlichem zu tun hat. Das ist nicht schwer zu replizieren. Es liegt nicht nur an diesen beiden Farben oder diesem speziellen Winkel, es betrifft im Grunde alle Streifen, die mit repeating-linear-gradient erstellt werden. Es fällt bei dickeren Streifen (z. B. ab 5px) nicht mehr so stark auf.

Ich habe ein paar Beispiele gemacht. Dieses mit engeren Streifen in die andere Richtung ist besonders auffällig

Ich musste das neulich tun, fand die Ruckler und erinnerte mich an diese kleine Notiz in unserem Streifen-Artikel. Sie läuft darauf hinaus: Verwenden Sie nicht repeating-linear-gradient. Verwenden Sie einfach linear-gradient, setzen Sie eine background-size und lassen Sie es sich wiederholen. Das scheint tatsächlich den Trick zu tun. Das Problem dabei ist... wie groß soll man die background-size machen? Wenn die Streifen vertikal oder horizontal sind, ist es ziemlich einfach, etwas hinzubekommen. Aber wenn die Streifen schräg sind... die Berechnung der perfekten Breite×Höhe ist knifflig. Ich vermute, es hat mit dem Satz des Pythagoras zu tun, aber da bin ich überfragt.

Also, was macht man?

Benutzen Sie dieses nettes kleines Generator-Tool.

Es führt die notwendigen ausgefallenen Berechnungen durch, um es richtig zu machen. Sie können den unminifizierten JavaScript-Code hier sehen. Suchen Sie nach / GET BACKGROUND SIZE /, um all die Berechnungen zu sehen. Was auch immer dort gemacht wird, die Streifen kommen perfekt heraus.

Schade, dass repeating-linear-gradient keine bessere visuelle Ausgabe hat, da das so viel einfacher zu verstehen ist, aber hey, man muss tun, was man tun muss.