Responsive Fonts mit LESS

subjects 1569262 1920
Bildquelle: Pixabay, WerbeFabrik

CSS-Preprocessing ist in eine spannende Erfindung im Bereich der Webentwicklung. Das Wesentliche Merkmal für mich war, mit variablen Maßen, Farben und Schriftgrößen arbeiten zu können, um sie dynamisch über Theme-Einstellungen zu steuern. Mit nur wenigen Codezeilen habe ich beispielsweise ein semantisches GRID unter Kontrolle. Ich ändere einen Wert über die Theme-Einstellungen, und um den Rest kümmert sich LESS.

LESS kann keine solchen Loops. Aber LESS kann Mixins, und damit funktioniert es auch:

Markup

<h1 class="responsive">Responsive H1</h1>
<h2 class="responsive">Responsive H2, 50 % von H1</h2>

LESS

@responsive: 75;
/* Standardstile */
h1.responsive {font-size:@responsive * 1px;line-height:100%;}
h2.responsive {font-size:round(@responsive / 2px);line-height:100%;}

@mwidth:1024; /* ab dieser Breite wird mit Mediaqueries eingegriffen (abwärts) */
@phonewidth: 600; /* bei dieser Breite endet die Skalierung, und enden die Mediaqueries */

@max:@mwidth;
@divisor: @mwidth / @responsive; /* Verhältnis zwischen Fensterbreite und Schriftgröße */
@step: 20; /* Abstand zwischen den Auflösungen in denen ein neues Mediaquery angelegt wird; je größer die Zahl, umso weniger Mediaqueries */

.pseudoX (@max) when (@max > @phonewidth) {

    @responsivesize = round(@max / @divisor);

    @media only screen and (max-width: @max * 1px) {
	h1.responsive {font-size:@responsivesize * 1px;}
	h2.responsive {font-size:round(@responsivesize / 2px);}
    }

    .pseudoX(@max - @step);

}

// erster "Aufruf" mit dem höchsten Wert
.pseudoX(@max);

Das CSS-Ergebnis

Wenn man viele Responsive-Font-Stufen haben will, braucht es viele Mediaqueries, und dann sieht das CSS aus wie nachfolgend. Abstände von mehr als 20 führten durch das Runden zu identischen Schriftgrößen in aufeinanderfolgenden Mediaqueries, daher machte bei den verwendeten Dimensionen eine feinere Abstufung (@step weniger als 20) keinen Sinn.

h1.responsive {
    font-size: 85px;
    line-height:100%;
}
h2.responsive {
    font-size: 43px;
    line-height:100%;
}
@media only screen and (max-width: 1024px) {
  h1.responsive {
    font-size: 85px;
  }
  h2.responsive {
    font-size: 43px;
  }
}
@media only screen and (max-width: 1004px) {
  h1.responsive {
    font-size: 83px;
  }
  h2.responsive {
    font-size: 42px;
  }
}
.
.
.
@media only screen and (max-width: 644px) {
  h1.responsive {
    font-size: 53px;
  }
  h2.responsive {
    font-size: 27px;
  }
}
@media only screen and (max-width: 624px) {
  h1.responsive {
    font-size: 52px;
  }
  h2.responsive {
    font-size: 26px;
  }
}

Alternativ macht das jQuery-Plugin Fittext Webfonts responsive.

Ergänzung vom 29.05.2018: mit z.B. font-size:calc(14px + 0.5vw) unter Verwendung von Viewport Units für den Bereich dazwischen lässt sich eine flexible Anpassung der Schriftgröße heute mit einfacheren Mitteln und reinem CSS erreichen. calc() und Viewport Units werden heute von so gut wie allen Browsern unterstützt. Ab einer bestimmten Größe ist es mithin sinnvoll, einen festen Wert für die gewünschte min-width festzulegen.

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable