recherche
Maisoninterface Webtutoriel HTML借助sass的Maps功能使得响应式代码更有条理_html/css_WEB-ITnose

原文来自这里
本文综合了原文(by Jonathan Suh)以及笔者自己的理解。

Introduction

众所周知,写代码与写维护性高的代码是两回事.而涉及到响应式,代码又特别容易变的杂乱.借助sass maps所提供的拓扑功能,我们可以尝试减轻这一痛点.
以下的代码还是很常见的:

p { font-size: 15px; }@media screen and (min-width: 480px) {  p { font-size: 16px; }}@media screen and (min-width: 640px) {  p { font-size: 17px; }}@media screen and (min-width: 1024px) {  p { font-size: 19px; }}

两个问题点:1.DRY, 2.Magic Number.
也许sass的变量可以解决问题2。

$p-font-size-mobile : 15px;$p-font-size-small  : 16px;$p-font-size-medium : 17px;$p-font-size-large  : 19px;

但是变量多了之后,代码会变成这样:

$p-font-size-mobile : 15px;$p-font-size-small  : 16px;$p-font-size-medium : 17px;$p-font-size-large  : 19px;$h1-font-size-mobile: 28px;$h1-font-size-small : 31px;$h1-font-size-medium: 33px;$h1-font-size-large : 36px;..............

超多的变量显得毫无章法。

Sass maps初试

声明如下的sass变量:

$p-font-sizes: (  null  : 15px,  480px : 16px,  640px : 17px,  1024px: 19px);

接下来,创建mixin,遍历属性,生成对应的media queries

@mixin font-size($fs-map) {  @each $fs-breakpoint, $fs-font-size in $fs-map {    @if $fs-breakpoint == null {      font-size: $fs-font-size;    }    @else {      @media screen and (min-width: $fs-breakpoint) {        font-size: $fs-font-size;      }    }  }}

Sass 还提供了一些其它的语法糖,可以参考这里

这时我们可以在任意的地方引入mixin

p {  @include font-size($p-font-sizes);}

结果和文章开头是一样的.

Solving Breakpoint Fragmentation

上面的代码似乎还是有一点脆弱,如果我们希望引入更多的Breakpoint,或着说p tag 与h1 tag 希望引入不同的Breakpoint.事情就会变的很麻烦.考虑到这一点,我们可以将代码进行重构.

