No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Modularización de estilos CSS con @rules en SASS

7/20
Recursos

¿Qué son las Ad Rules en SAS?

Las Ad Rules en SAS son herramientas poderosas que nos permiten modularizar y optimizar nuestras hojas de estilos cuando trabajamos con proyectos complejos. Iniciadas con el símbolo de arroba (@), estas declaraciones cuentan con su propia sintaxis y cumplen con diferentes funciones. Su principal utilidad radica en que ayudan a mantener la compatibilidad con versiones futuras de CSS, lo que las hace imprescindibles para un desarrollo sostenible y escalable.

¿Cuáles son las principales Ad Rules en SAS?

En SAS, encontramos diversas Ad Rules cada una con características y propósitos únicos:

  • Uso de @use: Esta regla es crucial para importar módulos, estilos y funciones de otras hojas de estilos. Si bien es similar a la regla @import, @use se enfoca en módulos disponibles a diferencia de @import, que lo hace de manera global.

    @use 'variables';
    
  • @function: Permite crear funciones personalizadas, aunque SAS ya cuenta con funciones predefinidas.

    @function double($n) {
      @return $n * 2;
    }
    
  • @forward: Se usa para cargar estilos desde una URL específica y hacerlos disponibles en otra hoja de estilos.

  • @extend: Relacionada con la herencia, se utiliza para extender estilos de un selector a otro.

  • @root: Responsabilizarse de cargar estilos en la raíz del CSS.

  • Reglas de compilación: @error, @warn y @debug. Estas reglas son esenciales durante el proceso de compilación:

    • @error: Indica un error que detiene la compilación.
    • @warn: Genera advertencias para potenciales problemas en el código.
    • @debug: Ayudar a encontrar y corregir errores de forma más efectiva.
  • @include: Facilita la invocación de mixins, permitiendo reutilizar partes de código.

  • Estructuras de control: @for, @if, @each y @while. Estas pueden integrarse dentro de una función para tomar decisiones en tiempo de compilación.

¿Qué es el Nesting en SAS?

El concepto de Nesting, o anidación de selectores, es una técnica que nos permite simplificar la escritura del código CSS al permitir incluir selectores dentro de otros. Este enfoque imita la estructura de nuestro HTML, haciendo que el código sea más legible y mantenible.

Ejemplo de Nesting

Supongamos que queremos dar estilo a una barra de navegación compuesta de varios elementos anidados, como nav, ul, li, y a:

nav {
  ul {
    li {
      a {
        color: $link-color;
        text-decoration: none;
      }
    }
  }
}

En este ejemplo, los estilos de a se aplican solo a los elementos dentro de nav ul li, reflejando directamente la estructura propia del HTML.

Ventajas del Nesting

  • Hace que el código CSS se vea más limpio, ya que imita la estructura jerárquica del HTML.
  • Permite escribir menos código, eliminando la necesidad de repetir selectores complejos.
  • Mejora la organización y mantenibilidad del estilo al ser coherente con la estructura del documento web.

Mejorando un Navbar utilizando SAS

Trabajar con SAS y un entorno de desarrollo como Visual Studio Code nos proporciona varias herramientas para optimizar y personalizar nuestro diseño, como las variables, el uso de nesting y la compatibilidad con mixins y Ad Rules. Un enfoque típico para diseñar barras de navegación incluiría:

  1. Definición de variables para colores y tipografía:

    $primary-color: #ffcc00;
    $font-stack: 'Helvetica Neue', sans-serif;
    
  2. Uso de @use y @extend para modularizar estilos:

    @use 'módulo-de-estilos';
    
    .nav-item {
      @extend %base-item;
    }
    
  3. Implementación del Forwarding y Mixins:

    @forward 'estilos-compartidos' with (
      $primary-color: $mi-color-personalizado
    );
    
  4. Estilo de la barra de navegación con flexbox:

    .navbar {
      display: flex;
      justify-content: space-between;
      .nav-links {
        display: flex;
        gap: 20px;
      }
    }
    

Con estos elementos, no solo se logra un diseño funcional, sino también uno adaptado a futuras necesidades gracias a la flexibilidad y modularidad de SAS. ¡Participar en este tipo de proyectos con SAS es un paso hacia un estilo de desarrollo más eficiente y moderno en la web!

