Nesting

<< @import, use Variables >>

Cuando generamos un archivo CSS como el siguiente:

.content{
      border: 1px solid #ccc;
      padding: 20px;
      h2{
            font-size: 3em;
            margin: 20px 0; 
      }
      
      p{
            font-size: 1.5em;
            margin: 15px 0;
      }
}

Estamos estableciendo unas propiedades para la clase .content, y para los elementos dentro de un elemento con la clase .content que sean párrafo o h2 internos. De modo, que dentro de la indentación de la clase .content, se han establecido los estilos para los párrafos y h2 con las propiedades de clase .content.

Otra de las posibilidades que tenemos de anidamiento (nesting) es:

.btn{
    text: {
        decoration: underline;
        transform: lowercase;
    }
}

En este caso, tenemos nuestro text-decoration y text-underline para la clase .btn, del mismo modo que si hubiéramos hecho:

Otra de las características de nesting es el &, donde hace referencia al selector padre, veamos un ejemplo:

.content{
      border: 1px solid #ccc;
      padding: 20px;
      
      .callout{
            border-color: red;
      }
      
      &.callout{ 
            /* referencia a .content, es un selector compuesto: .content.callout */
            border-color: green;
      }
}

Por tanto, usar “parent selector” es muy útil en casos donde tenemos una pseudoclase y pseudoelementos como son los enlaces. Por ejemplo:

a{
      color: #999;

      &:hover{
            color: #777;
      }
      
      &:active{
            color: #888;
      }
}

Los selectores pueden ser también añadidos antes de la referencia del &. Por ejemplo:

.sidebar{
      float: right;
      width: 300px;
      
      .users & {  //El & referencia a sidebar
            width: 400px;
      }
}

Como podemos ver nesting es bastante sencillo, pero puede resultar peligroso.

.content{
      background: #ccc;
      
      .cell{
            h2{
                  a{
                        &:hover{
                              color: red;
                        }
                  }
            }
      }
}

Por tanto, como consejo, intenta limitar tu nesting en 3 o 4 niveles y considera refactorizar tu código.

<< @import, use Variables >>