Pensé que ya lo sabía. Básicamente, usé el sass
estilo de escritura cuando escribía proyectos en la empresa antes, lo cual fue muy fluido. Hasta hace un tiempo, iba Element Plus
a diseñar la estructura de ingeniería de mi propia biblioteca de componentes con referencia, cuando vi Element Plus
esos usos elegantes sass
, comencé a avergonzarme de mi superficialidad e ignorancia. Esto comenzó a estudiar sistemáticamente sass
Durante este período, quise escribir un poco de aprendizaje y compartir muchas veces, pero todos terminaron sin problemas debido a varias cosas. Hoy, finalmente saqué un poco de tiempo de mi apretada agenda, justo a tiempo para compartir mi aliento con ustedes.
1. Introducción
Como css
preprocesador extremadamente maduro, sass
tiene muchas funciones especiales que nos ayudan a escribir un código de estilo más elegante y conciso. Introdujo css
variables de estilo antes y también admite funciones como anidamiento, funciones, mezcla y control de comandos, lo que amplía enormemente el estilo de juego.
sass
Hay dos formas de sintaxis: SCSS
y Sass
.
Entre ellos SCSS
, es un formato muy utilizado en la actualidad, que solo se expande sobre la base gramatical CSS3
de .Sass
CSS hacks
vendor-specific syntax
.scss
EsSass
el formato gramatical más antiguo, utiliza sangría en lugar de llaves y líneas nuevas en lugar de punto y coma. El formato es particularmente conciso y la escritura es más conveniente. Este formato también es compatible con todas las funciones, pero usa una expresión diferente Sass
en algunos lugares y su extensión de archivo se llama .SCSS
.sass
Cualquiera de los formatos se puede importar (@importar) en un archivo de otro formato para su uso, y también se puede sass-convert
convertir a otro formato a través de una herramienta de línea de comandos.
# Sass转为SCSS
sass-convert style.sass style.scss
# SCSS转为Sass
sass-convert style.scss style.sass
No presentaré su Sass
instalación y uso aquí.Después de todo, la mayoría de los proyectos ahora se webpack
empaquetan y construyen a través de otras herramientas de construcción, complementadas con las correspondientes y loader
otras herramientas para ayudar en la compilación. Debería haber muy pocos proyectos que necesiten usar sass
comandos en la línea de comandos para compilar archivos de estilo.
Sin embargo, vale la pena mencionar el formato de codificación . Al igual que con CSS
, puede usar @hcarset
para declarar un formato de codificación específico: insértelo al principio del archivo de estilo (en el primer carácter) @charset "encoding-name"
y Sass
el archivo se compilará de acuerdo con el formato de codificación dado. Por supuesto, el formato de codificación utilizado debe poder convertirse en un Unicode
juego de caracteres. Sass
Envíe el archivo en UTF-8
codificación y agregue una declaración al archivo de salida CSS
si aparecen caracteres que no son caracteres en el archivo compilado .ASCII
@charset
2. Expansión de funciones básicas
1. Reglas anidadasNested Rules
Sass
Admite CSS
la incrustación de un conjunto de estilos en otro conjunto de CSS
estilos, y el estilo interno utilizará el selector externo como selector principal.
#main p {
color: #00ff00;
width: 97%;
.redbox {
background-color: #ff0000;
color: #000000;}
}
Esto se Sass
compilaría de la siguiente manera CSS
:
#main p {
color: #00ff00;
width: 97%;
}
#main p .redbox {
background-color: #ff0000;
color: #000000;
}
La función de anidamiento reduce en gran medida la cantidad de código, ya no tenemos que escribir repetidamente selectores de padres engorrosos y es fácil de administrar.
2. Selector principal &
( Referencing Parent Selectors: &
)
Al anidar, si necesita hacer referencia al selector principal, como al establecer un :hover
estilo para un elemento, o cuando body
un elemento tiene un valor determinado classname
, puede &
usarse para hacer referencia al selector principal, es decir, su selector externo.
a {
font-weight: bold;
text-decoration: none;
// & 引用父元素&:hover { text-decoration: underline; }
// body.firefox 可以直接引用
body.firefox & { font-weight: normal; }
}
se Sass
compilará de la siguiente manera CSS
:
a {
font-weight: bold;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
body.firefox a {
font-weight: normal;
}
&
Debe ser el primer carácter de un selector, pero puede ir seguido de sufijos para generar selectores compuestos :
#main {
color: black;
// #main-sidebar 字符串拼接,这就有点好玩了&-sidebar { border: 1px solid; }
}
Esto se compilaría para:
#main {
color: black;
}
#main-sidebar {
border: 1px solid;
}
3. Anidamiento de atributosNested Properties
Algunos CSS
siguen el mismo espacio de nombres ( namespace
), por ejemplo, font-family, font-size, font-weight
ambos tienen font
espacios de nombres como atributos. En este momento, por simplicidad de escritura y administración conveniente, Sass
se permite anidar atributos en espacios de nombres:
.funky {
// 注意命名空间这里要加冒号
font: {
family: fantasy;
size: 30em;
weight: bold;}
}
compila de la siguiente manera CSS
:
.funky {
font-family: fantasy;
font-size: 30em;
font-weight: bold;
}
Entre ellos, el espacio de nombres también puede contener sus propios valores de atributos:
.funky {
// font-size/line-height
font: 20px/24px {
family: fantasy;
weight: bold;}
}
compila a:
.funky {
/* font-size/line-height */
font: 20px/24px;
font-family: fantasy;
font-weight: bold;
}
4. Selector de marcador de posición %foo
( Placeholder Selectors
: %foo
)
Los selectores de marcador de posición son similares id
a los selectores y class
los selectores, excepto que el símbolo es %
, y deben @extend
llamarse a través de instrucciones, de lo contrario, no participarán en Sass
la compilación.
5. NotasComments
Sass
Se admiten tanto los comentarios de una sola línea como los comentarios de //
varias líneas /* */
. Los comentarios de varias líneas se envían por completo al CSS
archivo compilado . !
Será el primer carácter de un comentario de varias líneas significa mantener este comentario en el modo de salida comprimido y enviarlo al archivo, que generalmente se usa para agregar información de derechos de autor. Las declaraciones de interpolación ( ) pueden generar valores variables en comentarios de varias líneas. (Usar para interpolación.)CSS
interpolation
#{$val}
// Sass
$version: "1.2.3";
/* This CSS is generated by My Snazzy Framework version #{$version}. */
// 编译为CSS:
/* This CSS is generated by My Snazzy Framework version 1.2.3. */
3. Ampliación de funciones avanzadas
1.SassScript
Sass
Proporciona una SassScript
potente función denominada , que se puede aplicar a cualquier atributo, lo que permite que los atributos utilicen funciones adicionales, como variables y operaciones aritméticas.
1.1Interactive Shell
Interactive Shell
Características que se pueden probar en la línea de comandos SassScript
. Ingrese en la línea de comando sass -i
y luego ingrese lo que desea probar para SassScript
ver el resultado.
sass -i
>> "Hello, Sassy World!"
"Hello, Sassy World!"
>> 1px + 1px + 1px
3px
>> #777 + #777
#eeeeee
>> #777 + #888
white
1.2 Variables$
Variables: $
Usar variables es muy simple:
// 声明变量
$width: 5em;
#main {// 使用变量
width: $width;
}
Las variables tienen un alcance a nivel de bloque y las variables dentro de las reglas anidadas son variables locales que solo se pueden usar dentro de las reglas anidadas. Las variables globales se pueden utilizar en cualquier lugar. Agregar !global
una declaración convierte una variable local en una variable global .
// Sass
#main {// !global声明,转换为全局变量
$width: 5em !global;
width: $width;
}
#sidebar {
// 使用全局变量
width: $width;
}
// 编译为CSS:
#main {
width: 5em;
}
#sidebar {
width: 5em;
}
1.3 Tipos de datosData Types
SassScript
7
Se admiten los principales tipos de datos:
- Números, con unidades,
1, 2, 3, 6, 10px
etc.; - cadena (se admiten tanto comillas como sin comillas),
"foo", "bar", baz
; - color,
blue, #04a3f9, rgba(255,0,0,0.5)
etc; - booleano,
true, false
; - NULO,
null
; - Array (
list
), con espacios o comas como delimitadores,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
; maps
, que es equivalente aJS
dondeObject
,(key1: value1, key2: value2)
.
Además, SassScript
también se admiten otros CSS
valores de atributo , como Unicode
juegos de caracteres o !important
declaraciones, pero estos no se tratan de manera especial, sino que se tratan como cadenas sin comillas.
1.3.1 Cadenas
SassScript
Sequoted strings
admiten tanto cadenas entre comillas ( ) comounquoted strings
cadenas sin comillas ( ) . Estas dos cadenas no se convertirán entre sí en el momento de la compilación, excepto en un caso: cuando se usa #{}
( interpolation
), la cadena entrecomillada se compilará en una cadena sin comillas, lo cual es conveniente mixin
para citar el nombre del selector en .
// Sass
@mixin firefox-message($selector) {
body.firefox #{$selector}:before {
content: "Hi, Firefox users!";}
}
@include firefox-message(".header");
// 编译为CSS
body.firefox .header:before {
content: "Hi, Firefox users!";
}
1.3.2 matriz ( lists
)
Una matriz se refiere a Sass
cómo manejar una serie de valores CSS
en margin: 10px 15px 0 0
o font-face: Helvetica, Arial, sans-serif
separados por espacios o comas. De hecho, los valores individuales también se tratan como matrices que contienen un solo valor.
La matriz en sí no tiene muchas funciones, pero Sass list functions
trae muchas funciones nuevas a la matriz: las nth
funciones pueden acceder directamente a un elemento de la matriz; las join
funciones pueden conectar varias matrices juntas; append
las funciones pueden agregar nuevos valores a la matriz; las @each
funciones puede atravesar cada elemento de la matriz.
Los arreglos pueden contener sub-arreglos: Por ejemplo 1px 2px, 5px 6px
, es contiene dos1px 2px
arreglos de y . 5px 6px
Si las matrices interna y externa usan el mismo método de separación, debe usar paréntesis para envolver la capa interna, por ejemplo (1px 2px) (5px 6px)
. Los paréntesis no se conservarán durante la compilación, por lo que no importa de qué manera se escriban 1px 2px, 5px 6px
o (1px 2px) (5px 6px)
el resultado final de la compilación sea el mismo, pero Sass
tienen diferentes significados en el archivo, el primero significa una matriz que contiene cuatro valores y el último significa una matriz que contiene dos Se puede decir que los paréntesis enfatizan el concepto de "agrupamiento".
()
Se utiliza para representar una matriz vacía y también puede representar un archivo vacío map
. Las matrices vacías no se compilarán directamente CSS
, y si hay matrices vacías o valores nulos en la matriz, se borrarán en el momento de la compilación. Como 1px 2px () 3px
o 1px 2px null 3px
. Las matrices separadas por comas pueden conservar la coma final, que pretende enfatizar la relación estructural de la matriz, especialmente cuando es necesario declarar una matriz que contiene solo un valor. Por ejemplo (1,)
, representa 1
una matriz que contiene solo .
1.3.3maps
map
es una colección de pares clave-valor, key
y value
ambos pueden ser SassScript
objetos arbitrarios. Tanto él como list
ambos operan con funciones. Por ejemplo, map-get
las funciones se pueden usar para buscar valores clave , las funciones se map-merge
pueden usar para agregar nuevos pares clave-valor y las @each
directivas se pueden usar para agregar estilos a cada par clave-valor. map
Se puede usar en cualquier lugar donde se pueda usar list
, pero no al revés. Cuando se map
usa list
en funciones, se trata como key1 value1, key2 value2
una matriz de la forma.
1.3.4 Color
Cualquier CSS
expresión de color devuelve un SassScript
valor de color. unquoted strings
Contiene una gran cantidad de colores con nombre (a menudo indistinguibles de las cadenas sin comillas ).
1.4 OperaciónOperations
Todos los tipos de datos admiten la operación de igualdad ==
O !=
, además, cada tipo de datos también tiene su propio método de operación.
1.4.1 Operaciones numéricasNumber Operations
SassScript
Admite operaciones de suma, resta, multiplicación y división, así como operaciones de redondeo ( +, -, *, /, %
), convirtiendo valores entre unidades cuando sea necesario. El operador relacional ( >, <, >=, <=
) también se puede utilizar para operaciones numéricas.
// Sass
p {
width: 1in + 8pt;
}
// 编译为:
p {
width: 1.111in;
}
- operación de división
/
Mención aparte merece la operación de división. Debido a que los /
símbolos CSS
generalmente juegan el papel de separar números en . En SassScript
, /
no solo para separar números, sino también para operaciones de división. /
Se considera operación de división en los tres casos siguientes :
- cuando el valor o parte de un valor es una variable o el valor de retorno de una función;
- Cuando el valor está entre paréntesis;
- Cuando el valor es parte de una expresión aritmética.
// Sass
p {
font: 10px/8px; // 普通的CSS
$width: 1000px;
width: $width/2; // 使用了变量,是除法运算
width: round(1.5)/2; // 函数返回值,是除法运算
height: (500px/2); // 使用圆括号,是除法运算
margin-left: 5px + 8px/2px; // 算数运算表达式的一部分,是除法运算
}
// 编译为CSS
p {
font: 10px/8px;
width: 500px;
height: 250px;
margin-left: 9px;
}
Si necesita usar una variable y no quiere que /
se use como operador de división, puede #{}
ajustar la variable con:
// Sass
p {$font-size: 12px;$line-height: 30px;font: #{$font-size}/#{$line-height};
}
// 编译为CSS
p {font: 12px/30px;
}
1.4.2 Operación de valor de colorColor Operations
El funcionamiento del valor del color se calcula por tramos, es decir, R, G, B
los valores se calculan por separado.
p {
color: #010203 + #040506;
}
Calculado en piezas 01 + 04 = 05
02 + 05 = 07
03 + 06 = 09
, luego compilado como:
p {
color: #050709;
}
se puede utilizar color functions
, que es un poco más conveniente que los cálculos de color.
Los valores de color también se pueden combinar con operaciones numéricas:
p {
color: #010203 * 2;
}
// 计算 01 * 2 = 02 02 * 2 = 04 03 * 2 = 06,然后编译为:
p {
color: #020406;
}
Cabe señalar que si el valor del color contiene alpha channel
, el valor del color involucrado en el cálculo debe tener el mismo alpha
valor para realizar la operación, ya que la operación aritmética no actuará sobre el alpha
valor.
p {
// 需要保证有相同的alpha值color: rgba(255, 0, 0, 0.75) + rgba(0, 255, 0, 0.75);
}
El valor en el valor del color alpha
se puede ajustar a través de la función opacity
o transparentize
.
// Sass
$translucent-red: rgba(255, 0, 0, 0.5);
p {
color: opacify($translucent-red, 0.3);
background-color: transparentize($translucent-red, 0.25);
}
// 被编译为:
p {
color: rgba(255, 0, 0, 0.8);
background-color: rgba(255, 0, 0, 0.25);
}
1.4.3 Operaciones con cadenasString Operations
Utilice una +
cadena de concatenación; +
el valor de la izquierda domina si el resultado compilado final está entre comillas o sin comillas.
Cuando la expresión de operación se usa junto con otros valores, use espacios como conectores:
p {
margin: 3px + 4px auto;
}
// 编译为:
p {
margin: 7px auto;
}
Puede #{}
insertar valores dinámicos usando:
$value: null;
p:before {content: "I ate #{$value} pies!";
}
// 编译为CSS:
p:before {content: "I ate pies!";
}
1.4.4 Operaciones booleanasBoolean Operations
Compatibilidad con operaciones booleanas and
, or
, not
.
1.4.5 Operación de matriz
Las matrices no admiten operaciones directas y solo list functions
se pueden manipular mediante.
1.5 paréntesis(Parentheses)
Los paréntesis se cuentan primero.
1.6 FuncionesFunctions
SassScript
Hay muchas funciones integradas, algunas incluso se pueden CSS
llamar usando declaraciones ordinarias:
p {
color: hsl(0, 100%, 50%);
}
// 编译为:
p {
color: #ff0000;
}
- argumentos de palabras clave
Keyword Arguments
Sass
Las funciones permiten argumentos de palabras clave, el ejemplo anterior se puede escribir como:
p {
color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);
}
Sass
Hay muchas funciones integradas, por lo que no las expandiré aquí.
1.7 Declaraciones de interpolaciónInterpolation #{}
Las variables se #{}
pueden usar en selectores o nombres de propiedades a través de:
$name: foo;
$attr: border;
p.#{$name} {#{$attr}-color: blue;
}
// 编译为:
p.foo {border-color: blue;
}
SassScript
en 1.8&
&
Representa el selector principal. De la siguiente manera, &
el valor de ((".foo.bar" ".baz.bang"), ".bip.qux")
.
.foo.bar .baz.bang, .bip.qux {$selector: &;
}
Si no hay un selector principal, &
el valor es null
. Esto se puede aplicar mixin
para detectar si hay un selector principal:
@mixin does-parent-exist {
@if & {
// 有父选择器
&:hover {
color: red;
}} @else {
// 没有父选择器
a {
color: red;
}}
}
1.9 Valor por defecto de la variable ( Variable Defaults
):!default
La adición al final de una variable !default
se puede utilizar para asignar un valor a !default
una variable a la que no se le ha asignado una declaración. null
La asignación sólo funcionará si a la variable no se le ha asignado un valor o se le ha asignado un valor nulo !default
.
$content: "First content";
// 变量已被赋值,无效
$content: "Second content?" !default;
$new_content: "First time reference" !default;
#main {
content: $content;
new-content: $new_content;
}
// 编译为:
#main {
content: "First content";
new-content: "First time reference";
}
2. @-Rules
con el comando ( Directives
)
Sass
Todas CSS3 @-Rules
, así como Sass
directivas específicas ( directives
), son compatibles.
2.1@import
Sass
Funcionalidad ampliada @import
para que sea posible importar .scss
y .sass
archivar. Los archivos importados se fusionarán y compilarán en el mismo CSS
archivo. Además, las variables contenidas en el archivo importado pueden o mixin
no estar disponibles en el archivo importado.
Generalmente, el archivo @import
se encuentra Sass
e importa, con las siguientes excepciones, que se tratan como CSS
sintaxis normal:
- La extensión del archivo es
.css
; - Los nombres de archivo
http://
comienzan con; - El nombre del archivo es
url()
; @import
contenermedia queries
_
Se permite importar varios archivos a la vez. Cuando no se escribe ninguna extensión, intentará encontrar .scss
el .sass
archivo con el mismo nombre.
@import "rounded-corners", "text-shadow";
Los archivos de importación también pueden usar sentencias de interpolación #{}
, pero solo para CSS
el url()
método de importación.
$family: unquote("Droid+Sans");
@import url("http://fonts.googleapis.com/css?family=#{$family}");
// 编译为:
@import url("http://fonts.googleapis.com/css?family=Droid+Sans");
@imports
También hay dos usos especiales: parciales y anidamiento .
- Diafragma (
Partials
)
A veces, desea importar Sass
un archivo, pero no quiere compilarlo como CSS
, puede agregar un guión bajo antes del nombre del archivo, lo que le indicará Sass
que no lo compile. Tenga en cuenta que el guión bajo no es necesario en la declaración de importación. Por ejemplo, si el nombre del archivo es _colors.scss
, el siguiente código importa el _colors.scss
archivo y no se compilará como CSS
.
@import "colors";
Cabe señalar que si hay archivos con el mismo nombre que contienen guiones bajos al principio y archivos que no contienen guiones bajos al principio, los archivos que agregan guiones bajos se ignorarán.
- anidando
@import
En la mayoría de los escenarios, lo usamos en el nivel superior del archivo @imports
. De hecho, el anidamiento también se puede @imports
anidar en CSS
estilos o @media
. La diferencia de usarlo en la capa superior es que el estilo importado de esta manera solo puede aparecer en la capa anidada, lo que se puede entender como "alcance local".
// example.scss
.example {
color: red;
}
// main.scss
#main {
@import "example";
}
eventualmente será compilado a:
#main .example {
color: red;
}
Sin embargo, debe tenerse en cuenta que no debe haber instrucciones de nivel superior como , etc. @import
en los archivos importados por este formulario anidado .@mixin
@charset
2.2@media
Sass
es el @media
mismo CSS
que en , con la adición de nuevas características:
- Se permite
CSS
anidar dentro de las reglas. Cuando@media
está anidado enCSS
una regla, cuando se compila, se compilará en la capa más externa del archivo y contiene el selector principal cuando estaba anidado antes, lo cual es muy conveniente.
// Sass
.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;}
}
// 编译为
.sidebar {
width: 300px;
}
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; }
}
@media
Se permite el anidamientoqueries
, que se agrega automáticamente en tiempo de compilaciónand
.
@media screen {
.sidebar {
@media (orientation: landscape) {
width: 500px;
}}
}
// 编译为
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; }
}
- Puede usar
SassScript
(variable, función, etc.) en lugar del nombre o valor de la condición.
$media: screen;
$feature: -webkit-min-device-pixel-ratio;
$value: 1.5;
@media #{$media} and ($feature: $value) {
.sidebar {
width: 500px;}
}
// 编译为
@media screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sidebar {
width: 500px; }
}
2.3@extend
@extend
Se puede hacer que un selector herede el estilo de otro selector a través de .
.error {
border: 1px #f00;
background-color: #fdd;
}
.error.intrusion {
background-image: url("/image/hacked.png");
}
.seriousError {
// 继承,此时所有使用到 .error 的样式都会被继承过来
@extend .error;
border-width: 3px;
}
// 编译为
.error, .seriousError {
border: 1px #f00;
background-color: #fdd; }
.error.intrusion, .seriousError.intrusion {
background-image: url("/image/hacked.png");
}
.seriousError {
border-width: 3px;
}
Placeholder Selectors
selector de marcador de posición
A veces, es necesario definir un conjunto de estilos para la herencia, no para un determinado elemento, y esperamos que no se Sass
compile y genere por separado. Este tipo de escena ocurre con más frecuencia cuando se crea una Sass
biblioteca de estilos. Así nació el selector de marcador de posición. Su uso es casi idéntico id
a selector o class
selectora, la notación selectora es %
. Cuando se usan solos, los selectores de marcador de posición se Sass
ignoran y no se compilan en el archivo de salida.
// 不会被编译到输出文件中
#context a%extreme {
color: blue;
font-weight: bold;
font-size: 2em;
}
Debe @extend
ser utilizado por:
.notice {
@extend %extreme;
}
// 被编译为
#context a.notice {
color: blue;
font-weight: bold;
font-size: 2em;
}
!optional
declaración
Usando !optional
declaraciones, es posible @extend
no generar nuevos selectores.
// 不可以,因为没有 .notice
a.important {
@extend .notice
}
// 可以
a.important {
@extend .notice !optional;
}
- utilizado en el comando
@extend
Para evitar generar mucho código inútil, extienda ( @extend
) en la instrucción y limite la extensión a selectores en el mismo nivel de instrucción.
@media print {
.error {
border: 1px #f00;
background-color: #fdd;}
.seriousError {
// 可以
// .error 同在一个 @meida层级中
@extend .error;
border-width: 3px;}
}
// 以下为反面栗子
.error {
border: 1px #f00;
background-color: #fdd;
}
@media print {
.seriousError {
// 不可以, .error 不在当前的@meida指令层级中
@extend .error;
border-width: 3px;}
}
2.4@at-root
Use @at-root
directivas para elevar los selectores seleccionados al nivel más externo.
.parent {...
@at-root .child { ... }
}
// 编译为
.parent { ... }
.child { ... }
- Puede ser una estructura a nivel de bloque que contenga múltiples selectores.
.parent {...
@at-root {
.child1 { ... }
.child2 { ... }}
.step-child { ... }
}
// 编译为
.parent { ... }
.child1 { ... }
.child2 { ... }
.parent .step-child { ... }
- Use
with:xxx yyy ...
owithout:xxx yyy ...
para asegurarse de que la directiva externa sea válida para el selector promovido a la capa más externa:
// without:
@media print {
.page {
width: 8in;
// without: media 让选择器不受外层的@media影响
@at-root (without: media) {
color: red;
}}
}
// 编译为
@media print {
.page {
width: 8in;}
}
.page {
color: red;
}
3. Comandos de controlControl Derectives
Las directivas de control se utilizan para hacer referencia a estilos bajo ciertas condiciones.
3.1if()
La if
función integrada se puede utilizar en cualquier SassScript
contexto de secuencias de comandos.
3.2@if
@if
La condición se cumple cuando el valor de retorno de la expresión de la instrucción no es false
o null
. @else if
Se puede conectar más tarde @else
.
$type: monster;
p {
@if $type == ocean {
color: blue;} @else if $type == matador {
color: red;} @else if $type == monster {
color: green;} @else {
color: black;}
}
// 编译为
p {
color: green;
}
3.3@for
Esta directiva tiene dos formatos: @for $var from <start> through <end>
, o @for $var from <start> to <end>
. Ambos contienen el punto de partida <start>
, la diferencia es que to
no contiene <end>
, sino que through
contiene <end>
. Además, $var
puede ser cualquier variable, pero <start>
y <end>
debe ser un número entero.
@for $i from 1 to 3 {
.item-#{$i} { width: 2em * $i; }
}
// 编译为
.item-1 {
width: 2em;
}
.item-2 {
width: 4em;
}
3.4@each
@each
Formato de comando:@each $var in <list>
@each $animal in puma, sea-slug, egret, salamander {.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');}
}
// 编译为
.puma-icon {
background-image: url('/images/puma.png'); }
.sea-slug-icon {
background-image: url('/images/sea-slug.png'); }
.egret-icon {
background-image: url('/images/egret.png'); }
.salamander-icon {
background-image: url('/images/salamander.png'); }
- Se pueden aplicar múltiples variables al mismo tiempo , lo cual es útil cuando se escriben estilos que tienen formas similares pero valores diferentes:
@each $animal, $color, $cursor in (puma, black, default),
(sea-slug, blue, pointer),
(egret, white, move) {.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
border: 2px solid $color;
cursor: $cursor;}
}
// 编译为
.puma-icon {
background-image: url('/images/puma.png');
border: 2px solid black;
cursor: default; }
.sea-slug-icon {
background-image: url('/images/sea-slug.png');
border: 2px solid blue;
cursor: pointer; }
.egret-icon {
background-image: url('/images/egret.png');
border: 2px solid white;
cursor: move; }
- Dado
maps
que se tratará como una matrizlists
,@each
también semap
puede usar :
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {#{$header} {
font-size: $size;}
}
// 编译为
h1 {
font-size: 2em; }
h2 {
font-size: 1.5em; }
h3 {
font-size: 1.2em; }
3.5@while
while
Circulación, entiendo.
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
// 更改条件变量
$i: $i - 2;
}
//编译为
.item-6 {
width: 12em; }
.item-4 {
width: 8em; }
.item-2 {
width: 4em; }
4. Comandos mixtos ( Mixin Directives
)
mixin
Se utiliza para definir estilos reutilizables.
4.1 Definición de instrucciones mixtas @minin
( Defining a Mixin: @mixin
)
Después @mixin
de agregar el nombre y el estilo, puede definir la instrucción mixta. Tenga en cuenta que debe incluir selectores y atributos, y también puede usar &
para referirse al selector principal.
// 定义名为 clearfix 的混合指令
@mixin clearfix {
display: inline-block;
// & 指代父选择器。注意,这个混合指令里虽然它没有父选择器,
// 但是混合指令使用的地方,可以产生父选择器&:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;}
// 这里的 & 同理* html & { height: 1px }
}
4.2 Instrucciones mixtas de referencia @include
( Including a Mixin: @include
)
- Úselo
@include MixinName
para citar una directiva mixin:
.page-title {
// 引用混合指令,将 clearfix 中的规则混入到 .page-title 中
@include clearfix;
padding: 4px;
margin-top: 10px;
}
- También se puede hacer referencia directamente y mezclarlo en el nivel más externo, sin definir atributos y sin tener un selector principal al que hacer referencia:
@mixin silly-links {
a {
color: blue;
background-color: red;}
}
@include silly-links;
//编译为
a {
color: blue;
background-color: red; }
En las directivas mixin que escribimos, es mejor definir solo selectores descendientes, para que puedan importarse de manera segura en cualquier parte del archivo.
- Una directiva compuesta puede hacer referencia a otras directivas compuestas:
@mixin compound {
@include highlighted-background;
@include header-text;
}
@mixin highlighted-background { background-color: #fc0; }
@mixin header-text { font-size: 20px; }
4.3 Parámetros ( Arguments
)
Los parámetros se pueden usar para establecer variables para el estilo de comandos mixtos y asignar valores. Al hacer referencia y definir instrucciones mixtas, el orden de los parámetros debe tener una correspondencia uno a uno, y se pueden asignar valores predeterminados a los parámetros.
// $width有默认值
@mixin sexy-border($color, $width: 1in) {
// 注意这里得 border,是CSS命名空间
border: {
color: $color;
width: $width;
style: dashed;}
}
p { @include sexy-border(blue); }
h1 { @include sexy-border(blue, 2in); }
// 编译为
p {
border-color: blue;
border-width: 1in;
border-style: dashed; }
h1 {
border-color: blue;
border-width: 2in;
border-style: dashed; }
Además, hay dos puntos más importantes sobre los parámetros:
- Parámetro de palabra clave (
Keyword Arguments
): alMixin
pasar un parámetro por referencia, pase el valor precisamente especificando la palabra clave del parámetro (nombre del parámetro).
p { @include sexy-border($color: blue); }
h1 { @include sexy-border($color: blue, $width: 2in); }
Aunque la escritura es un poco engorrosa, es fácil de leer y se puede asignar con precisión.
- Variable de parámetro (
Variable Arguments
): cuando no está seguro de cuántos parámetros necesita el comando mixto, puede usar la variable de parámetro al final del parámetro...
para declarar, ySass
estos parámetros se tratarán como una lista de valores.
@mixin box-shadow($shadows...) {
-moz-box-shadow: $shadows;
-webkit-box-shadow: $shadows;
box-shadow: $shadows;
}
.shadows {
@include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}
// 编译为
.shadowed {
-moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
-webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
}
También puede usar variables de parámetros al citar:
@mixin colors($text, $background, $border) {
color: $text;
background-color: $background;
border-color: $border;
}
$values: #ff0000, #00ff00, #0000ff;
.primary {
@include colors($values...);
}
// 编译为
.primary {
color: #ff0000;
background-color: #00ff00;
border-color: #0000ff;
}
4.4 Importar contenido en el comando mixto @content
( Passing Content Blocks to a Mixin
)
Al citar Mixin
, especialmente cuando se cita en la capa más externa del archivo, puede usar @content
marcadores de posición y luego @include
importar el siguiente contenido a @content
la posición, similar a plantillas, espacios, etc.
@mixin apply-to-ie6-only {* html {
@content;}
}
@include apply-to-ie6-only {
#logo {
background-image: url(/logo.gif);}
}
// 编译为
* html #logo {
background-image: url(/logo.gif);
}
Debido a su uso frecuente Mixin
en Sass
bibliotecas de estilos. Para simplificar el uso, puede ser =
expresado @mixin
por y +
expresado por @include
.
// Sass (这里就是Sass格式的语法了,而非SCSS格式)
=apply-to-ie6-only* html
@content
+apply-to-ie6-only
#logo
background-image: url(/logo.gif)
- Contenido a nivel de bloque y alcance variable : al
@content
importar contenido a nivel de bloque, su alcance se asocia con el contexto donde se define, y no tiene nada que ver con el alcance dentro de la instrucción mixta.
$color: white;
@mixin colors($color: blue) {
background-color: $color;
// @content 的内容的作用域在定义它的地方
@content;
border-color: $color;
}
.colors {
@include colors { // 这里的color,虽然会被插入到@content的位置// 但是它的作用域是在定义它的地方,
// 而定义它的地方,$color是全局变量,值为whitecolor: $color; }
}
// 编译为
.colors {
background-color: blue;
color: white;
border-color: blue;
}
Tenga en cuenta que no todas las definiciones están en el ámbito global, y también es posible que la definición esté anidada en un selector, y luego el ámbito sea el ámbito local del selector.
5. Instrucción de función ( Function Directives
)
Sass
Permite funciones personalizadas, las funciones se pueden usar en cualquier valor de atributo o SassScript
. Los nombres de las funciones personalizadas pueden tener un prefijo para evitar conflictos de nombres.
$grid-width: 40px;
$gutter-width: 10px;
@function grid-width($n) {
@return $n * $grid-width + ($n - 1) * $gutter-width;
}
#sidebar { width: grid-width(5); }
// 编译为
#sidebar {
width: 240px;
}
6. Formato de salida
6.1:nested
Anidado ( :nested
) es sass
el formato de salida predeterminado de , que refleja claramente la CSS
relación HTML
entre y . Los selectores y los atributos ocupan una línea aparte, y la sangría es sass
coherente con la del archivo, basándose en la sangría para reflejar el nivel de anidamiento.
// 编译后输出的CSS文件
#main {
color: #fff;
background-color: #000; }
#main p {
width: 10em; }
6.2:expanded
El formato de expansión ( :expanded
) es el mismo que cuando se escribe a mano y el selector no tiene sangría.
#main {
color: #fff;
background-color: #000;
}
#main p {
width: 10em;
}
6.3:compact
El formato compacto ( Compact
) ocupa menos espacio, cada CSS
regla ocupa solo una línea, los selectores anidados no dejan líneas en blanco y los selectores no anidados dejan líneas en blanco entre ellos.
#main { color: #fff; background-color: #000; }
#main p { width: 10em; }
.huge { font-size: 10em; font-weight: bold; text-decoration: underline; }
6.4:compressed
El formato comprimido ( Compressed
) no deja líneas en blanco, espacios, comentarios, etc., y el volumen de salida es el más pequeño.
#main{color:#fff;background-color:#000}#main p{width:10em}.huge{font-size:10em;font-weight:bold;text-decoration:underline}
Por fin
Se prepara un paquete de información inicial para todos. Contiene 54, 2.57G e-books relacionados con front-end, "Colección de entrevistas de front-end (con respuestas y análisis)", tutoriales en video de conocimientos clave y difíciles (juego completo).
Amigos necesitados, puede hacer clic en la tarjeta a continuación para recibir y compartir gratis