Aportes 31

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

  • @use: importa, modulos estilos y funciones de otras hojas de estilos. la diferencia con @import es que import se encarga de hacer los estilos globales.
  • @function: permite crear funciones personalizadas, sin embargo Sass cuenta con funciones ya existentes.
  • @forward: Recibe como parametro una URL y nos ayuda a cargar los estilos de nuestra hoja de estilos, es muy importante hacer uso de @use para que los modulos esten disponibles en nuestra hoja de estilos.
  • @extend: tiene que ver con el concepto de herencia.
  • @at-root: se encarga de cargar nuestros estilos en el root del css.
  • @include: nos ayuda a invocar los mixins.
  • @error, @warn @debug: sirver para cuando hay un error, una advertencia o se quiere debugear, respectivamente
  • @for, @if, @each, @while: tienen que ver con estructuras de control, se pueden usar dentro de una función

Conforme se va adentrando más a la implementación de Sass es cuando se le va viendo más su utilidad y como nos ahorra bastante tiempo.
Implemente mobile first por lo que use un media querie y a demás la pseudoclase hover.
Comparto el código por si le sirve a alguien.
.
Código:

nav{
  inline-size: 100%;
  padding-block: 2rem;
  padding-inline: 3.5rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-sizing: border-box;
  align-items: center;
  gap: 1.5rem;

  .nav-title{
    text-decoration: none;
    font-size: 1.25rem;
    color: $primary-text-color;

    &:hover{
      text-decoration: underline;
    }
  }

  .nav-list{
    padding: 0;
    margin: 0;
    list-style: none;
    display: flex;
    gap: 2rem;

    .nav-img{
      display: block;
    }
  }

  @media (min-width: 768px) {
    flex-direction: row;
    gap: 0;
  }
}

.
Resultado

Tipos de At-rules y ejemplos

.

  1. At-rules de Animaciones y Transiciones: estas at-rules permiten definir animaciones y transiciones para los elementos HTML en una página web. Ejemplos de at-rules en esta categoría incluyen @keyframes, @transition, y @animation.
    .
  2. At-rules de Media Queries: estas at-rules permiten definir estilos para diferentes tamaños de pantalla y dispositivos. Ejemplos de at-rules en esta categoría incluyen @media, @import, y @charset.
    .
  3. At-rules de Variables y Mixins: estas at-rules permiten definir variables y funciones reutilizables para estilos CSS. Ejemplos de at-rules en esta categoría incluyen @variable, @mixin, y @include.
    .
  4. At-rules de Fuentes y Tipografía: estas at-rules permiten definir estilos para fuentes y tipografía en una página web. Ejemplos de at-rules en esta categoría incluyen @font-face, @font-feature-values, y @font-size-adjust.
    .
  5. At-rules de Compatibilidad con Navegadores: estas at-rules permiten definir estilos específicos para navegadores y versiones de navegadores específicos. Ejemplos de at-rules en esta categoría incluyen @-webkit-keyframes, @-moz-document, y @supports.
    .
  6. At-rules de Grillas y Diseño: estas at-rules permiten definir estilos para diseños de grillas y disposición de elementos en una página web. Ejemplos de at-rules en esta categoría incluyen @grid, @flexbox, y @supports.
    .
  7. At-rules de Selectores: estas at-rules permiten definir estilos para selectores específicos en una página web. Ejemplos de at-rules en esta categoría incluyen @page, @namespace, y @document.
  8. At-rules de Colores: estas at-rules permiten definir estilos para colores y gradientes en una página web. Ejemplos de at-rules en esta categoría incluyen @color-profile, @counter-style, y @mask.
    .
  9. At-rules de Imágenes y Multimedia: estas at-rules permiten definir estilos para imágenes y multimedia en una página web. Ejemplos de at-rules en esta categoría incluyen @image, @media-document, y @media-rules.
    .
  10. At-rules de Estilos Generales: estas at-rules permiten definir estilos generales para la página web. Ejemplos de at-rules en esta categoría incluyen @charset, @viewport, y @scope.
    .
  11. At-rules de Interactividad: estas at-rules permiten definir estilos para la interactividad y el comportamiento de los elementos HTML en una página web. Ejemplos de at-rules en esta categoría incluyen @scroll-timeline, @pointer, y @input-placeholder.
    .
  12. At-rules de Debugging: estas at-rules permiten ayudar en la depuración de los estilos CSS. Ejemplos de at-rules en esta categoría incluyen @debug, @warn, y @error.

