Das Deklarieren von Schriftgrößen in Viewport-Einheiten kann wirklich interessante Ergebnisse liefern, bringt aber auch Herausforderungen mit sich. Es gibt keine min-font-size- oder max-font-size-Eigenschaften in CSS, daher sind Randfälle, in denen Text zu klein oder zu groß wird, schwer zu handhaben.
Dieses Sass-Mixin nutzt Media Queries, um eine minimale und maximale Größe für die Schrift in Pixeln zu definieren. Es unterstützt auch einen optionalen Parameter als Fallback für Browser, die keine Viewport-Einheiten unterstützen.
Als Beispiel: So würden Sie eine Schriftart als 5vw definieren, beschränkt zwischen 35px und 150px (mit einem Fallback von 50px für nicht unterstützende Browser)
@include responsive-font(5vw, 35px, 150px, 50px);
Und hier ist das vollständige Mixin
///
/// Viewport sized typography with minimum and maximum values
///
/// @author Eduardo Boucas (@eduardoboucas)
///
/// @param {Number} $responsive - Viewport-based size
/// @param {Number} $min - Minimum font size (px)
/// @param {Number} $max - Maximum font size (px)
/// (optional)
/// @param {Number} $fallback - Fallback for viewport-
/// based units (optional)
///
/// @example scss - 5vw font size (with 50px fallback),
/// minumum of 35px and maximum of 150px
/// @include responsive-font(5vw, 35px, 150px, 50px);
///
@mixin responsive-font($responsive, $min, $max: false, $fallback: false) {
$responsive-unitless: $responsive / ($responsive - $responsive + 1);
$dimension: if(unit($responsive) == 'vh', 'height', 'width');
$min-breakpoint: $min / $responsive-unitless * 100;
@media (max-#{$dimension}: #{$min-breakpoint}) {
font-size: $min;
}
@if $max {
$max-breakpoint: $max / $responsive-unitless * 100;
@media (min-#{$dimension}: #{$max-breakpoint}) {
font-size: $max;
}
}
@if $fallback {
font-size: $fallback;
}
font-size: $responsive;
}
Demo
Siehe den Pen Viewport-skalierte Typografie mit minimalen und maximalen Größen von Eduardo Bouças (@eduardoboucas) auf CodePen.
Wie würden Sie das @include schreiben, wenn Sie einen Fallback, aber keine maximale Größe wünschen?
Hallo Tom,
Sie könnten
falseanstelle des Parameters für die maximale Größe übergeben.Zum Beispiel:
Ich hoffe, das hilft!
Perfekt, danke Eduardo Bouças
Ich versuche, dies in einem Projekt zu verwenden. In meinen grundlegenden Mobile-First-Stilen wird die vw-Einheiten-Schriftgröße durch eine px-Schriftgröße bei einem von mir nicht definierten max-width: 1000px-Breakpoint überschrieben. Ich sehe die vw-Einheiten-Schriftgröße erst nach einem 1000px breiten Browserfenster. Was passiert?
Ich verstehe im Grunde, was passiert, aber wie erhalte ich die Vorteile dieses Mixins bei Breiten unter 1000px?
Hallo, ich habe Ihr
mixinangepasst, umvminzu verwenden, damit Typografie sowohl horizontal als auch vertikal reagiert. Das bedeutet, dass auf breiten Laptops, die sehr breit, aber sehr kurz sind, die Schrift schrumpft, um Platz zu sparen.http://codepen.io/dahliacreative/pen/GNqaer
Ich habe auch eines für Einheiten wie Margin und Padding gemacht, das auf die gleiche Weise funktioniert.
http://codepen.io/dahliacreative/pen/RoRmxW
Ich hoffe, andere finden sie hilfreich, und zögern Sie nicht, Verbesserungen vorzuschlagen, ich bin sicher, sie könnten besser sein!
Die Media Query erzeugt den Effekt der minimalen Schriftgröße. Je höher Sie die Mindestgröße einstellen, desto höher ist die Breite dieser Media Query.
Wenn Sie möchten, dass die vw-Einheiten immer wirksam sind, dann benötigen Sie dieses Mixin überhaupt nicht. Setzen Sie einfach die Schriftgröße auf die Verwendung dieser Einheiten.
Ist das verständlich?
OK, ich verstehe. Danke.
Hallo, ich habe Ihr
mixinangepasst, umvminzu verwenden, damit Typografie sowohl horizontal als auch vertikal reagiert. Das bedeutet, dass auf breiten Laptops, die sehr breit, aber sehr kurz sind, die Schrift schrumpft, um Platz zu sparen.http://codepen.io/dahliacreative/pen/GNqaer
Ich habe auch eines für Einheiten wie Margin und Padding gemacht, das auf die gleiche Weise funktioniert.
http://codepen.io/dahliacreative/pen/RoRmxW
Ich hoffe, andere finden sie hilfreich, und zögern Sie nicht, Verbesserungen vorzuschlagen, ich bin sicher, sie könnten besser sein!
Bei der Arbeit untersuchen wir die potenzielle Verwendung dieser Logik. Im Rahmen dieser Untersuchung stellten wir fest, dass der "fließende" Teil einer bestimmten Min/Fluid/Max-Größenkombination für jede Kombination unterschiedlich wäre. Ich wollte eine visuelle Darstellung davon erstellen, wie sich jede Größenkombination überschneidet, damit wir fundierte Anpassungen an den fließenden Teilen und ihren Überlappungen vornehmen können, um die bestmögliche Erfahrung zu erzielen. Daher habe ich den folgenden CodePen erstellt. Hoffentlich ist er für andere Leser dieses Artikels nützlich.
http://codepen.io/aaronbarker/full/zZroxL/
Es gibt eine Schrift-Min/Max-Größe im W3 HTML-Entwurf https://drafts.csswg.org/css-fonts-4/#font-min-max-size-prop
Wie kombiniert man eine Typografie-Skala (wie Major Second TypeScale) mit diesem Ansatz?