Beruflich Dokumente
Kultur Dokumente
#sass
Tabla de contenido
Acerca de 1
Observaciones 2
Versiones 2
Examples 2
Preparar 2
Aplicaciones GUI 3
Variables 3
Importador 3
Anidamiento 4
Comentarios 5
Introducción 6
Examples 6
Windows 6
Linux 6
Capítulo 3: Anidamiento 7
Examples 7
Nido basico 7
Profundidad de nidificación 7
Problemas 8
Especificidad 8
Reusabilidad 8
Estados y pseudo-elementos. 11
Propiedades de anidación 12
Mientras bucle 14
en bucle 14
Cada bucle 16
Asignación múltiple 16
Introducción 18
Examples 18
Establecer entorno 18
Crear un proyecto 18
Usar brújula 18
Radio de la frontera 19
Ejemplo de Flexbox 19
Conclusión 20
Examples 21
Convertir px a (r) em 21
Sintaxis 22
Parámetros 22
Observaciones 22
Examples 22
El encadenamiento se extiende 23
Opcional Extiende 24
Placeholders 24
Extendiendo al padre 25
Capítulo 8: Funciones 26
Sintaxis 26
Examples 26
Funciones básicas 26
Capítulo 9: Instalación 27
Observaciones 27
Examples 27
Mac 27
Linux 27
Windows 27
Examples 28
Operador de Asignación 28
Operadores aritméticos 28
Operadores de comparación 29
Sintaxis 30
Examples 30
Incumplimientos sensuales 31
Argumentos opcionales 32
directiva @content 32
Examples 34
Importador 34
Ejemplo 34
Principales beneficios 35
Parciales 35
Ejemplo 35
Examples 38
Principales diferencias 38
Sintaxis 38
SCSS: 38
Mixins 39
Definiendo un mixin 39
Mapas 39
Comentarios 40
Comentario multilínea 40
Sintaxis 44
Examples 44
SCSS 44
Alcance variable 45
Interpolación 46
Variables en SCSS 46
Creditos 48
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: sass
It is an unofficial and free sass ebook created for educational purposes. All the content is extracted
from Stack Overflow Documentation, which is written by many hardworking individuals at Stack
Overflow. It is neither affiliated with Stack Overflow nor official sass.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to info@zzzprojects.com
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con sass
Observaciones
Esta sección proporciona una descripción general de qué es sass y por qué un desarrollador
puede querer usarlo.
También debe mencionar cualquier tema grande dentro de sass, y vincular a los temas
relacionados. Dado que la Documentación para sass es nueva, es posible que deba crear
versiones iniciales de esos temas relacionados.
• Característica de herencia
• Podemos usar sentencias condicionales.
• Más funcional que el CSS tradicional.
• Manera eficiente y clara de escribir CSS
Versiones
3.4.0 2014-08-18
3.3.0 2014-03-07
3.2.0 2012-08-10
Examples
Preparar
Cuando se trata de usar SASS, hay varias formas de configurar su área de trabajo. Algunas
personas prefieren usar herramientas de línea de comandos (probablemente personas de Linux)
y otras prefieren usar aplicaciones GUI. Voy a cubrir ambos.
https://riptutorial.com/es/home 2
Una vez que hayas instalado Ruby, debes instalar SASS (en algunos casos, puede que no sea
necesario sudo ):
Aplicaciones GUI
Si bien hay varias aplicaciones GUI que puedes usar, te recomiendo la aplicación Scout .
Construye y comprime automáticamente sus archivos CSS, guardando archivos y es compatible
con macOS, Windows y Linux.
Variables
Si tiene un valor que usa con frecuencia, puede almacenarlo en una variable. Podría usar esto
para definir esquemas de color, por ejemplo. Solo tendría que definir su esquema una vez y luego
podría usarlo a lo largo de sus hojas de estilo.
Para definir una variable, debe prefijar su nombre con el símbolo $. (Como lo harías en PHP).
Puede almacenar cualquier valor de propiedad CSS válido dentro de una variable. Tales como
colores, fuentes o URLs.
Ejemplo 1:
$foreground: #FAFAFA;
$background: rgb(0, 0, 0);
body {
color: $foreground;
background-color: $background;
}
p {
color: rgb(25, 25, 20);
background-color: $background;
}
Importador
NOTA: Es posible que observe que las variables hoja de estilo tienen un guión bajo
('_') antes de su nombre. Esto se debe a que es parcial, lo que significa que se va a
importar.
https://riptutorial.com/es/home 3
parciales de Sass que contienen pequeños fragmentos de CSS que puedes incluir en
otros archivos de Sass. Esta es una excelente manera de modularizar su CSS y
ayudar a mantener las cosas más fáciles de mantener. [...] El subrayado le permite a
Sass saber que el archivo es solo un archivo parcial y que no se debe generar en un
archivo CSS. Los parciales de Sass se utilizan con la directiva @import.
Las variables SCSS son geniales para este escenario. Supongamos que su _variables.scss ve
así:
$primary-color: #333;
Puede importarlo con @import y luego el nombre de la hoja de estilo entre comillas. Su hoja de
estilo de diseño ahora puede verse así (tome nota de que no hay un guión bajo o una extensión
de archivo en la importación):
@import 'variables';
body {
color: $primary-color;
}
body {
color: #333;
}
Anidamiento
layout.scss
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
li {
margin: 0 5px;
}
}
}
salida
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav ul li {
margin: 0 5px;
}
https://riptutorial.com/es/home 4
Comentarios
• Comentarios en línea: estos solo abarcan una línea y generalmente se usan para describir
una variable o bloque. La sintaxis es la siguiente: // Your comment here (usted lo añade con
una doble barra ( // ) y el analizador ignora el resto de la línea).
/*
This is a comment
It's a multiline comment
Also a hiaku
*/
https://riptutorial.com/es/home 5
Capítulo 2: Actualizar la versión de Sass
Introducción
Actualiza tu versión de Sass usando gem / ruby
Examples
Windows
Linux
https://riptutorial.com/es/home 6
Capítulo 3: Anidamiento
Examples
Nido basico
Cada vez que declara una nueva regla dentro de otra regla, se denomina anidar. Con el
anidamiento básico, como se muestra a continuación, el selector anidado se compilará como un
nuevo selector de CSS con todos sus padres precedidos, separados por un espacio.
// SCSS
.parent {
margin: 1rem;
.child {
float: left;
}
}
// CSS output
.parent {
margin: 1rem;
}
.parent .child {
float: left;
}
Profundidad de nidificación
La anidación es una característica muy poderosa, pero debe usarse con precaución. Puede
suceder con bastante facilidad y rapidez, que empiece a anidar y continúe incluyendo a todos los
niños en un nido, de un nido, de un nido. Déjame demostrar:
// SCSS
header {
// [css-rules]
.holder {
// [css-rules]
.dropdown-list {
// [css-rules]
ul {
// [css-rules]
li {
margin: 1rem 0 0 1rem;
}
}
}
}
https://riptutorial.com/es/home 7
}
Problemas
Especificidad
El li del ejemplo anterior tiene un margin establecido. Digamos que queremos anular esto más
adelante en una consulta de medios.
// will work
header .holder .dropdown-list ul li {
margin: 0;
}
}
Por lo tanto, al anidar demasiado profundamente, tendrá que anidar de nuevo cada vez que
desee sobrescribir un determinado valor. Peor aún, aquí es a menudo donde la regla es
!important de usar.
Debería escribir su SCSS de una buena manera que estas soluciones no son necesarias en
primer lugar. !important Usar !important en un tema tan menor ya te llevará por un agujero de
conejo!
Reusabilidad
Esto es bastante similar al problema de especificidad, pero vale la pena señalarlo por separado.
Si diseña algo como un botón o incluso un menú desplegable, es posible que desee reutilizar
esos estilos en otro lugar de su página.
Al anidar demasiado profundamente, sus estilos solo están vinculados a los elementos que se
https://riptutorial.com/es/home 8
encuentran dentro del elemento más externo (el elemento en la parte superior de su SCSS). Esto
te lleva a copiar estilos y pegarlos de nuevo en otro lugar. Posiblemente en otra regla anidada.
Sus hojas de estilo serán cada vez más grandes y más difíciles de mantener.
El agrupamiento probablemente se usa con más frecuencia para crear selectores más
específicos, pero también se puede usar simplemente para la organización de códigos. Usando la
directiva @at-root , puede 'saltar' desde donde la anida en su Sass, devolviéndolo al nivel
superior. Hacer esto le permite mantener los estilos agrupados sin crear más especificidad de la
que necesita.
.item {
color: #333;
@at-root {
.item-wrapper {
color: #666;
img {
width: 100%;
}
}
}
.item-child {
background-color: #555;
}
}
.item {
color: #333;
}
.item-wrapper {
color: #666;
}
.item-wrapper img {
width: 100%;
}
.item .item-child {
background-color: #555;
https://riptutorial.com/es/home 9
}
Al hacer esto, todos nuestros estilos relacionados con la clase .item están juntos en el SCSS,
pero no necesariamente necesitamos esa clase en cada selector.
Excluyendo contextos
Por defecto, las declaraciones dentro de @at-root aparecerán en cualquier contexto. Esto significa
que las reglas dentro de un bloque @media , por ejemplo, permanecerán allí.
@media print {
.item-wrapper {
@at-root {
.item {
background: white;
}
}
}
}
// Will compile to
@media print {
.item {
background: white;
}
}
Este no es siempre el comportamiento deseado, por lo que puede excluir el contexto de los
medios, pasando los media a la opción without de la directiva @at-root .
El agrupamiento es ideal para mantener juntos los selectores relacionados para facilitar que los
futuros desarrolladores entiendan su código. El selector principal, representado por un signo ("&")
puede ayudar a hacerlo en situaciones más complejas. Hay varias formas en que se puede
utilizar.
Cree un nuevo selector que requiera tanto el selector principal como otro en el mismo elemento
colocando el nuevo selector directamente después de un selector principal.
// SCSS
.parent {
&.skin {
background: pink;
}
}
https://riptutorial.com/es/home 10
// CSS output
.parent.skin {
background: pink;
}
Haga que el padre aparezca después de un selector anidado en el CSS compilado colocando el
selector padre después del selector anidado.
// SCSS
.parent {
.wrapper & {
border: 1px solid black;
}
}
// CSS output
.wrapper .parent {
border: 1px solid black;
}
Estados y pseudo-elementos.
Además de usar el agrupamiento para clases e hijos, el agrupamiento con el selector principal
también se usa comúnmente para combinar los estados de :active :hover y :focus para enlaces.
// SCSS
a {
color: blue;
&:active,
&:focus {
color: red;
}
&:visited {
color: purple;
}
}
// CSS output
a {
color: blue;
}
a:active,
a:focus {
color: red;
}
a:visited {
color: purple;
}
https://riptutorial.com/es/home 11
De forma similar, puede diseñar pseudo-elementos anidando con el selector principal.
// SCSS
.parent {
&::after {
display: table;
clear: both;
content: '';
}
&::only-child {
font-weight: bold;
}
}
// CSS output
.parent::after {
display: table;
clear: both;
content: '';
}
.parent::only-child {
font-weight: bold;
}
Propiedades de anidación
//SCSS
.borders {
border: 2px dashed blue;
border: {
left: 1px solid black;
right: 1px solid red;
}
}
// CSS output
.borders {
border: 2px dashed blue;
border-left: 1px solid black;
border-right: 1px solid red;
}
Esto nos ahorra tener que escribir el border-right y el border-left , sin embargo, todavía estamos
escribiendo código repetitivo con las líneas 1px solid black y 1px solid red . Podemos escribir aún
https://riptutorial.com/es/home 12
menos CSS repetitivo con el siguiente:
// SCSS
.borders {
border: 2px dashed blue {
left: 1px solid black;
right: {
color: red;
}
}
}
// CSS output
.borders {
border: 2px dashed blue;
border-left: 1px solid black;
border-right-color: red;
}
https://riptutorial.com/es/home 13
Capítulo 4: Bucles y Conditones
Examples
Mientras bucle
La directiva @while se @while sobre un bloque de código hasta que la condición especificada se
vuelva falsa. En el siguiente ejemplo, este bucle se ejecutará hasta que $font-size <= 18 aumente
el valor de $font-size en 2.
$font-size: 12;
$font-size: $font-size + 2;
}
.font-size-12 {
font-size: 12px;
}
.font-size-14 {
font-size: 14px;
}
.font-size-16 {
font-size: 16px;
}
.font-size-18 {
font-size: 18px;
}
en bucle
La directiva @for permite recorrer algunos códigos para una cantidad determinada de iteraciones y
tiene dos formas:
La diferencia en las dos formas es el a través y el a ; la palabra clave a través incluirá la <end> en
el bucle de dónde no; usar a través de es equivalente a usar >= o <= en otros idiomas, como C ++,
JavaScript o PHP.
Notas
https://riptutorial.com/es/home 14
• Tanto <start> como <end> deben ser enteros o funciones que devuelvan enteros.
• Cuando <start> es mayor que <end> el contador disminuirá en lugar de incrementarse.
Ejemplo de SCSS
// CSS output
.foo-1 { width: 10px; }
.foo-2 { width: 20px; }
.foo-3 { width: 30px; }
La directiva de control @if evalúa una expresión dada y si devuelve algo que no sea false ,
procesa su bloque de estilos.
Ejemplo de Sass
=test-mixin
@if $test-variable
display: block
@else
display: none
.test-selector
+test-mixin
Ejemplo de SCSS
@mixin test-mixin() {
@if $test-variable {
display: block;
} @else {
display: none;
}
}
.test-selector {
@include test-mixin();
}
.test-selector {
display: block;
}
https://riptutorial.com/es/home 15
Cada bucle
La directiva @each le permite iterar a través de cualquier lista o mapa. Toma la forma de @each
$var or <list or map> {} donde $var puede ser cualquier nombre de variable y <list or map>
puede ser cualquier cosa que devuelva una lista o mapa.
En el siguiente ejemplo, el bucle recorrerá la lista de $authors asignando cada elemento a $author
, procesará su bloque de estilos utilizando ese valor de $author y continuará con el siguiente
elemento de la lista.
Ejemplo de SCSS
Salida CSS
.photo-adam {
background: image-url("avatars/adam.png") no-repeat;
}
.photo-steve {
background: image-url("avatars/steve.png") no-repeat;
}
.photo-john {
background: image-url("avatars/john.png") no-repeat;
}
Asignación múltiple
La asignación múltiple le permite acceder fácilmente a todas las variables declarando múltiples
variables en la directiva @each .
Listas anidadas
Para tener un acceso fácil a todos los elementos anidados, puede declarar variables separadas
para que coincidan con cada elemento anidado. Asegúrese de tener la cantidad correcta de
variables y elementos anidados. En el siguiente ejemplo, cada bucle está iterando a través de una
lista de tres elementos, cada uno de los cuales contiene tres elementos anidados. Tener la
cantidad incorrecta de variables declaradas dará lugar a un error del compilador.
https://riptutorial.com/es/home 16
}
}
Mapas
La asignación múltiple también funciona para Mapas, pero está limitada a solo dos variables, una
variable para acceder a la clave y una variable para acceder al valor. Los nombres $key y $value
son arbitrarios en el siguiente ejemplo:
En el siguiente ejemplo, el valor en map $color-array se trata como una lista de pares.
Entrada SCSS
$color-array:(
black: #4e4e4e,
blue: #0099cc,
green: #2ebc78
);
@each $color-name, $color-value in $color-array {
.bg-#{$color-name} {
background: $color-value;
}
}
Salida CSS
.bg-black {
background: #4e4e4e;
}
.bg-blue {
background: #0099cc;
}
.bg-green {
background: #2ebc78;
}
https://riptutorial.com/es/home 17
Capítulo 5: Compass CSS3 Mixins
Introducción
Guía de introducción utilizando Sass exentsion Compass. Compass es muy útil cuando se trata
de CSS3, ya que proporciona combinaciones para escribir 1 línea con el fin de admitir todos los
navegadores que utilizan las características de CSS3. También es genial incluir imágenes de
sprites.
Examples
Establecer entorno
Crear un proyecto
Esto inicializará un proyecto de brújula. Se agregará una carpeta llamada. La carpeta se verá
como si tuviera la siguiente estructura:
Usar brújula
compass watch
https://riptutorial.com/es/home 18
Esto compilará tus archivos sass cada vez que los cambies. La ruta de la carpeta sass se puede
cambiar dentro de config.rb
Puede encontrar una referencia completa de qué componentes CSS3 son compatibles en esta
página
Para utilizar CSS3 en su proyecto, Compass proporciona combinaciones para soportar las
características de CSS3 en cada navegador. En la parte superior de su archivo Sass / Scss, debe
especificar que desea utilizar una brújula
@import "compass/css3";
Radio de la frontera
Incluya radio de borde con brújula en su archivo sass:
div {
@include border-radius(4px);
}
Salida CSS
div {
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
Como puedes ver puedes usar el nombre normal de CSS. Simplemente ponga @include delante
de él y use () para establecer su valor.
Ejemplo de Flexbox
.row {
@include display-flex;
@include flex-direction(row);
}
Salida CSS
.row {
display: -webkit-flex;
display: flex;
-webkit-flex-direction: row;
flex-direction: row;
https://riptutorial.com/es/home 19
}
Conclusión
Estos son solo dos ejemplos. Compass proporciona mucho más mixins CSS3. Es muy útil utilizar
Compass y no tiene que preocuparse por haber olvidado la definición de un componente CSS3
para un navegador específico. Si el navegador admite la función CSS3, la brújula lo definirá por
usted.
https://riptutorial.com/es/home 20
Capítulo 6: Convertir unidades
Examples
Convertir px a (r) em
Por ejemplo:
$font-size: 14;
body {
font-size: #{$font-size}px;
font-size: rem-calc(14px); // returns 1rem
// font-size: rem-calc(28); // returns 2rem
}
https://riptutorial.com/es/home 21
Capítulo 7: Extender / Herencia
Sintaxis
• @extend .<className>
• @extend .<className>, .<className>
• @extend .<className> !optional
• @extend .<className>, .<className> !optional
Parámetros
Parámetro Detalles
Observaciones
La regla @extend Sass le permite compartir propiedades de CSS en varias clases, manteniendo el
código DRY y más fácil de leer.
Examples
Extender una clase
.message
color: white
.message-important
@extend .message
background-color: red
Esto tomará todos los estilos de .message y los agregará a .message-important . Genera el siguiente
CSS:
.message, .message-important {
color: white;
}
.message-important {
background-color: red;
}
.message
color: white
https://riptutorial.com/es/home 22
.important
background-color: red
.message-important
@extend .message, .important
En el código anterior, @extend se usa en una línea para agregar el código de varias clases a
.message-important , sin embargo, es posible usar una extensión por línea como esta:
.message-important
@extend .message
@extend .important
.message, .message-important {
color: white;
}
.important, .message-important {
background-color: red;
}
El encadenamiento se extiende
.message
color: white
background: black
.message-important
@extend .message
font-weight: bold
.message-error
@extend .message-important
font-style: italic
Este código hace que .message-error extienda desde .message-important , lo que significa que
contendrá código de .message-important y .message , ya que .method-important extiende desde
.message . Esto resulta en el siguiente CSS:
.message-important, .message-error {
font-weight: bold;
}
.message-error {
font-style: italic;
}
https://riptutorial.com/es/home 23
Descargo de responsabilidad: asegúrese de que la (s) clase (s) de la cual se está
extendiendo se produzcan solo una vez en el código; de lo contrario, Sass puede generar
algunos CSS confusos y complicados.
Opcional Extiende
A veces, es posible que desee que un @extend sea opcional y no requiera que exista la clase
especificada en su código.
.message-important
@extend .message !optional
background: red
.message-important {
background: red;
}
Descargo de responsabilidad: Esto es útil durante el desarrollo cuando es posible que aún
no tenga todo su código escrito y no desee errores, pero probablemente debería eliminarse
en la producción porque podría dar lugar a resultados inesperados.
Placeholders
A veces, creará clases que no se utilizarán por derecho propio, sino que solo se extenderán
dentro de otros conjuntos de reglas. Esto significa que el archivo CSS compilado será más grande
de lo que debe ser. Los selectores de marcadores de posición resuelven este problema.
Los selectores de marcador de posición son similares a los selectores de clase, pero utilizan el
carácter de porcentaje (%) en lugar del (.) Utilizado para las clases. No aparecerán en el CSS
compilado.
%button {
border: 5px solid black;
border-radius: 5px;
margin: 0;
}
.error-button {
@extend %button;
background-color: #FF0000;
}
.success-button {
@extend %button;
background-color: #00FF00;
}
https://riptutorial.com/es/home 24
.error-button, .success-button {
border: 5px solid black;
border-radius: 5px;
margin: 0;
}
.error-button {
background-color: #FF0000;
}
.success-button {
background-color: #00FF00;
}
Extendiendo al padre
.parent {
style: value;
@extend &;
}
Resultará en un error, indicando que el padre no puede ser extendido. Esto tiene sentido, pero
hay una solución. Simplemente almacene el selector padre en una variable.
.parent {
$parent: &;
style: value;
@extend #{&};
}
No hay ningún beneficio en hacer esto en el ejemplo anterior, sin embargo, esto le da el poder de
envolver los estilos principales dentro de una mezcla incluida.
https://riptutorial.com/es/home 25
Capítulo 8: Funciones
Sintaxis
• @función nombre-función (parámetro) {/ * cuerpo de la función * /}
Examples
Funciones básicas
Una función es similar en apariencia a una mezcla, pero no agrega ningún estilo, solo devuelve
un valor. Deben usarse funciones para evitar que la lógica se repita en sus estilos.
Sass tiene algunas funciones integradas que se llaman mediante la sintaxis de la función CSS
estándar.
h1 {
background: hsl(0, 25%, 50%);
}
@function multiply(x, y) {
@return x * y;
}
En el código anterior, @function declara una función, y @return significa el valor de retorno.
https://riptutorial.com/es/home 26
Capítulo 9: Instalación
Observaciones
Esto cubre solo a Ruby, que es el compilador principal de SASS para muchos sistemas pero
existen otras opciones. Uno muy común para cualquier desarrollador de nodos sería el sass de
nodos, que podría ser más fácil, y órdenes de magnitud más rápido, para muchos usuarios.
Examples
Mac
1. Abrir CMD
2. Ejecutar gem install sass
3. Si recibe un mensaje de error, intente sudo gem install sass
4. Compruébalo funciona usando sass -v
Linux
Ruby deberá instalarse primero antes de la instalación. Puedes instalar Ruby a través del
administrador de paquetes apt, rbenv o rvm.
Entonces corre
Windows
La forma más rápida de obtener Ruby en su computadora con Windows es usar Ruby Installer .
Es un instalador de un solo clic que configurará todo de manera súper rápida. Después de instalar
Ruby, siga las instrucciones a continuación para instalar Sass:
1. Abrir CMD
2. Ejecutar gem install sass
3. Si recibe un mensaje de error, intente sudo gem install sass
4. Compruébalo funciona usando sass -v
https://riptutorial.com/es/home 27
Capítulo 10: Los operadores
Examples
Operador de Asignación
Sass utiliza los dos puntos ( : operador para asignar valores a las variables).
Ejemplo
$foreColor: red;
p {
color: $foreColor;
}
Operadores aritméticos
Operador Descripción
+ Adición
- Sustracción
* Multiplicación
/ División
% Recordatorio
Ejemplos
p {
font-size: 16px + 4px; // 20px
}
h3 {
width: 2px * 5 + 12px; // 22px
}
h2 {
width: 8px + (12px / 2) * 3; // 26px
}
https://riptutorial.com/es/home 28
Operadores de comparación
Sass es compatible con todos los operadores de comparación habituales: < , > , == != , <= , >= .
Ejemplos
$padding: 10px;
$padding <= 8px; // Returns false
https://riptutorial.com/es/home 29
Capítulo 11: Mixins
Sintaxis
• @mixin mixin-name ($argument1, $argument, ...){ ... }
Examples
Crea y utiliza un mixin.
Puede especificar una lista de argumentos dentro de un paréntesis después del nombre de la
mezcla. Recuerda comenzar tus variables con $ y separarlas con comas.
Los estilos de la mezcla ahora se usarán en el footer y el header , con el valor #ccc para la variable
$color y #ddd para la variable $borderColor .
Hay algunos casos en mixins donde puede haber argumentos simples o múltiples mientras se
usa. Tomemos un caso de border-radius de border-radius donde puede haber un solo argumento
como border-radius:4px; o múltiples argumentos como border-radius:4px 3px 2px 1px; .
Y utilizado como
https://riptutorial.com/es/home 30
.foo{
@include radius(2px, 3px, 5px, 6px)
}
El ejemplo anterior es complejo (codificar, leer y mantener) y si no puede pasar solo uno o dos
valores, generará un error y, para usar uno, dos o sus valores, debe definir otros tres mixins.
Al utilizar la variable Argumento , no tiene que preocuparse por la cantidad de argumentos que
puede pasar. Los argumentos variables se pueden declarar definiendo un nombre de variable
seguido de tres puntos (...) . A continuación se muestra un ejemplo de un argumento variable.
@mixin radius($radius...)
{
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
-o-border-radius: $radius;
border-radius: $radius;
}
Y utilizado como
.foo{
@include radius(2px 3px 5px 6px)
}
.foo2{
@include radius(2px 3px)
}
.foo3{
@include radius(2px)
}
El ejemplo anterior es mucho más simple (para codificar, mantener y leer), no debe preocuparse
por la cantidad de argumentos que están por venir, ya sea uno o más de uno .
Si hay más de un argumento y, en cualquier caso, desea acceder al segundo argumento, puede
hacerlo escribiendo el nombre de propertyname : nth(variable_name, 2) .
Incumplimientos sensuales
SASS le ofrece la posibilidad de omitir cualquier parámetro, excepto los que desea sobrescribir,
por supuesto. Tomemos nuevamente el ejemplo de la default-box :
https://riptutorial.com/es/home 31
footer, header{ @include default-box ($borderColor: #ccc); }
Argumentos opcionales
Los argumentos opcionales de SASS le permiten usar un parámetro solo si especifica su valor;
De lo contrario, será ignorado. Tomemos un ejemplo de la siguiente mezcla:
.default {
@include galerie-thumbnail;
}
.with-width {
@include galerie-thumbnail($img-width: 12em);
}
.without-height {
@include galerie-thumbnail($img-height: null);
}
.default {
height: 14em;
outline: 1px solid lightgray;
outline-offset: 5px;
}
.with-width {
width: 12em;
height: 14em;
outline: 1px solid lightgray;
outline-offset: 5px;
}
.without-height {
outline: 1px solid lightgray;
outline-offset: 5px;
}
SASS no genera propiedades con valor null como su valor, lo cual es muy útil cuando
necesitamos incluir un argumento opcional en nuestra llamada o no.
directiva @content
Los mixins pueden pasar un bloque de código compatible con SASS, que luego estará disponible
https://riptutorial.com/es/home 32
dentro del mixin como la directiva @content .
@mixin small-screen {
@media screen and (min-width: 800px;) {
@content;
}
}
@include small-screen {
.container {
width: 600px;
}
}
https://riptutorial.com/es/home 33
Capítulo 12: Partiales e Importaciones
Examples
Importador
El uso de @import permite dividir sus archivos en varios archivos más pequeños. Esto tiene
sentido, ya que puede mantener una mejor estructura para sus hojas de estilo y evitar archivos
muy grandes.
Ejemplo
- application.scss
- header.scss
- content
|-- article.scss
'-- list.scss
- footer.scss
Su application.scss hoja de estilo principal.scss puede importar todos los archivos, así como
definir sus propios estilos.
// application.scss
// Import files:
@import 'header.scss';
@import 'content/article.scss';
@import 'content/list.scss';
@import 'footer.scss';
Tenga en cuenta que también puede omitir la extensión .scss para que pueda escribir @import
'header'; En lugar de @import 'header.scss' .
Esto lleva a application.scss tener todos los .scss importados incluidos en el archivo compilado
que sirve al cliente (navegador). En este caso, su archivo compilado sería application.css que
incluirá en su html.
<html>
<head>
<link rel="stylesheet" type="text/css" href="/application.css?v=18c9ed25ea60">
</head>
<body>
...
</body>
https://riptutorial.com/es/home 34
</html>
Si bien está trabajando con varios archivos, solo sirve un archivo, eliminando la necesidad de
múltiples solicitudes (una para cada archivo) y acelerando el tiempo de carga para sus visitantes.
Principales beneficios
• Mejor estructura para desarrollo utilizando carpeta y múltiples archivos.
• Servir solo un archivo al cliente (navegador)
Parciales
Puede crear archivos parciales que contienen fragmentos más pequeños de sus hojas de estilo.
Esto le permite modularizar su CSS y permite una mejor estructura de sus hojas de estilo. Un
parcial es un archivo Sass nombrado con un subrayado _partial.scss , es decir: _partial.scss . El
subrayado le permite a Sass saber que el archivo específico es parcial y no se generará en un
archivo CSS.
Los parciales de Sass deben utilizarse con la directiva @import . Cuando use @import , puede omitir
el guión bajo.
Ejemplo
Suponiendo que tienes una estructura de archivos con parciales como este
- main.scss
- _variables.scss
- content
|-- _buttons.scss
'-- _otherelements.scss
Puede incluir esos parciales en su archivo main.scss la siguiente manera (en este ejemplo, se
omiten los guiones bajos y las extensiones de archivo):
// main.scss - Imports:
@import 'variables';
@import 'content/buttons';
@import 'content/otherelements';
https://riptutorial.com/es/home 35
Capítulo 13: Scss utiles mixins
Examples
Flechas de puntero css3 puro con borde de contorno
$ colores : primero es un color de borde, segundo, es un color de fondo (tal vez sea mejor
heredar el color de fondo de un padre)
%pointer-core {
content: " ";
position: absolute;
border: solid transparent;
z-index: 9999;
}
@mixin pointer($direction, $margin: 10px, $colors: (#999, $gray), $arrowSide: 8px, $isInset:
false){
$opposites: (
top: bottom,
bottom: top,
left: right,
right: left
);
$margin-direction: (
top: left,
bottom: left,
left: top,
right: top
);
&:before {
@extend %pointer-core;
border-width: $arrowSide;
@if $isInset {
border-#{$direction}-color: nth($colors, 1);
#{$direction}: -1px;
}
https://riptutorial.com/es/home 36
@else
{
border-#{map-get($opposites, $direction)}-color: nth($colors, 1);
#{map-get($opposites, $direction)}: 100%;
}
#{map-get($margin-direction, $direction)}: 0;
&:after {
@extend %pointer-core;
border-width: $arrowSide - 1;
@if $isInset {
border-#{$direction}-color: nth($colors, 2);
#{$direction}: -1px;
}
@else
{
border-#{map-get($opposites, $direction)}-color: nth($colors, 2);
#{map-get($opposites, $direction)}: 100%;
}
#{map-get($margin-direction, $direction)}: 0;
$color-purple-bg: #AF6EC4;
$color-purple-border: #5D0C66;
$color-yellow-bg: #E8CB48;
$color-yellow-border: #757526;
.tooltip {
position: relative;
&--arrow-down {
@include pointer('bottom', 30px, ($color-purple-border, $color-purple-bg), 15px);
}
&--arrow-right {
@include pointer('right', 60px, ($color-yellow-border, $color-yellow-bg), 15px);
}
}
https://riptutorial.com/es/home 37
Capítulo 14: SCSS vs Sass
Examples
Principales diferencias
Aunque la gente suele decir Sass como el nombre de este preprocesador CSS, a menudo se
refieren a la sintaxis SCSS . Sass usa la extensión de archivo .sass , mientras que SCSS - Sass usa la
extensión .scss . Ambos se conocen como "Sass".
Hablando en general, la sintaxis SCSS usa más comúnmente. SCSS parece a CSS normal con más
capacidades, mientras que Sass ve bastante diferente al CSS normal. Ambas sintaxis tienen las
mismas habilidades.
Sintaxis
Las principales diferencias son que Sass no usa llaves o punto y coma, donde SCSS hace. Sass
también es sensible al espacio en blanco, lo que significa que tiene que sangrar correctamente.
En SCSS , puede dar formato y sangrar sus reglas a su gusto.
SCSS:
// nesting in SCSS
.parent {
margin-top: 1rem;
.child {
float: left;
background: blue;
}
}
.child
float: left
background: blue
https://riptutorial.com/es/home 38
.parent {
margin-top: 1rem;
}
.parent .child {
float: left;
background: blue;
}
Mixins
Sass tiende a ser la sintaxis más "perezosa". Nada ilustra esto mejor que la forma en que define e
incluye los mixins.
Definiendo un mixin
= es cómo se define una mezcla en Sass , @mixin en SCSS .
// SCSS
@mixin size($x: 10rem, $y: 20rem) {
width: $x;
height: $y;
}
// Sass
=size($x: 10rem, $y: 20rem)
width: $x
height: $y
// SCSS
.element {
@include size(20rem);
}
// Sass
.element
+size(20rem)
Mapas
Cuando se trata de mapas, usualmente SCSS es la sintaxis más fácil. Debido a que Sass está
basado en sangría, sus mapas deben guardarse en una línea.
https://riptutorial.com/es/home 39
rgba(255, 255, 255, .8), white-800: rgba(255, 255, 255, .9), white-900: rgba(255, 255, 255, 1
)
Debido a que puede formatear su código en varias líneas con SCSS , puede formatear sus mapas
para que sean más legibles.
Comentarios
Los comentarios en Sass vs. Scss son en gran medida similares, excepto cuando se trata de
líneas múltiples. SASS multilíneas SASS son sensibles a la sangría, mientras que SCSS basa en
terminadores de comentarios.
style.sass
Comentario multilínea
estilo.scss
Iniciador: /*
Terminador: */
https://riptutorial.com/es/home 40
/* This comment takes up
* two lines.
*/
h1 {
color: red;
}
style.sass
Ahora, SASS tiene dos iniciadores, pero no los respectivos terminadores. Los comentarios de SASS
en SASS son sensibles a los niveles de sangría .
Iniciadores: // y /*
Así que ahí lo tienes! Las principales diferencias entre los comentarios en SCSS y SASS !
• SCSS sintaxis de SCSS parece más a una sintaxis de CSS pero la sintaxis de SASS es un poco
diferente de SCSS pero ambas producen exactamente el mismo código CSS .
• En SASS no estamos terminando las propiedades de estilo con punto y coma ( ; ) pero en
SCSS estamos terminando las propiedades de estilo con ( ; ).
• En SCSS usamos paranthesis {} para cerrar las propiedades de estilo pero en SASS no
usamos paranthesis .
• Indentation es muy importante en SASS . Definirá las propiedades anidadas en la class o id
del elemento.
• En scss podemos definir múltiples variables en una sola línea, pero en SASS no podemos
hacerlo.
https://riptutorial.com/es/home 41
para sintaxis de bucle
Con el lanzamiento de sass 3.3 y la versión plus, la sintaxis de condiciones de @if y else se hizo
igual. Ahora podemos usar expresiones no solo con scss sino también con sass .
sintaxis sass
Compilado para
.item-1 {
width: 2em;
}
.item-2 {
width: 4em;
}
.item-3 {
width: 6em;
}
sintaxis de scss
https://riptutorial.com/es/home 42
@for $i from 1 through 3 {
.item-#{$i} { width: 2em * $i; }
}
compilado para
.item-1 {
width: 2em;
}
.item-2 {
width: 4em;
}
.item-3 {
width: 6em;
}
https://riptutorial.com/es/home 43
Capítulo 15: Variables
Sintaxis
• $ nombre_variable : valor ;
Examples
Hablar con descaro a
Las variables se utilizan para almacenar un valor una vez que se utilizará varias veces a lo largo
de un documento Sass.
Se usan principalmente para controlar cosas como fuentes y colores, pero se pueden usar para
cualquier valor de cualquier propiedad.
body
font-family: $font-stack
color: $primary-color
SCSS
Al igual que en Sass, las variables SCSS se utilizan para almacenar un valor que se utilizará
varias veces a lo largo de un documento SCSS.
Las variables se usan principalmente para almacenar valores de propiedad de uso frecuente
(como fuentes y colores), pero se pueden usar para cualquier valor de cualquier propiedad.
body {
font-family: $font-stack;
color: $primary-color;
}
Puede usar !default cuando declare una variable si desea asignar un nuevo valor a esta variable
solo si aún no se ha asignado:
$primary-color: blue;
$primary-color: red !default; // $primary-color is still "blue"
https://riptutorial.com/es/home 44
$primary-color: green; // And now it's green.
Alcance variable
$blue: dodgerblue;
.main {
background: $blue;
p {
background: #ffffff;
color: $blue;
}
}
.header {
color: $blue;
}
Si declara una variable dentro de un bloque, solo se puede usar en ese bloque.
.main {
$blue: dodgerblue;
background: $blue;
p {
background: #ffffff;
color: $blue;
}
}
.header {
color: $blue; // throws a variable not defined error in SASS compiler
}
Las variables declaradas a nivel de hoja (fuera de un bloque) también se pueden usar en otras
hojas si se importan .
$color: blue;
@at-root {
$color: red;
.a {
color: $color;
https://riptutorial.com/es/home 45
}
.b {
color: $color;
}
}
.c {
color: $color;
}
se compila a:
.a {
color: red;
}
.b {
color: red;
}
.c {
color: blue;
}
Interpolación
$className: widget;
$content: 'a widget';
$prop: content;
.#{$className}-class {
#{content}: 'This is #{$content}';
}
// Compiles to
.widget-class {
content: "This is a widget";
}
No puede, sin embargo, usarlo para generar dinámicamente nombres de mixins o funciones.
Variables en SCSS
En SCSS, las variables comienzan con el signo $ y se configuran como propiedades CSS.
$label-color: #eee;
#menu {
https://riptutorial.com/es/home 46
$basic-color: #eee;
color: $basic-color;
}
Si se definen fuera de los selectores anidados, entonces se pueden usar en todas partes.
$width: 5em;
#menu {
width: $width;
}
#sidebar {
width: $width;
}
También se pueden definir con la bandera !global , en cuyo caso también están disponibles en
todas partes.
#menu {
$width: 5em !global;
width: $width;
}
#sidebar {
width: $width;
}
Es importante tener en cuenta que los nombres de las variables pueden usar guiones y guiones
bajos indistintamente. Por ejemplo, si define una variable llamada $label-width , puede acceder a
ella como $label_width , y viceversa.
https://riptutorial.com/es/home 47
Creditos
S.
Capítulos Contributors
No
Actualizar la versión
2 Schlumpf
de Sass
Compass CSS3
5 Schlumpf
Mixins
Partiales e
12 Angelos Chalaris, Hudson Taylor, MMachinegun
Importaciones
https://riptutorial.com/es/home 48