Yo lo hice así 😛

button {
            border: none;
            background: none;
            svg{
                width: 36px;
                height: 36px;
                path{
                    stroke: $primary-text-color;
                }
                
            }
        }

Cuando dice en el min 17:25 que está creciendo mucho este padding, es porque no puso en el selector universal * el box-sizing: border-box

No entendí la razón de copiar y pegar el svg dentro del html

    <img src="./assets/svg/profile.svg" alt="">

Cuando pone div en los 3 bottons, les paso un tip, seleccionan los 3 buttons, luego presionan ctrl + shift = p, despues escriben "wrap + enter", luego div + enter

¿Por qué se copia y pega todo el SVG en lugar de traerlo con src=""? ¿es por algún tema de semántica? Se me hace como alargar mucho el html sin necesidad.

Lo hice de otra manera. Acá comparto mi código 👇 **HTML** ```js <nav class="navbar"> </nav> ```**CSS** ```js primary-color: #FFEFE7; $secondary-color: #FFDAC6; $tertiary-color: #BABD8D; $primary-text-color: #7C6A0A; $font-stack: 'IBM Plex Sans', sans-serif; $body-font: 1.6rem; *{ box-sizing: border-box; } html{ font-size: 62.5%; } body{ margin: 0; padding: 0; background-color: $primary-color; font-family: $font-stack; font-size: $body-font; } .navbar{ width: 100%; height: 100px; display: flex; justify-content: space-between; align-items: center; color: $primary-text-color; padding: 15px; &__logo{ text-decoration: none; color: $primary-text-color; h1{ font-size: 2rem; font-weight: 500; } } &__menu{ display: flex; gap: 15px; margin: 0; &-item{ list-style: none; } &-link{ text-decoration: none; } &-icon{ color: $primary-text-color; } } } ```

Yo le trabajé así. La verdad, me encanta el anidamiento, es algo que en CSS hace que el código lo hace muy difícil de seguir.

<!-- NAVBAR -->
    <nav>
        <div class="navbar__title">
            <h1>Eco-Store</h1>
        </div>

        <div class="navbar__icons">
            <ul>
                <li class="navbar__icons-profile">
                    <a href="/">
                        <svg> 
                        </svg>
                    </a>
                </li>
                <li class="navbar__icons-whishlist">
                    <a href="/">
                        <svg >
                        </svg>
                    </a>
                </li>
                <li class="navbar__icons-cart">
                    <a href="/">
                        <svg >
                        </svg>
                    </a>
                </li>
            </ul>
        </div>
    </nav>
nav {

    width: 88%;
    min-width: 320px;
    height: 135px;

    margin: 0 auto;

    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 1;
    align-items: center;


    .navbar__title h1 {
        font-size: 3rem;
        font-weight: 400;
        line-height: 3.9rem;
        color: $color-text-primary;
    }

    .navbar__icons {
        justify-self: end;
    }

    .navbar__icons li {
        display: inline-block;
        list-style: none;
        padding-left: 20px;
    }

    .navbar__icons li svg {
        width: 38.25px;
        height: 38.25px;
        cursor: pointer;
    }

}

Nesting:

  • “Nesting” en CSS significa anidar selectores dentro de otros selectores.
  • Se utiliza para estructurar y modular el código de estilo de manera organizada.
  • Similar a organizar archivos en carpetas y subcarpetas para mantener todo en su lugar.
  • Mejora la legibilidad y mantenibilidad del código CSS.
  • Facilita la comprensión de la jerarquía y relación entre los estilos.
  • Permite evitar la repetición de código al aplicar estilos específicos a elementos anidados.
  • Una práctica útil para proyectos CSS más grandes y complejos.

Con CSS normal:

header {
  background-color: #333;
}

header h1 {
  color: white;
}

header nav {
  font-size: 16px;
}

Con nesting en SCSS:

header {
  background-color: #333;

  h1 {
    color: white;
  }

  nav {
    font-size: 16px;
  }
}

¿Qué clase me brinque que yo no tengo la carpeta con los svg? (min 5:51)

Codigo scss

