Frontend Training

Basic CSS Selectors

Basic Selectors

Type
<a href="www.google.com">Google</a>a {
    color: red;
}
Class

Este texto está centrado.

<p class="align-center">Este texto está centrado.</p>.align-center {
    text-align: center;
}
ID
<div id="modal">Este es un modal.</div>#modal {
    background-color: red;
    color: white;
    padding: 40px;
}
Universal

Este tipo de selector es usado para seleccionar todos los elementos.

* {
    margin: 0;
}
Attribute
<input type="text">[type="text"] {
    background-color: blue;
    color: white;
}

Combinators

Descendant

El combinador ' ' (espacio en blanco) selecciona nodos que son hijos (no necesariamente directos) del elemento seleccionado previamente.

<div class="colors">
    <div class="red"></div>
    <div class="green"></div>
    <div class="blue"></div>
</div>.colors div {
    display: inline-block;
    height: 100px;
    width: 100px;
}

.colors .red {
    background-color: red;
}

.colors .green {
    background-color: green;
}

.colors .blue {
    background-color: blue;
}
Adjacent sibling

El combinador '+' selecciona el nodo que sigue inmediatamente al elemento seleccionado previamente.

Título

Este texto es hermano del título porque tienen el mismo padre.

Este texto es hermano del título porque tienen el mismo padre.

<h3 class="title-adjacent">Título</h3>
<p>Este texto es hermano del título porque tienen el mismo padre.</p>
<p>Este texto es hermano del título porque tienen el mismo padre.</p>.title-adjacent + p {
    background-color: red;
    color: white;
    padding: 10px;
}
General sibling

El combinador '~' selecciona los nodos que siguen inmediatamente al elemento seleccionado previamente.

Título

Este texto es hermano del título porque tienen el mismo padre.

Este texto es hermano del título porque tienen el mismo padre.

<h3 class="title-general">Título</h3>
<p>Este texto es hermano del título porque tienen el mismo padre.</p>
<p>Este texto es hermano del título porque tienen el mismo padre.</p>.title-general ~ p {
    background-color: red;
    color: white;
    padding: 10px;
}
Child

El combinador '>' selecciona los nodos hijos directos del elemento seleccionado previamente.

  • Hijo directo
    • Hijo no directo
  • Hijo directo
    • Hijo no directo
<ul class="list-children">
    <li>
        Hijo directo
        <ul>
            <li>Hijo no directo</li>
        </ul>
    </li>
    <li>
        Hijo directo
        <ul>
            <li>Hijo no directo</li>
        </ul>
    </li>
</ul>.list-children li {
    background-color: red;
    color: white;
}

.list-children > li {
    background-color: blue;
}

Pseudo-elements

::first-letter

Selecciona la primer letra de la primer línea de texto de un bloque.

Había una vez...

<p class="chapter-start">Había una vez...</p>.chapter-start::first-letter {
    font-size: 3em;
    font-style: italic;
    font-weight: bold;
}
::before y ::after

Son comunmente usados para añadir contenido estético a un elemento mediante la property content.

::before selecciona un elemento virtual que se encuentra antes del elemento seleccionado.

::after selecciona un elemento virtual que se encuentra luego del elemento seleccionado.

Este es un elemento cuyos elementos virtuales ::before y ::after fueron dados estilo.
<div class="before-after">Este es un elemento cuyos elementos virtuales ::before y ::after fueron dados estilo.</div>.before-after {
    background-color: green;
}

.before-after::before {
    content: 'Before';
    background-color: red;
}

.before-after::after {
    content: 'After';
    background-color: blue;
}
<div class="popup">Este es un popup cuyo elemento virtual ::after tiene el estilo de una flecha.</div>.popup {
    position: relative;
    background-color: #007bff;
    border-radius: 4px;
    padding: 10px;
}

.popup::after {
    content: '';
    position: absolute;
    bottom: -15px;
    left: 15px;
    color: white;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 15px 15px 0 15px;
    border-color: #007bff transparent transparent transparent;
}

Pseudo-class

:hover

Selecciona el elemento en estado hover (con el mouse posicionado por encima).

Cambio el color de fondo cuando tengo el cursor encima.
<div class="hover-over-me">Cambio el color de fondo cuando tengo el cursor encima.</div>.hover-over-me {
    border-radius: 4px;
    padding: 10px;
}

.hover-over-me:hover {
    background-color: red;
}
:first-child y :last-child

Selecciona el primer o último hijo.

Primero
Otro
Otro
Otro
Último
<div class="button-group">
    <div class="button">Primero</div>
    <div class="button">Otro</div>
    <div class="button">Otro</div>
    <div class="button">Otro</div>
    <div class="button">Último</div>
</div>.button-group .button {
    display: inline;
    background-color: #007bff;
    border: 1px solid;
    padding: 10px;
    width: 40px;
}

.button-group .button:first-child {
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px;
}

.button-group .button:last-child  {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px;
}

.button-group .button:first-child, .button-group .button:last-child {
    background-color: red;
}

Specificity

Se puede definir como el peso que tienen las combinaciones de selectores CSS.

Se calcula a partir de:

Specificity
Specificity Calculator