Eu pensei que já sabia, basicamente usei o sass
estilo de escrita ao escrever projetos na empresa antes, o que foi muito tranquilo. Até um tempo, eu ia Element Plus
projetar a estrutura de engenharia da minha própria biblioteca de componentes com referência, quando vi Element Plus
aqueles usos elegantes sass
, comecei a sentir vergonha da minha superficialidade e ignorância. Isso começou a estudar sistematicamente.Durante sass
esse período, muitas vezes eu queria escrever alguns aprendizados e compartilhar, mas todos acabaram sem problemas devido a várias coisas. Hoje, finalmente tirei um tempinho da minha agenda lotada, bem a tempo de compartilhar meu encorajamento com você.
1. Introdução
Como um pré-processador extremamente maduro css
, ele sass
possui muitas funções especiais, que nos ajudam a escrever um código de estilo mais elegante e conciso. Ele css
introduziu variáveis de estilo antes e também oferece suporte a funções como aninhamento, funções, mixagem e controle de comando, o que expande muito o estilo de jogo.
sass
Existem duas formas de sintaxe: SCSS
e Sass
.
Entre eles SCSS
, é um formato amplamente utilizado atualmente, expandindo-se apenas na base gramatical CSS3
do .Sass
CSS hacks
vendor-specific syntax
.scss
ÉSass
o formato gramatical mais antigo, usando recuo em vez de chaves e novas linhas em vez de ponto-e-vírgula.O formato é particularmente conciso e a escrita é mais conveniente. Este formato também suporta todas as funções, mas usa uma expressão diferente Sass
em alguns lugares , e sua extensão de arquivo é chamada de .SCSS
.sass
Qualquer formato pode ser importado (@import) para um arquivo de outro formato para uso e também pode ser sass-convert
convertido para outro formato por meio de uma ferramenta de linha de comando.
# Sass转为SCSS
sass-convert style.sass style.scss
# SCSS转为Sass
sass-convert style.scss style.sass
Não vou apresentar a Sass
instalação e o uso dele aqui, afinal, a maioria dos projetos agora são webpack
empacotados e construídos por meio de outras ferramentas de construção, complementadas por ferramentas correspondentes e loader
outras para auxiliar na compilação. Deve haver muito poucos projetos que precisam usar sass
comandos na linha de comando para compilar arquivos de estilo.
No entanto, vale a pena mencionar o formato de codificação . Assim como com CSS
, você pode usar @hcarset
para declarar um formato de codificação específico: insira-o no início do arquivo de estilo (no primeiro caractere) @charset "encoding-name"
, e Sass
o arquivo será compilado de acordo com o formato de codificação fornecido. Obviamente, o formato de codificação usado deve ser conversível em um Unicode
conjunto de caracteres. Sass
Gere o arquivo em UTF-8
codificação e adicione uma declaração ao arquivo de saída CSS
se não caracteres aparecerem no arquivo compilado .ASCII
@charset
2. Expansão da função básica
1. Regras aninhadasNested Rules
Sass
Ele suporta a CSS
incorporação de um conjunto de estilos em outro conjunto de CSS
estilos, e o estilo interno usará o seletor externo como seletor pai.
#main p {
color: #00ff00;
width: 97%;
.redbox {
background-color: #ff0000;
color: #000000;}
}
Isso seria Sass
compilado da seguinte forma CSS
:
#main p {
color: #00ff00;
width: 97%;
}
#main p .redbox {
background-color: #ff0000;
color: #000000;
}
A função de aninhamento reduz muito a quantidade de código, não precisamos mais escrever repetidamente seletores pais complicados e é fácil de gerenciar.
2. Seletor de pais &
( Referencing Parent Selectors: &
)
No aninhamento, se você precisar fazer referência ao seletor pai, como ao definir um :hover
estilo para um elemento ou quando body
um elemento tiver um determinado valor classname
, ele poderá ser &
usado para fazer referência ao seletor pai, ou seja, seu seletor externo.
a {
font-weight: bold;
text-decoration: none;
// & 引用父元素&:hover { text-decoration: underline; }
// body.firefox 可以直接引用
body.firefox & { font-weight: normal; }
}
será Sass
compilado da seguinte forma CSS
:
a {
font-weight: bold;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
body.firefox a {
font-weight: normal;
}
&
Deve ser o primeiro caractere de um seletor, mas pode ser seguido por sufixos para gerar seletores compostos :
#main {
color: black;
// #main-sidebar 字符串拼接,这就有点好玩了&-sidebar { border: 1px solid; }
}
Isso seria compilado para:
#main {
color: black;
}
#main-sidebar {
border: 1px solid;
}
3. Aninhamento de atributosNested Properties
Alguns CSS
seguem o mesmo namespace ( namespace
), já que font-family, font-size, font-weight
ambos possuem font
namespaces como atributos. Neste momento, para simplicidade de escrita e gerenciamento conveniente, os Sass
atributos podem ser aninhados em namespaces:
.funky {
// 注意命名空间这里要加冒号
font: {
family: fantasy;
size: 30em;
weight: bold;}
}
compila da seguinte forma CSS
:
.funky {
font-family: fantasy;
font-size: 30em;
font-weight: bold;
}
Entre eles, o namespace também pode conter seus próprios valores de atributo:
.funky {
// font-size/line-height
font: 20px/24px {
family: fantasy;
weight: bold;}
}
compila para:
.funky {
/* font-size/line-height */
font: 20px/24px;
font-family: fantasy;
font-weight: bold;
}
4. Seletor de espaço reservado %foo
( Placeholder Selectors
: %foo
)
Os seletores de espaço reservado são semelhantes id
aos seletores e class
seletores, exceto que o símbolo é %
, e devem ser @extend
chamados por meio de instruções, caso contrário, não participarão Sass
da compilação.
5. NotasComments
Sass
Comentários de uma linha e comentários //
de várias linhas são suportados /* */
. Os comentários de várias linhas são totalmente enviados para o CSS
arquivo compilado . !
Será o primeiro caractere de um comentário de várias linhas significa manter esse comentário no modo de saída compactado e enviá-lo para o arquivo, que geralmente é usado para adicionar informações de direitos autorais. As instruções de interpolação ( ) podem gerar valores de variáveis em comentários de várias linhas. (Use para interpolação.)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. Expansão de função avançada
1.SassScript
Sass
Fornece uma SassScript
função poderosa chamada , que pode ser aplicada a qualquer atributo, permitindo que os atributos usem funções adicionais, como variáveis e operações aritméticas.
1.1Interactive Shell
Interactive Shell
Recursos que podem ser testados na linha de comando SassScript
. Digite na linha de comando sass -i
e digite o que deseja testar para SassScript
ver a saída.
sass -i
>> "Hello, Sassy World!"
"Hello, Sassy World!"
>> 1px + 1px + 1px
3px
>> #777 + #777
#eeeeee
>> #777 + #888
white
1.2 Variáveis$
Variables: $
O uso de variáveis é muito simples:
// 声明变量
$width: 5em;
#main {// 使用变量
width: $width;
}
As variáveis têm escopo em nível de bloco e as variáveis dentro de regras aninhadas são variáveis locais que só podem ser usadas dentro de regras aninhadas. As variáveis globais podem ser usadas em qualquer lugar. Adicionar !global
uma declaração transforma uma variável local em uma variável global .
// Sass
#main {// !global声明,转换为全局变量
$width: 5em !global;
width: $width;
}
#sidebar {
// 使用全局变量
width: $width;
}
// 编译为CSS:
#main {
width: 5em;
}
#sidebar {
width: 5em;
}
1.3 Tipos de dadosData Types
SassScript
7
Os principais tipos de dados são suportados :
- Números, com unidades,
1, 2, 3, 6, 10px
etc.; - string (tanto entre aspas quanto sem aspas são suportadas),
"foo", "bar", baz
; - cor,
blue, #04a3f9, rgba(255,0,0,0.5)
etc; - booleano,
true, false
; - NULO,
null
; - Array (
list
), com espaços ou vírgulas como delimitadores,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
; maps
, que é equivalente aJS
ondeObject
,(key1: value1, key2: value2)
.
Além disso, outros valores de atributos SassScript
também são suportados , como conjuntos de caracteres ou declarações, mas estes não são tratados de forma especial, mas são tratados como strings sem aspas.CSS
Unicode
!important
1.3.1 Cordas
SassScript
As strings entre aspas ( ) e as strings sem aspas ( ) sãoquoted strings
suportadas . Essas duas strings não serão convertidas uma na outra em tempo de compilação, exceto em um caso: ao usar ( ), a string entre aspas será compilada em uma string sem aspas, o que é conveniente para colocar aspas no nome do seletor em .unquoted strings
#{}
interpolation
mixin
// 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
)
Uma matriz refere-se a Sass
como lidar com uma série de valores separados CSS
por espaços margin: 10px 15px 0 0
ou font-face: Helvetica, Arial, sans-serif
vírgulas. Na verdade, valores individuais também são tratados como arrays contendo apenas um valor.
O array em si não tem muitas funções, mas Sass list functions
traz muitas novas funções para o array: nth
funções podem acessar diretamente um item no array; join
funções podem conectar vários arrays juntos; append
funções podem adicionar novos valores ao array; @each
funções pode percorrer cada item na matriz.
As matrizes podem conter submatrizes: por exemplo 1px 2px, 5px 6px
, é contém duas1px 2px
matrizes de e . 5px 6px
Se as matrizes interna e externa usarem o mesmo método de separação, você precisará usar parênteses para envolver a camada interna, por exemplo (1px 2px) (5px 6px)
. Os parênteses não serão preservados durante a compilação, então não importa de que maneira eles são escritos, 1px 2px, 5px 6px
ou (1px 2px) (5px 6px)
o resultado final da compilação é o mesmo, mas eles Sass
têm significados diferentes no arquivo, o primeiro significa uma matriz contendo quatro valores e o último significa uma matriz contendo dois Pode-se dizer que os parênteses enfatizam o conceito de "agrupamento".
()
Usado para representar uma matriz vazia e também pode representar map
. Matrizes vazias não serão compiladas diretamente CSS
e, se houver matrizes vazias ou valores nulos na matriz, elas serão limpas no momento da compilação. Tal como 1px 2px () 3px
ou 1px 2px null 3px
. Arrays separados por vírgula podem reter a vírgula à direita, que serve para enfatizar o relacionamento estrutural do array, especialmente quando é necessário declarar um array contendo apenas um único valor. Por exemplo (1,)
, representa 1
uma matriz contendo apenas .
1.3.3maps
map
é uma coleção de pares chave-valor key
e ambos podem ser objetos value
arbitrários . SassScript
Ele e list
ambos operam com funções. Por exemplo, map-get
funções podem ser usadas para pesquisar valores-chave , funções podem map-merge
ser usadas para adicionar novos pares de valores-chave e @each
diretivas podem ser usadas para adicionar estilos a cada par de valores-chave. map
Ele pode ser usado em qualquer lugar list
, mas não vice-versa. Quando map
usado list
em funções, é tratado como key1 value1, key2 value2
um array do formulário.
1.3.4 Cor
Qualquer CSS
expressão de cor retorna um SassScript
valor de cor. unquoted strings
Isso contém um grande número de cores nomeadas (muitas vezes indistinguíveis de strings sem aspas ).
1.4 OperaçãoOperations
Todos os tipos de dados suportam a operação de igualdade ==
OU !=
, além disso, cada tipo de dados também possui seu próprio método de operação.
1.4.1 Operações numéricasNumber Operations
SassScript
Suporta adição, subtração, multiplicação e divisão, bem como operações de arredondamento ( +, -, *, /, %
), convertendo valores entre unidades quando necessário. O operador relacional ( >, <, >=, <=
) também pode ser usado para operações numéricas.
// Sass
p {
width: 1in + 8pt;
}
// 编译为:
p {
width: 1.111in;
}
- operação de divisão
/
A operação de divisão merece uma menção à parte. Como os /
símbolos CSS
geralmente desempenham o papel de separar números em . Em SassScript
, /
não apenas para separar números, mas também para operações de divisão. Nos três casos seguintes, /
é considerada uma operação de divisão:
- quando o valor ou parte de um valor é uma variável ou o valor de retorno de uma função;
- Quando o valor estiver entre parênteses;
- Quando o valor faz parte de uma expressão 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;
}
Se você precisar usar uma variável e não quiser que ela /
seja usada como um operador de divisão, você pode #{}
agrupar a variável com:
// Sass
p {$font-size: 12px;$line-height: 30px;font: #{$font-size}/#{$line-height};
}
// 编译为CSS
p {font: 12px/30px;
}
1.4.2 Operação de valor de corColor Operations
A operação do valor da cor é calculada em seções, ou seja, R, G, B
os valores são calculados separadamente.
p {
color: #010203 + #040506;
}
Calculado em partes 01 + 04 = 05
02 + 05 = 07
03 + 06 = 09
e compilado como:
p {
color: #050709;
}
pode ser usado color functions
, o que é um pouco mais conveniente do que cálculos de cores.
Os valores de cores também podem ser combinados com operações numéricas:
p {
color: #010203 * 2;
}
// 计算 01 * 2 = 02 02 * 2 = 04 03 * 2 = 06,然后编译为:
p {
color: #020406;
}
Deve-se observar que se o valor da cor contiver alpha channel
, o valor da cor envolvido no cálculo deve ter o mesmo alpha
valor para realizar a operação, pois a operação aritmética não atuará sobre o alpha
valor.
p {
// 需要保证有相同的alpha值color: rgba(255, 0, 0, 0.75) + rgba(0, 255, 0, 0.75);
}
O valor no valor da cor alpha
pode ser ajustado através da função opacity
ou 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 Operações de stringString Operations
Use uma +
string de concatenação; +
o valor à esquerda domina se o resultado final compilado é citado ou não.
Quando a expressão de operação for usada em conjunto com outros valores, use espaços como conectores:
p {
margin: 3px + 4px auto;
}
// 编译为:
p {
margin: 7px auto;
}
Você pode #{}
inserir valores dinâmicos usando:
$value: null;
p:before {content: "I ate #{$value} pies!";
}
// 编译为CSS:
p:before {content: "I ate pies!";
}
1.4.4 Operações BooleanasBoolean Operations
Suporte a operações booleanas and
, or
, not
.
1.4.5 Operação de matriz
Arrays não suportam operações diretas e só podem list functions
ser manipulados usando.
1.5 Parênteses(Parentheses)
Os parênteses são contados primeiro.
1.6 FunçõesFunctions
SassScript
Existem muitas funções incorporadas, algumas podem até ser CSS
chamadas usando instruções comuns:
p {
color: hsl(0, 100%, 50%);
}
// 编译为:
p {
color: #ff0000;
}
- argumentos de palavras-chave
Keyword Arguments
Sass
As funções permitem argumentos de palavra-chave, o exemplo acima pode ser escrito como:
p {
color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);
}
Sass
Existem muitas funções internas, então não vou expandi-las aqui.
1.7 Declarações de InterpolaçãoInterpolation #{}
As variáveis podem #{}
ser usadas em seletores ou nomes de propriedade por meio de:
$name: foo;
$attr: border;
p.#{$name} {#{$attr}-color: blue;
}
// 编译为:
p.foo {border-color: blue;
}
SassScript
em 1.8&
&
Representa o seletor pai. A seguir, &
o valor de ((".foo.bar" ".baz.bang"), ".bip.qux")
.
.foo.bar .baz.bang, .bip.qux {$selector: &;
}
Se não houver seletor pai, &
o valor será null
. Isso pode ser aplicado mixin
para detectar se há um seletor pai:
@mixin does-parent-exist {
@if & {
// 有父选择器
&:hover {
color: red;
}} @else {
// 没有父选择器
a {
color: red;
}}
}
1.9 Valor padrão variável ( Variable Defaults
):!default
Adicionar no final de uma variável !default
pode ser usado para atribuir um valor a !default
uma variável que não foi atribuída a uma declaração. null
A atribuição só funcionará se a variável não tiver um valor atribuído ou se for atribuído um 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
com o comando ( Directives
)
Sass
Todos os CSS3 @-Rules
, bem como Sass
diretivas específicas ( directives
) são suportados.
2.1@import
Sass
Funcionalidade estendida @import
para possibilitar a importação .scss
e .sass
arquivamento. Os arquivos importados serão mesclados e compilados no mesmo CSS
arquivo. Além disso, as variáveis contidas no arquivo importado podem ou mixin
não estar disponíveis no arquivo importado.
Geralmente, o arquivo @import
é encontrado Sass
e importado, com as seguintes exceções, que são tratadas como CSS
sintaxe normal:
- A extensão do arquivo é
.css
; - Os nomes dos arquivos
http://
começam com; - O nome do arquivo é
url()
; @import
contémmedia queries
.
É permitido importar vários arquivos ao mesmo tempo, quando nenhuma extensão for gravada, ele tentará encontrar .scss
ou .sass
o arquivo com o mesmo nome.
@import "rounded-corners", "text-shadow";
Arquivos de importação também podem usar instruções de interpolação #{}
, mas apenas para CSS
o url()
método de importação.
$family: unquote("Droid+Sans");
@import url("http://fonts.googleapis.com/css?family=#{$family}");
// 编译为:
@import url("http://fonts.googleapis.com/css?family=Droid+Sans");
@imports
Há também dois usos especiais: parciais e aninhamento .
- Diafragma (
Partials
)
Às vezes, você deseja importar Sass
um arquivo, mas não deseja compilá-lo como CSS
, você pode adicionar um sublinhado antes do nome do arquivo, o que lhe dirá Sass
para não compilá-lo. Observe que o sublinhado não é necessário na instrução de importação. Por exemplo, se o nome do arquivo for _colors.scss
, o código a seguir importará o _colors.scss
arquivo e ele não será compilado como CSS
.
@import "colors";
Deve-se observar que, se houver arquivos com o mesmo nome que contenham sublinhados à esquerda e arquivos que não contenham sublinhados à esquerda, os arquivos que adicionam sublinhados serão ignorados.
- nidificação
@import
Na maioria dos cenários, usamos no nível superior do arquivo @imports
. Na verdade, o aninhamento também pode ser @imports
aninhado em CSS
estilos ou arquivos @media
. A diferença de usá-lo na camada superior é que o estilo importado dessa forma só pode aparecer na camada aninhada, que pode ser entendida como "escopo local".
// example.scss
.example {
color: red;
}
// main.scss
#main {
@import "example";
}
eventualmente será compilado para:
#main .example {
color: red;
}
No entanto, deve-se observar que não deve haver instruções de nível superior, como , etc., @import
nos arquivos importados por este formulário aninhado .@mixin
@charset
2.2@media
Sass
é o @media
mesmo CSS
que em , com a adição de novos recursos:
- É permitido ser
CSS
aninhado dentro de regras. Quando@media
estiver aninhado emCSS
uma regra, quando for compilado, será compilado para a camada mais externa do arquivo e conterá o seletor pai quando foi aninhado antes, o que é muito conveniente.
// Sass
.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;}
}
// 编译为
.sidebar {
width: 300px;
}
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; }
}
@media
O aninhamento é permitidoqueries
, o que é adicionado automaticamente em tempo de compilaçãoand
.
@media screen {
.sidebar {
@media (orientation: landscape) {
width: 500px;
}}
}
// 编译为
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; }
}
- Você pode usar
SassScript
(variável, função, etc.) em vez do nome ou valor da condição.
$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
Um seletor pode ser feito para herdar o estilo de outro seletor via .
.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
seletor de espaço reservado
Às vezes, é necessário definir um conjunto de estilos para herança, não para um determinado elemento, e esperamos que não seja Sass
compilado e gerado separadamente. Esse tipo de cena ocorre com mais frequência ao criar uma Sass
biblioteca de estilos. Assim nasceu o seletor de espaço reservado. Seu uso é quase idêntico id
ao seletor ou class
seletor, a notação do seletor é %
. Quando usados sozinhos, os seletores de espaço reservado são Sass
ignorados e não compilados no arquivo de saída.
// 不会被编译到输出文件中
#context a%extreme {
color: blue;
font-weight: bold;
font-size: 2em;
}
Ele precisa @extend
ser usado por:
.notice {
@extend %extreme;
}
// 被编译为
#context a.notice {
color: blue;
font-weight: bold;
font-size: 2em;
}
!optional
declaração
Usando !optional
declarações, é possível @extend
não gerar novos seletores.
// 不可以,因为没有 .notice
a.important {
@extend .notice
}
// 可以
a.important {
@extend .notice !optional;
}
- usado no comando
@extend
Para evitar a geração de muito código inútil, estenda ( @extend
) na instrução e limite a extensão aos seletores no mesmo nível de instrução.
@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
diretivas para elevar os seletores selecionados para o nível mais externo.
.parent {...
@at-root .child { ... }
}
// 编译为
.parent { ... }
.child { ... }
- Pode ser uma estrutura em nível de bloco contendo vários seletores.
.parent {...
@at-root {
.child1 { ... }
.child2 { ... }}
.step-child { ... }
}
// 编译为
.parent { ... }
.child1 { ... }
.child2 { ... }
.parent .step-child { ... }
- Use
with:xxx yyy ...
ouwithout:xxx yyy ...
para garantir que a diretiva externa seja válida para o seletor promovido para a camada mais 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 controleControl Derectives
As diretivas de controle são usadas para fazer referência a estilos sob certas condições.
3.1if()
A if
função interna pode ser usada em qualquer SassScript
contexto de script.
3.2@if
@if
A condição é atendida quando o valor de retorno da expressão da instrução não é false
ou null
. @else if
Pode ser conectado posteriormente @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 diretiva tem dois formatos: @for $var from <start> through <end>
, ou @for $var from <start> to <end>
. Ambos contém o ponto de partida <start>
, a diferença é que to
não contém <end>
, mas through
contém <end>
. Além disso, $var
pode ser qualquer variável, mas <start>
e <end>
deve ser inteiro.
@for $i from 1 to 3 {
.item-#{$i} { width: 2em * $i; }
}
// 编译为
.item-1 {
width: 2em;
}
.item-2 {
width: 4em;
}
3.4@each
@each
Formato do 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'); }
- Várias variáveis podem ser aplicadas ao mesmo tempo , o que é útil ao escrever estilos com formas semelhantes, mas 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; }
- Como
maps
será tratado como um arraylists
,@each
também podemap
ser utilizado :
@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
Circulação, eu entendo.
$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 mistos ( Mixin Directives
)
mixin
Usado para definir estilos reutilizáveis.
4.1 Definindo Instruções Mistas @minin
( Defining a Mixin: @mixin
)
Depois @mixin
de adicionar o nome e o estilo, você pode definir a instrução mista. Observe que você precisa incluir seletores e atributos e também pode usar &
para se referir ao seletor pai.
// 定义名为 clearfix 的混合指令
@mixin clearfix {
display: inline-block;
// & 指代父选择器。注意,这个混合指令里虽然它没有父选择器,
// 但是混合指令使用的地方,可以产生父选择器&:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;}
// 这里的 & 同理* html & { height: 1px }
}
4.2 Instruções mistas de referência @include
( Including a Mixin: @include
)
- Use
@include MixinName
para citar uma diretiva mixin:
.page-title {
// 引用混合指令,将 clearfix 中的规则混入到 .page-title 中
@include clearfix;
padding: 4px;
margin-top: 10px;
}
- Ele também pode ser referenciado diretamente e misturado no nível mais externo, sem definir atributos e não ter seletor pai para se referir:
@mixin silly-links {
a {
color: blue;
background-color: red;}
}
@include silly-links;
//编译为
a {
color: blue;
background-color: red; }
Nas diretivas mixin que escrevemos, é melhor definir apenas seletores descendentes, para que possam ser importados com segurança em qualquer lugar do arquivo.
- Uma diretiva composta pode se referir a outras diretivas compostas:
@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
)
Os parâmetros podem ser usados para definir variáveis para o estilo de comandos mistos e atribuir valores. Ao referenciar e definir instruções mistas, a ordem dos parâmetros deve ser uma correspondência de um para um e os parâmetros podem receber valores padrão.
// $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; }
Além disso, há mais dois pontos importantes sobre os parâmetros:
- Parâmetro palavra- chave (
Keyword Arguments
): AoMixin
passar um parâmetro por referência, passe o valor precisamente especificando a palavra-chave do parâmetro (nome do parâmetro).
p { @include sexy-border($color: blue); }
h1 { @include sexy-border($color: blue, $width: 2in); }
Embora a escrita seja um pouco complicada, é fácil de ler e pode ser atribuída com precisão.
- Variável de parâmetro (
Variable Arguments
): Quando você não tem certeza de quantos parâmetros o comando misto precisa, você pode usar a variável de parâmetro no final do parâmetro...
para declarar, eSass
esses parâmetros serão tratados como uma 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;
}
Você também pode usar variáveis de parâmetro ao 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 conteúdo para o comando misto @content
( Passing Content Blocks to a Mixin
)
Ao citar Mixin
, especialmente ao citar na camada mais externa do arquivo, você pode usar @content
espaços reservados e, em seguida, @include
importar o seguinte conteúdo para @content
a posição, semelhante a modelos, slots 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);
}
Devido ao seu uso frequente Mixin
em Sass
bibliotecas de estilos. Para simplificar o uso, pode ser =
expresso @mixin
por e +
expresso por @include
.
// Sass (这里就是Sass格式的语法了,而非SCSS格式)
=apply-to-ie6-only* html
@content
+apply-to-ie6-only
#logo
background-image: url(/logo.gif)
- Conteúdo em nível de bloco e escopo variável : Ao
@content
importar o conteúdo em nível de bloco, seu escopo é associado ao contexto onde é definido, e nada tem a ver com o escopo dentro da instrução mista.
$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;
}
Observe que nem toda definição está no escopo global e também é possível que a definição esteja aninhada em um seletor e, então, o escopo seja o escopo local do seletor.
5. Instrução de função ( Function Directives
)
Sass
Permite funções personalizadas, as funções podem ser usadas em qualquer valor de atributo ou SassScript
. Nomes de funções personalizadas podem ser prefixados para evitar conflitos de nomenclatura.
$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 saída
6.1:nested
Nested ( :nested
) é sass
o formato de saída padrão de , que reflete claramente a CSS
relação HTML
entre e . Seletores e atributos ocupam uma linha separada e o recuo é sass
consistente com o do arquivo, contando com o recuo para refletir o nível de aninhamento.
// 编译后输出的CSS文件
#main {
color: #fff;
background-color: #000; }
#main p {
width: 10em; }
6.2:expanded
O formato expandido ( :expanded
) é igual ao da escrita à mão e o seletor não é recuado.
#main {
color: #fff;
background-color: #000;
}
#main p {
width: 10em;
}
6.3:compact
O formato compacto ( Compact
) ocupa menos espaço, cada CSS
regra ocupa apenas uma linha, os seletores aninhados não deixam linhas em branco e os seletores não aninhados deixam linhas em branco entre eles.
#main { color: #fff; background-color: #000; }
#main p { width: 10em; }
.huge { font-size: 10em; font-weight: bold; text-decoration: underline; }
6.4:compressed
O formato compactado ( Compressed
) não deixa linhas em branco, espaços, comentários, etc., e o volume de saída é o menor.
#main{color:#fff;background-color:#000}#main p{width:10em}.huge{font-size:10em;font-weight:bold;text-decoration:underline}
Finalmente
Organizou um conjunto de "Coleção de entrevistas de fabricantes de front-end", incluindo HTML, CSS, JavaScript, HTTP, protocolo TCP, navegador, VUE, React, estrutura de dados e algoritmo, um total de 201 perguntas de entrevista e deu uma resposta para cada pergunta Responda e analise.
Amigos necessitados, você pode clicar no cartão no final do artigo para receber este documento e compartilhá-lo gratuitamente
Parte da documentação mostra:
A extensão do artigo é limitada e o conteúdo a seguir não será exibido um por um
Amigos necessitados, você pode clicar no cartão abaixo para obtê-lo gratuitamente