$primary-color: #FFEFE7;
$secondary-color: #FFDAC6;
$tertiary-color: #BABD8D;
$primary-text-color: #7C6A0A;
$font-stack:  'IBM Plex Sans', sans-serif;;

body {
    margin:0;
    padding: 0;
    background-color: $primary-color;
    font-family: $font-stack;
}

/* */

nav {
    width: auto;
    height: 100px;
    display: flex;
    justify-content: space-between;
    color: $primary-text-color;
    padding: 15px;
    p {
        font-size: 1.5em;
        padding-left: 30px;
    }
.icons {
    display: flex;
    gap: 15px;
    button {
        border-style: none;
        background: none;
    }
}
}


main{
    background-color: $primary-color;
}

footer {
    background: #FA9500;
    width: 100%;
    height: 250px;
}



que bueno que pusieron esa sección de apuntes en los videos, aquí los mios, muy buenos tips de la profe, esa de gap no me la sabía:

17:25 - Cuando dice en el min 17:25 que está creciendo mucho este padding, es porque no puso en el selector universal * el box-sizing: border-box

13:53 - ctrl + F para buscar y remplazar

05:37 - Cuando pone div en los 3 bottons, les paso un tip, seleccionan los 3 buttons, luego presionan ctrl + shift = p, despues escriben “wrap + enter”, luego div + enter

18:17 - gap es para manejar los espacios entre el eje x y el eje (esto tal vez me puso servir hace poco)

17:20 - sigo sin entender porque no usa el figma para saber exactamente cuantos pixeles usará, en lugar de decir yo calculo que son unos 15px (min 17:20)

16:11 - space-between era lo que ocupaba hace poco y no me acordaba

A los que no les aparezca el svg en VS tienen que abrir el archivo en el bloc de notas y copiar el texto svg
¡Holis! Quiero compartir mi resultado con ustedes, de momento mi web será igual a la del curso pero irá cambiando de aspecto a medida que logre avanzar. Así para mobile de acuerdo al mockup de Figma![](https://static.platzi.com/media/user_upload/image-2c3886f0-4a00-49d5-a4b9-90d7ffa32b75.jpg) Y de esta forma para desktop: ![](https://static.platzi.com/media/user_upload/image-7828dc94-c96e-47e6-b804-760c560895bb.jpg) Subiré los cambios a Git y les dejo el repo por si se quieren guiar un poquito: <https://github.com/iamanyyeei/EcoStore-Sass-Basic>
Una lástima que no se hubiera utilizado las especificaciones definidas en el diseño de Figma de este proyecto, para iniciar desde la versión mobile. Parece que toda la maquetación que se construirá es la de la versión desktop sin utilizar los valores del diseño.
Yo creo que es mucho más fácil cambiar el stroke de los svg's desde sass, donde ya tenemos la variable (no necesitamos el codigo) y solo tenemos que hacerlo una vez, en lugar de 3 veces. ```js svg { path { stroke: $tertiary-color; stroke-width: 2px; } } ```svg {                path {                    stroke: $tertiary-color;                    stroke-width: 2px;                }            }
¿ ´Porque el svg tiene ese codigo, y esa dorma de llamarlo en el html y no se llama como una imagen cualquiera?
Me tome la molestia de realizarlo bastante diferente Primero agregue otras dos reglas generales para simplificar el css `*{    ` ` ``box-sizing: border-box;` ` ``margin: 0;` ` ``padding: 0;` `}` `html{` ` ``font-family: $font-stackl;` ` ``font-size: 62.5%;` ` ``background-color: $primary-color;` `}` luego agregue en la sección de botones unos texto ocultos para temas de lectores de pantalla e introduje los iconos como mask-image **html:** `
` ` ``<button class="profile">` ` `` ``Perfil` ` ``</button>` ` ``<button class="wishlist">` ` `` ``Lista de deseados` ` ``</button>` ` ``<button class="cart">` ` `` ``Carro de compras` ` ``</button>` `
` **scss:** `.visually-hidden:not(:focus):not(:active) {` ` ``width: 1px;` ` ``height: 1px;` ` ``position: absolute;` ` ``overflow: hidden;` ` ``white-space: nowrap;` ` ``clip: rect(0 0 0 0);` ` ``clip-path: inset(100%); ` `}` `nav{` ` ``//scss code` ` ``.icons{` ` `` ``display: flex;` ` `` ``gap: 1.5rem;` ` `` ``button{` ` `` `` ``border: none;` ` `` `` ``width: 3.6rem;` ` `` `` ``aspect-ratio: 1/1;` ` `` `` ``background-color: $primary-text-color;` ` `` `` ``mask-repeat: no-repeat;` ` `` `` ``mask-size: 100% 100%;` ` `` ``}` ` `` ``.profile{` ` `` `` ``mask-image: url("../assets/svg/profile.svg");` ` `` ``}` ` `` ``.wishlist{` ` `` `` ``mask-image: url("../assets/svg/heart.svg");` `}` `.cart{` `mask-image: url("../assets/svg/shopping-cart.svg");` `}` `}` `}`
Trabajar con SCSS ofrece numerosas ventajas, y una de las características más útiles es la capacidad de anidar selectores. Esta técnica permite organizar el código de manera más clara y estructurada, lo que facilita el mantenimiento y la comprensión del estilo. En resumen, trabajar con SCSS y aprovechar el anidamiento es una práctica altamente beneficiosa que mejora la eficiencia y la calidad del código CSS.
¿Cuáles son las respuestas a las preguntas del examen "¿Qué es un preprocesador?" y "¿Para qué sirven las at-rules?"? He seleccionado todas las respuestas y me siguen dando error, no puedo avanzar el examen por eso.
### **At Rules: CSS y nesting** Es una declaración que cumple con diferentes funciones, se inicializa con el símbolo @ y cuenta con sintaxis propia. Las at-rules dentro de Sass ayugan a mantener la compatibilidad con próximas versiones de CSS. ### Ejemplos de **At Rules** * @use: importa, modulos estilos y funciones de otras hojas de estilos. * @import es que import se encarga de hacer los estilos globales. * @function: permite crear funciones personalizadas, sin embargo Sass cuenta con funciones ya existentes. * @forward: Recibe como parametro una URL y nos ayuda a cargar los estilos de nuestra hoja de estilos, es muy importante hacer uso de @use para que los modulos esten disponibles en nuestra hoja de estilos. * @extend: tiene que ver con el concepto de herencia. * @at-root: se encarga de cargar nuestros estilos en el root del css. * @include: nos ayuda a invocar los mixins. * @error, @warn @debug: sirver para cuando hay un error, una advertencia o se quiere debugear, respectivamente * @for, @if, @each, @while: tienen que ver con estructuras de control, se pueden usar dentro de una función ### Nesting * La anidación permite tener selectores dentro de otros, lo cual nos ayuda a simplificar código. * Escribiendo los selectores en el orden que aparecen en el HTML.

- Este curso tiene bastantes errores de edición de vídeo. -

Segundo curso de Sass que tomo en platzi y tampoco me está gustando.
Demasiado relleno y poca aplicación
En esta clase se ven los At-rules pero no se ve su uso real
Que lean la definición no me ayuda a aprender cómo usarlos
Espero que algún día saquen un curso de pre procesadores bien.

El nesting en la practica es lo mejor cuando incluyes pseudo-clases ya que te permite tener una vista general de las pseudo-clases que tienes para cada selector, por ejemplo:

.btn {
    cursor: pointer;
    color: white;
    font-size: 1rem;
    transition: all 0.4s ease-in-out;

    i {
        margin-right: 8px;
    }

    &:hover {
        background-color: $primario;
        color: $secundario;
        border: 1px solid $secundario;
        transition: all 0.4s ease-in-out;
        font-weight: 800;
    }

    &:active {
        color: white;
        border: 1px solid white;
        transition: all 0.4s ease-in-out;
    }
}

El simbolo $ se refiere al selector principal y a este le añades la pseudo-clase o el pseudo-elemento que desees directamente. De esta forma, tu codigo se verá mucho más bonito y organizado. 😊🤓

Me gusta mucho SASS, el orden y lo fácil que puede ser leer el código.

El video anterior dura 18 minutos, este 19… Favor mantener el standar de 10 minutos para no hacer pesada una clase.

<div class="icons"> <button class="profile"> <svg width="36" height="36" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">

muy buena la clase pero porq menciona cosas obvias 🥺

El curso hasta aquí, me ha gustado, pero una clase de 20 min es mucho, prefiero 2 de 10 min.