$breakpoints: (  small : 480px,  medium: 700px, // Previously 640px  large : 1024px);$p-font-sizes: (  null  : 15px,  small : 16px,  medium: 17px,  large : 19px);$h1-font-sizes: (  null  : 28px,  small : 31px,  medium: 33px,  large : 36px);@mixin font-size($fs-map, $fs-breakpoints: $breakpoints) {  @each $fs-breakpoint, $fs-font-size in $fs-map {    @if $fs-breakpoint == null {      font-size: $fs-font-size;    }    @else {      // If $fs-font-size is a key that exists in      // $fs-breakpoints, use the value      @if map-has-key($fs-breakpoints, $fs-breakpoint) {        $fs-breakpoint: map-get($fs-breakpoints, $fs-breakpoint);      }      @media screen and (min-width: $fs-breakpoint) {        font-size: $fs-font-size;      }    }  }}

现在,我们可以随意的添加Breakpoint

$p-font-sizes: (  null  : 15px,  small : 16px,  medium: 17px,  900px : 18px,  large : 19px,  1440px: 20px,);p {  @include font-size($p-font-sizes);}

Improving Vertical Rhythm With Line Height

来,更进一步,我们可以font-size mixin中增加一个lineheight的配置,(line-height和font-size常常是同时出现的)

$breakpoints: (  small : 480px,  medium: 700px,  large : 1024px);$p-font-sizes: (  null  : (15px, 1.3),  small : 16px,  medium: (17px, 1.4),  900px : 18px,  large : (19px, 1.45),  1440px: 20px,);@mixin font-size($fs-map, $fs-breakpoints: $breakpoints) {  @each $fs-breakpoint, $fs-font-size in $fs-map {    @if $fs-breakpoint == null {      @include make-font-size($fs-font-size);    }    @else {      // If $fs-font-size is a key that exists in      // $fs-breakpoints, use the value      @if map-has-key($fs-breakpoints, $fs-breakpoint) {        $fs-breakpoint: map-get($fs-breakpoints, $fs-breakpoint);      }      @media screen and (min-width: $fs-breakpoint) {        @include make-font-size($fs-font-size);      }    }  }}// Utility function for mixin font-size@mixin make-font-size($fs-font-size) {  // If $fs-font-size is a list, include  // both font-size and line-height  @if type-of($fs-font-size) == "list" {    font-size: nth($fs-font-size, 1);    @if (length($fs-font-size) > 1) {      line-height: nth($fs-font-size, 2);    }  }  @else {    font-size: $fs-font-size;  }}

nth 是sass提供的语法,nth(list, n)从list中拿第n个数据.

Conclusion

上文所提供的代码还是有很多不健壮的地方,欢迎大家提意见,共同研究.

RESOURCES

一个响应式布局分析可以用到的工具Modular Scale
另外一篇很棒的博文

如果觉得文章不错,欢迎来我的github看看,右上角图标即为传送门。

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Quel est le but du & lt; datalist & gt; élément?Quel est le but du & lt; datalist & gt; élément?Mar 21, 2025 pm 12:33 PM

L'article traite du HTML & lt; Datalist & GT; élément, qui améliore les formulaires en fournissant des suggestions de saisie semi-automatique, en améliorant l'expérience utilisateur et en réduisant les erreurs. COMMANDE COMPRES: 159

Quel est le but du & lt; Progress & gt; élément?Quel est le but du & lt; Progress & gt; élément?Mar 21, 2025 pm 12:34 PM

L'article traite du HTML & lt; Progress & GT; élément, son but, son style et ses différences par rapport au & lt; mètre & gt; élément. L'objectif principal est de l'utiliser & lt; Progress & gt; pour l'achèvement des tâches et & lt; mètre & gt; pour stati

Quel est le but du & lt; mètre & gt; élément?Quel est le but du & lt; mètre & gt; élément?Mar 21, 2025 pm 12:35 PM

L'article traite du HTML & lt; mètre & gt; élément, utilisé pour afficher des valeurs scalaires ou fractionnaires dans une plage, et ses applications courantes dans le développement Web. Il différencie & lt; mètre & gt; De & lt; Progress & gt; et ex

Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive?Quelle est la balise Meta de la fenêtre? Pourquoi est-ce important pour une conception réactive?Mar 20, 2025 pm 05:56 PM

L'article traite de la balise Meta de la fenêtre, essentielle pour la conception Web réactive sur les appareils mobiles. Il explique comment une utilisation appropriée garantit une mise à l'échelle optimale du contenu et une interaction utilisateur, tandis que la mauvaise utilisation peut entraîner des problèmes de conception et d'accessibilité.

Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez?Quel est le but du & lt; iframe & gt; étiqueter? Quelles sont les considérations de sécurité lorsque vous l'utilisez?Mar 20, 2025 pm 06:05 PM

L'article traite du & lt; iframe & gt; L'objectif de Tag dans l'intégration du contenu externe dans les pages Web, ses utilisations courantes, ses risques de sécurité et ses alternatives telles que les balises d'objet et les API.

Comment utiliser le html5 & lt; time & gt; élément pour représenter les dates et les temps sémantiquement?Comment utiliser le html5 & lt; time & gt; élément pour représenter les dates et les temps sémantiquement?Mar 12, 2025 pm 04:05 PM

Cet article explique le html5 & lt; time & gt; élément de représentation sémantique de date / heure. Il souligne l'importance de l'attribut DateTime pour la lisibilité à la machine (format ISO 8601) à côté du texte lisible par l'homme, stimulant AccessIbilit

Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5?Quelles sont les meilleures pratiques pour la compatibilité entre les navigateurs dans HTML5?Mar 17, 2025 pm 12:20 PM

L'article examine les meilleures pratiques pour assurer la compatibilité des navigateurs de HTML5, en se concentrant sur la détection des fonctionnalités, l'amélioration progressive et les méthodes de test.

Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur?Comment utiliser les attributs de validation du formulaire HTML5 pour valider l'entrée utilisateur?Mar 17, 2025 pm 12:27 PM

L'article discute de l'utilisation des attributs de validation de formulaire HTML5 comme les limites requises, motifs, min, max et longueurs pour valider la saisie de l'utilisateur directement dans le navigateur.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel