Curso Completo de CSS para Desarrolladores
Curso Completo de CSS para Desarrolladores
[Link]
Te damos la bienvenida a Learn
CSS.
bookmark_border
Aprenderás lo siguiente:
Modelo de caja
Todo lo que muestra CSS es un cuadro. Por lo tanto, comprender cómo
funciona el modelo de caja de CSS es una base fundamental de CSS.
Selectores
Para aplicar CSS a un elemento, debes seleccionarlo. CSS te ofrece varias
formas diferentes de hacerlo, y puedes explorarlas en este módulo.
La cascada
A veces, dos o más reglas de CSS que compiten se pueden aplicar a un
elemento. En este módulo, descubrirás cómo el navegador elige cuál utilizar y
cómo controlar esta selección.
Especificidad
En este módulo, se analiza con más detalle la especificidad, una parte clave
de la cascada.
Herencia
Algunas propiedades de CSS se heredan si no especificas un valor para ellas.
Descubre cómo funciona esto y cómo aprovecharlo en este módulo.
Color
Existen varias formas diferentes de especificar el color en CSS. En este
módulo, veremos los valores de color más usados.
Unidades de tamaño
En este módulo, aprenderás a ajustar el tamaño de los elementos con CSS,
trabajando con el medio flexible de la Web.
Diseño
Una descripción general de los diversos métodos de diseño que puedes elegir
a la hora de crear un componente o un diseño de página.
Flexbox
Flexbox es un mecanismo de diseño diseñado para organizar grupos de
elementos en una dimensión. Aprende a usarlo en este módulo.
Cuadrícula
CSS Grid Layout proporciona un sistema de diseño bidimensional, que
controla el diseño en filas y columnas. En este módulo, descubrirás todo lo
que la cuadrícula tiene para ofrecer.
Propiedades lógicas
Las propiedades y los valores relativos al flujo lógico están vinculados al flujo
de texto, en lugar de a la forma física de la pantalla. Descubre cómo
aprovechar este nuevo enfoque de CSS.
Espacios
Descubre cómo seleccionar el mejor método de espaciado de elementos,
teniendo en cuenta el método de diseño que estás usando y el componente
que necesitas crear.
Seudoelementos
Un seudoelemento es como agregar u orientarse a un elemento adicional sin
tener que agregar más HTML. Cumplen con diversas funciones, y puedes
aprender sobre ellas en este módulo.
Seudoclases
Las seudoclases te permiten aplicar CSS según los cambios de estado. Esto
significa que tu diseño puede reaccionar a las entradas del usuario, como una
dirección de correo electrónico no válida.
Bordes
Un borde proporciona un marco para las casillas. En este módulo, descubrirás
cómo cambiar el tamaño, el estilo y el color de los bordes con CSS.
Sombras
Existen varias formas de agregar sombras al texto y los elementos en CSS. En
este módulo, aprenderás a usar cada opción y conocerás las tareas para las
que se diseñaron.
Enfoque
Comprende la importancia del enfoque en tus aplicaciones web. Descubrirás
cómo administrar el enfoque y cómo asegurarte de que la ruta por tu página
funcione tanto para las personas que usen el mouse como para las que usen
el teclado para navegar.
Funciones
CSS tiene una variedad de funciones integradas. En este módulo, descubrirás
algunas de las funciones clave y cómo usarlas.
Gradientes
En este módulo, descubrirás cómo usar los diferentes tipos de gradientes
disponibles en CSS. Los gradientes se pueden usar para crear una gran
cantidad de efectos útiles, sin necesidad de crear una imagen con una
aplicación de gráficos.
Animaciones
La animación es una excelente manera de destacar elementos interactivos y
agregar interés y diversión a tus diseños. En este módulo, descubrirás cómo
agregar y controlar efectos de animación con CSS.
Filtros
Los filtros en CSS permiten aplicar efectos que solo crees posibles en una
aplicación gráfica. En este módulo, descubrirás las opciones disponibles.
Modos de fusión
Crea efectos de composición combinando dos o más capas, y aprende a aislar
una imagen con un fondo blanco en este módulo sobre los modos de
combinación.
Listas
Una lista, estructuralmente, está compuesta por un elemento contenedor de
lista con elementos de lista. En este módulo, aprenderás a aplicar ajustes de
estilo a todas las partes de una lista.
Transiciones
En este módulo, aprenderás a definir transiciones entre los estados de un
elemento. Usa transiciones para mejorar la experiencia del usuario
proporcionando comentarios visuales a la interacción del usuario.
Sobreflujo
El desbordamiento es la forma de abordar el contenido que no se ajusta a un
tamaño superior establecido. En este módulo, verás ideas innovadoras y
aprenderás a darle estilo a contenido desbordante.
Fondos
En este módulo, aprenderás cómo diseñar fondos de cuadros con CSS.
Texto y tipografía
En este módulo, aprenderás a darle estilo al texto en la Web.
p {
width: 100px;
height: 50px;
padding: 20px;
border: 1px solid;
}
Contenido y tamaño
Veamos algo más complejo para ver el impacto de los diferentes tamaños en
el contenido real:
Las cuatro áreas principales del modelo de cuadro: cuadro de contenido, cuadro de
padding, cuadro de borde y cuadro de margen.
En este diagrama, tienes tres marcos de fotos, montados en una pared, uno al
lado del otro. El diagrama tiene etiquetas que asocian los elementos del
marco con el modelo de caja.
Pon a prueba tus conocimientos sobre las propiedades que afectan el tamaño
del modelo de caja
.my-box {
width: 200px;
border: 10px solid;
padding: 20px;
}
260px
200px
El ancho real de este cuadro será de 260 px. Como la CSS usa el valor
predeterminado box-sizing: content-box, el ancho aplicado es el ancho del
contenido, y padding y border en ambos lados se agregan a eso. Por lo tanto,
200 px para el contenido + 40 px de relleno + 20 px de borde hacen que el
ancho visible sea de 260 px.
.my-box {
box-sizing: border-box;
width: 200px;
border: 10px solid;
padding: 20px;
}
Este modelo de cuadro alternativo le indica a CSS que aplique width al cuadro
de borde en lugar del cuadro de contenido. Esto significa
que border y padding se envían y, como resultado, cuando configuras .my-
box en 200px de ancho, en realidad se renderiza en 200px.
*,
*::before,
*::after {
box-sizing: border-box;
}
Esta regla de CSS selecciona todos los elementos del documento y cada
seudoelemento ::before y ::after, y aplica box-sizing: border-box. Esto significa
que cada elemento ahora tendrá este modelo de caja alternativo.
Debido a que el modelo de caja alternativo puede ser más predecible, los
desarrolladores suelen agregar esta regla a los restablecimientos y
normalizadores, como este.
Recursos
Introducción al modelo de caja
¿Qué son las herramientas para desarrolladores de navegadores?
Chromium
Firefox
Webkit
Selectores
bookmark_border
El podcast de CSS 002: Selectores
Si tienes texto que solo deseas que sea más grande y rojo si se encuentra en el primer párrafo de
un artículo, ¿cómo lo haces?
<article>
<p>I want to be red and larger than the other text.</p>
<p>I want to be normal sized and the default color.</p>
</article>
Puedes usar un selector CSS para encontrar ese elemento específico y aplicar una regla de CSS
como la siguiente.
article p:first-of-type {
color: red;
font-size: 1.5em;
}
CSS te ofrece muchas opciones para seleccionar elementos y aplicarles reglas, que van desde muy
simples hasta muy complejos para ayudar a resolver situaciones como esta.
Para comprender cómo funcionan los selectores y su función en CSS, es importante conocer las
partes de una regla de CSS. Una regla de CSS es un bloque de código que contiene uno o más
selectores y una o más declaraciones.
En esta regla de CSS, el selector es .my-css-rule, que busca todos los elementos con una clase
de my-css-rule en la página. Hay tres declaraciones entre llaves. Una declaración es un par de
propiedad y valor que aplica estilos a los elementos que coinciden con los selectores. Una regla
CSS puede tener tantas declaraciones y selectores como desees.
Selectores simples
El grupo de selectores más sencillo se orienta a elementos HTML, además de clases, IDs y otros
atributos que se pueden agregar a una etiqueta HTML.
Selector universal
Navegadores compatibles
1
12
1
1
Origen
Un selector universal, también conocido como comodín, coincide con cualquier elemento.
* {
color: hotpink;
}
Esta regla hace que todos los elementos HTML de la página tengan texto de color activo.
Selector de tipos
Navegadores compatibles
1
12
1
1
Origen
Un selector de tipo hace coincidir un elemento HTML directamente.
section {
padding: 2em;
}
Esta regla hace que cada elemento <section> tenga un 2em de padding en todos los lados.
Selector de clases
Navegadores compatibles
1
12
1
1
Origen
Un elemento HTML puede tener uno o más artículos definidos en el atributo class. El selector de
clase coincide con cualquier elemento al que se le haya aplicado esa clase.
<div class="my-class"></div>
<button class="my-class"></button>
<p class="my-class"></p>
.my-class {
color: red;
}
Observa que . solo está presente en CSS y no en HTML. Esto se debe a que el carácter . le indica
al lenguaje CSS que coincida con los miembros del atributo de clase. Este es un patrón común en
CSS, en el que se usa un carácter especial, o un conjunto de caracteres, para definir los tipos de
selector.
Un elemento HTML que tenga una clase .my-class coincidirá con la regla de CSS anterior,
incluso si tiene varias otras clases, como la siguiente:
Esto se debe a que CSS busca un atributo class que contenga la clase definida en lugar de
coincidir exactamente con esa clase.
Nota: El valor de un atributo de clase puede ser casi cualquier cosa que desees que sea. Algo que podría
confundirte es que no puedes iniciar una clase (o un ID) con un número, como .1element. Puedes leer
más en la especificación.
Selector de ID
Navegadores compatibles
1
12
1
1
Origen
Un elemento HTML con un atributo id debe ser el único elemento en una página con ese valor de
ID. Selecciona elementos con un selector de ID como el siguiente:
#rad {
border: 1px solid blue;
}
Este CSS aplicaría un borde azul al elemento HTML que tiene un id de rad, como el siguiente:
<div id="rad"></div>
Al igual que con el selector de clases ., usa un carácter # para indicarle a CSS que busque un
elemento que coincida con la id que lo sigue.
Nota: Si el navegador encuentra más de una instancia de un id, se aplicarán las reglas de CSS que
coincidan con su selector. Sin embargo, cualquier elemento que tenga un atributo id debe tener un valor
único para él. Por lo tanto, a menos que escribas CSS muy específico para un solo elemento, evita aplicar
estilos con el selector id, ya que significa que no puedes volver a usar esos estilos en otro lugar.
Selector de atributos
Navegadores compatibles
1
12
1
3
Origen
Puedes buscar elementos que tengan un atributo HTML determinado o que tengan un valor
determinado para un atributo HTML con el selector de atributos. Para indicar a CSS que busque
atributos, encierra el selector con corchetes ([ ]).
[data-type='primary'] {
color: red;
}
Este CSS busca todos los elementos que tienen un atributo de data-type con un valor
de primary, como el siguiente:
<div data-type="primary"></div>
En lugar de buscar un valor específico de data-type, también puedes buscar elementos que
tengan el atributo presente, independientemente de su valor.
[data-type] {
color: red;
}
<div data-type="primary"></div>
<div data-type="secondary"></div>
Para usar selectores de atributos que distinguen mayúsculas de minúsculas, agrega un operador s a
tu selector de atributos.
[data-type='primary' s] {
color: red;
}
Esto significa que, si un elemento HTML tiene un data-type de Primary, en lugar de primary,
no obtendría texto rojo. Puedes hacer lo contrario (insensibilidad de mayúsculas y minúsculas) con
un operador i.
Además de los operadores de caso, tienes acceso a operadores que hacen coincidir partes de
strings dentro de los valores de los atributos.
En esta demostración, el operador `$` de nuestro selector de atributos obtiene el tipo de archivo del
atributo `href`. Esto permite agregar prefijos a la etiqueta, en función de ese tipo de archivo, con un
seudoelemento.
Agrupación de selectores
Un selector no tiene que coincidir con un solo elemento. Para agrupar varios selectores
separándolos con comas:
strong,
em,
.my-class,
[lang] {
color: red;
}
En este ejemplo, se extiende el cambio de color a los elementos <strong> y <em>. También se
extiende a una clase llamada .my-class y un elemento que tenga un atributo lang.
* {}
universal
atributo
clase
ID
div {}
atributo
clase
tipo
ID
Pseudoclases y pseudoelementos
CSS proporciona tipos de selectores útiles que se enfocan en estados específicos de la plataforma,
como cuando se coloca el cursor sobre un elemento, estructuras dentro de un elemento o partes de
él.
Seudoclases
Los elementos HTML se encuentran en varios estados, ya sea porque se interactúa con ellos o
porque uno de sus elementos secundarios está en un estado determinado.
Por ejemplo, un usuario podría colocar el cursor sobre un elemento HTML con el puntero del
mouse o un elemento secundario también podría hacerlo el usuario. En esas situaciones, usa la
seudoclase :hover.
Seudoelemento
.my-element::before {
content: 'Prefix - ';
}
Al igual que en la demostración anterior, en la que prefijaste la etiqueta de un vínculo con el tipo
de archivo que era, puedes usar el seudoelemento ::before para insertar contenido al comienzo de
un elemento o ::after para insertar contenido al final de un elemento.
/* Your list will now either have red dots, or red numbers */
li::marker {
color: red;
}
También puedes usar ::selection para aplicar estilo al contenido que un usuario destacó.
::selection {
background: black;
color: white;
}
::
:::
p:hover {
background: white;
color: black;
}
¿Qué tipo de pseudoselector se usa en el fragmento anterior?
Seudoelemento
Seudoclase
Selectores complejos
Ya viste una gran variedad de selectores, pero, a veces, necesitarás un control más detallado con
tu CSS. Aquí es donde intervienen los selectores complejos para ayudar.
Vale la pena recordar que, en este punto, aunque los siguientes selectores nos brindan más poder,
solo podemos caer en cascada y seleccionar elementos secundarios. No podemos orientar hacia
arriba y seleccionar un elemento principal. Explicaremos qué es la cascada y cómo funciona en
una lección posterior.
Combinadores
Un combinador es lo que se encuentra entre dos selectores. Por ejemplo, si el selector era p >
strong, el combinador es el carácter >. Los selectores que usan estas combinaciones te ayudan a
seleccionar elementos según su posición en el documento.
Combinador subordinado
Para comprender los combinadores descendientes, primero debes comprender los elementos
superiores y secundarios.
El elemento superior es el <p> que contiene texto. Dentro de ese elemento <p> hay un
elemento <strong>, con lo que se pone en negrita su contenido. Como se encuentra dentro
de <p>, es un elemento secundario.
p strong {
color: blue;
}
Este fragmento selecciona todos los elementos <strong> que son secundarios de
elementos <p>, por lo que son azules de forma recursiva.
Este efecto se visualiza mejor en el ejemplo anterior con el selector de combinación, .top div. Esa
regla de CSS agrega padding izquierdo a esos elementos <div>. Debido a que la combinación es
recursiva, a todos los elementos <div> que se encuentran en .top se les aplicará ese mismo
padding.
Observa el panel HTML de esta demostración para ver cómo el elemento .top tiene varios
elementos secundarios <div> que, a su vez, tienen elementos secundarios <div>.
Puedes buscar un elemento que siga inmediatamente a otro elemento mediante un carácter + en el
selector.
Para agregar espacio entre elementos apilados, usa el siguiente combinador del mismo nivel para
agregar espacio solo si un elemento es el siguiente elemento del mismo nivel de un elemento
secundario de .top.
Puedes agregar margen a todos los elementos secundarios de .top con el siguiente selector:
.top * {
margin-top: 1em;
}
El problema es que, debido a que seleccionas cada elemento secundario de .top, esta regla puede
crear espacio adicional innecesario. El próximo combinador del mismo nivel, combinado con
un selector universal, te permite no solo controlar qué elementos tienen espacio, sino también
aplicar espacio a cualquier elemento. Esto te proporciona flexibilidad a largo plazo, sin importar
qué elementos HTML aparezcan en .top.
Un combinador posterior es muy similar a un selector del mismo nivel. Sin embargo, en lugar de
un carácter +, usa un carácter ~. La diferencia es que un elemento solo tiene que seguir a otro con
el mismo elemento superior, en lugar de ser el siguiente elemento con el mismo elemento superior.
Usa un selector subsiguiente junto con una seudoclase ":checked" para crear un elemento switch de CSS
puro.
Esta posterior combinación proporciona un poco menos de rigidez, lo que resulta útil en contextos
como el del ejemplo anterior, en el que se cambia el color de un interruptor personalizado cuando
la casilla de verificación asociada tiene el estado :checked.
Combinador secundario
Un combinador secundario (también conocido como subordinado directo) te permite tener más
control sobre la recursividad que viene con los selectores combinados. Si usas el carácter >,
limitas el selector de combinador para que aplique solo a elementos secundarios directos.
Considera el ejemplo anterior del selector del mismo nivel. El espacio se agrega a cada próximo
elemento del mismo nivel, pero si uno de esos elementos también tiene los próximos elementos
del mismo nivel como elementos secundarios, es posible que se generen espacios adicionales no
deseados.
Para solucionar este problema, cambia el siguiente selector del mismo nivel para incorporar un
combinador secundario: > * + *. La regla ahora solo se aplicará a los elementos secundarios
directos de .top.
Selectores compuestos
Puedes combinar selectores para aumentar la especificidad y legibilidad. Por ejemplo, para
orientar elementos <a>, que también tienen una clase de .my-class, escribe lo siguiente:
[Link]-class {
color: red;
}
De esta manera, no se aplicaría un color rojo a todos los vínculos y solo se aplicaría el color rojo
a .my-class if estuviera en un elemento <a>. Para obtener más información al respecto, consulta
el módulo de especificidad.
>
[Link] {
border: 1px solid hotpink;
}
Combinador
Terminador
Selector compuesto
Recursos
Referencia de los selectores CSS
Juego de selectores interactivos
Referencia de seudoclase y pseudoelementos
Una herramienta que traduce selectores CSS a explicaciones en inglés sencillo
¿Te resultó útil?
La cascada
bookmark_border
El podcast de CSS - 004: The Cascade
CSS significa Hojas de estilo en cascada. La cascada es el algoritmo para resolver conflictos en los
que se aplican varias reglas CSS a un elemento HTML. Es por esto que el texto del botón con el
siguiente estilo CSS será azul.
button {
color: red;
}
button {
color: blue;
}
2. Especificidad: Es un algoritmo que determina qué selector CSS tiene la coincidencia más sólida.
3. Origin: Es el orden en el que aparece y de dónde proviene el CSS, ya sea un estilo de navegador,
CSS de una extensión del navegador o el CSS creado por ti.
4. Importancia: Algunas reglas de CSS tienen un peso mayor que otras, especialmente con el tipo de
regla !important.
El orden en el que aparecen tus reglas de CSS y cómo aparecen se toma en cuenta en la cascada
mientras se calcula la resolución de conflictos.
La demostración que aparece justo al comienzo de esta lección es el ejemplo más directo de
posición. Hay dos reglas que tienen selectores de especificidad idéntica, por lo que ganó la última
que se declarará.
Los estilos pueden provenir de varias fuentes en una página HTML, como una etiqueta <link>,
una etiqueta <style> incorporada y CSS intercalado, como se define en el atributo style de un
elemento.
Si tienes un <link> que incluye CSS en la parte superior de tu página HTML, otro <link> que
incluya CSS en la parte inferior: el <link> inferior tendrá más especificidad. Lo mismo sucede
con los elementos <style> incorporados. Son más específicos, cuanto más abajo se encuentran
en la página.
El botón tiene un fondo azul, según lo define el CSS que incluye un elemento <link />. Una regla de CSS
que establece que sea oscuro se encuentra en una segunda hoja de estilo vinculada y se aplica debido a
su posición posterior.
Este orden también se aplica a los elementos <style> incorporados. Si se declaran antes de
un <link>, el CSS de la hoja de estilo vinculada será el que tenga mayor especificidad.
El elemento <style> se declara en <head>, mientras que el elemento <link /> se declara
en <body>. Esto significa que obtiene más especificidad que el elemento <style>.
Un atributo style intercalado con CSS declarado en él anulará todos los demás CSS,
independientemente de su posición, a menos que una declaración tenga !important definido.
La posición también se aplica en el orden de tu regla CSS. En este ejemplo, el elemento tendrá un
fondo púrpura porque background: purple se declaró en último lugar. Como el fondo verde se
declaró antes que el púrpura, ahora el navegador lo ignora.
.my-element {
background: green;
background: purple;
}
Poder especificar dos valores para la misma propiedad puede ser una forma sencilla de crear
resguardos para los navegadores que no admiten un valor en particular. En el siguiente
ejemplo, font-size se declara dos veces. Si el navegador admite clamp(), se descartará la
declaración font-size anterior. Si el navegador no admite clamp(), se respetará la declaración
inicial y el tamaño de la fuente será de 1.5rem.
.my-element {
font-size: 1.5rem;
font-size: clamp(1.5rem, 1rem + 3vw, 2rem);
}
Nota: Este enfoque de declarar la misma propiedad dos veces funciona porque los navegadores ignoran
los valores que no entienden. A diferencia de otros lenguajes de programación, CSS no arrojará un error ni
interrumpirá tu programa cuando detecte una línea que no puede analizar; el valor que no puede analizar
no es válido y, por lo tanto, se ignorará. Luego, el navegador continúa procesando el resto del CSS sin
dañar los elementos que ya comprende.
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/[Link]" />
</head>
<body>
<button>I am a button</button>
<style>
button {
background: pink;
}
</style>
</body>
</html>
button {
background: yellow;
}
rosa
amarillo
Especificidad
En la siguiente lección, puedes aprender los detalles de cómo se calcula la especificidad. Sin
embargo, tener en cuenta algunos aspectos te ayudará a evitar demasiados problemas de
especificidad.
La segmentación de CSS a una clase en un elemento hará que esa regla sea más específica y, por
lo tanto, se considerará más importante que se aplique que CSS que se oriente solo al elemento.
Esto significa que con el siguiente CSS, h1 tendrá un color rojo, aunque ambas reglas coincidan, y
la regla del selector h1 aparecerá más adelante en la hoja de estilo.
<h1 class="my-element">Heading</h1>
.my-element {
color: red;
}
h1 {
color: blue;
}
Un elemento id hace que el CSS sea aún más específico, por lo que los diseños aplicados a un ID
anularán los aplicados de muchas otras maneras. Este es uno de los motivos por los que, en
general, no es una buena idea adjuntar estilos a un id. Puede resultar difícil reemplazar ese estilo
por otro.
La especificidad es acumulativa
Como podrás descubrir en la siguiente lección, a cada tipo de selector se le otorgan puntos que
indican su especificidad, los puntos de todos los selectores que utilizaste para apuntar a un
elemento se suman juntos. Esto significa que, si orientas un elemento con una lista de selectores
como [Link]-class[href]:hover, obtendrás algo bastante difícil de reemplazar por
otro CSS. Por este motivo, y para que tu CSS sea más reutilizable, te recomendamos que
mantengas los selectores lo más simples posible. Usa la especificidad como una herramienta para
llegar a los elementos cuando lo necesites, pero siempre considera refactorizar listas de selectores
largas y específicas si es posible.
Origen
El CSS que escribes no es el único que se aplica a una página. La cascada tiene en cuenta el origen
del CSS. Este origen incluye la hoja de estilo interna del navegador, los estilos agregados por las
extensiones del navegador o el sistema operativo, y el CSS creado. El orden de especificidad de
estos orígenes, desde el menos específico hasta el más específico, es el siguiente:
1. Estilos de la base de usuario-agente. Estos son los estilos que tu navegador aplica a los elementos
HTML de forma predeterminada.
2. Estilos de usuario locales. Estas pueden provenir del nivel del sistema operativo, como un tamaño
de fuente base, o una preferencia de movimiento reducido. También pueden provenir de
extensiones del navegador, como una extensión del navegador que permite que un usuario
escriba su propio CSS personalizado para una página web.
5. Estilos de usuario local !important. Cualquier !important que provenga del nivel del sistema
operativo o de la CSS a nivel de la extensión del navegador
Pon a prueba tus conocimientos sobre los orígenes de cascada y considera las siguientes reglas
de diseño de diversos orígenes:
Estilo usuario-agente
h1 { margin-block-start: 0.83em; }
Arranque
h1 { margin-block-start: 20px; }
h1 { margin-block-start: 2ch; }
<h1>Lorem ipsum</h1>
1 canal
20px
2rem
2 canales
0.83em
Importancia
No todas las reglas de CSS se calculan de la misma manera ni se les otorga la misma especificidad
entre sí.
Los tipos de reglas de transición y animación activas tienen mayor importancia que las reglas
normales. En el caso de transiciones de mayor importancia que !important tipos de reglas. Esto
se debe a que cuando se activa una animación o transición, su comportamiento esperado es
cambiar el estado visual.
Por lo general, las Herramientas para desarrolladores del navegador mostrarán todas las CSS que
podrían coincidir con un elemento, con las que no se usan tachadas.
Si el CSS que esperabas aplicar no aparece, quiere decir que no coincide con el elemento. En ese
caso, debes buscar en otro lugar, ya sea porque hay un error tipográfico en el nombre de una clase
o un elemento, o de alguna CSS no válida.
Asegúrate de que solo haya un valor de estilo para cada propiedad al momento de dibujar.
Recursos
Una explicación muy interactiva de la cascada
Referencia de cascada de MDN
¿Te resultó útil?
Especificidad
bookmark_border
El podcast de CSS 003: Especificidad
button {
color: red;
}
.branding {
color: blue;
}
Aquí hay dos reglas que compiten entre sí. Uno le coloreará el botón de rojo y
el otro, de color azul. ¿Qué regla se aplica al elemento? Comprender el
algoritmo de la especificación de CSS en lo que respecta a la especificidad es
la clave para comprender cómo CSS decide entre reglas competidoras.
Cada tipo de selector gana puntos. Agrega todos estos puntos para calcular la
especificidad general de un selector.
Selector universal
Un selector universal (*) no tiene especificidad y obtiene 0 puntos. Esto
significa que cualquier regla que tenga 1 o más puntos la anulará.
* {
color: red;
}
Selector de tipos
div {
color: red;
}
Selector de seudoelementos
::selection {
color: red;
}
Selector de clases
.my-class {
color: red;
}
Selector de pseudoclase
:hover {
color: red;
}
Selector de atributos
[href='#'] {
color: red;
}
Selector de ID
El CSS que se aplica directamente al atributo style del elemento HTML obtiene
una puntuación de especificidad de 1,000 puntos. Esto significa que,
para anularlo en CSS, debes escribir un selector extremadamente específico.
Regla !important
Se aplica una regla !important a una propiedad de CSS, por lo que no todos los
elementos de la regla general (selector y propiedades) obtienen la misma
puntuación de especificidad.
.my-class {
color: red !important; /* 10,000 points */
background: white; /* 10 points */
}
1
11
5
Especificidad en contexto
Este vínculo tiene dos clases. Agrega el siguiente CSS y obtiene 1 punto de
especificidad:
a {
color: red;
}
Haz referencia a una de las clases de esta regla, que ahora tiene 11 puntos
de especificidad:
[Link]-class {
color: green;
}
[Link]-class {
color: rebeccapurple;
}
[Link]-class[href] {
color: goldenrod;
}
Por último, agrega una seudoclase :hover a todo eso; el selector terminará
con 41 puntos de especificidad:
[Link]-class[href]:hover {
color: lightgrey;
}
[Link]
article:hover a[href]
article > section
Visualización de la especificidad
[Link]-class[href]:hover {
color: lightgrey;
}
li#specialty [Link]
section#[Link]
[data-state-rad].dark#specialty:hover
#specialty:hover [Link]
Especificidad que aumenta de manera pragmáticamente
.my-button {
background: blue;
}
button[onclick] {
background: grey;
}
.[Link]-button {
background: blue;
}
button[onclick] {
background: grey;
}
Ahora, el botón tendrá un fondo azul, ya que el nuevo selector obtiene una
puntuación de especificidad de 20 puntos (0-2-0).
[onclick] {
background: grey;
}
[onclick] {
background: grey;
}
.my-button {
background: blue;
}
Esta es la única instancia en la que gana el CSS más nuevo. Para hacerlo,
debe coincidir con la especificidad de otro selector que se oriente al mismo
elemento.
Recursos
Especificidad de CSS
Calculadora de especificidad
Especificidad de la MDN
Especificaciones sobre la especificidad de CSS
Otra calculadora de especificidad
Inheritance
bookmark_border
El podcast de CSS 005: Herencia
Supongamos que acabas de escribir algunas CSS para que los elementos se
vean como un botón.
.my-button {
display: inline-block;
padding: 1rem 2rem;
text-decoration: none;
background: pink;
font: inherit;
text-align: center;
}
article a {
color: maroon;
}
En esta lección, descubrirás por qué sucede esto y cómo la herencia es una
función eficaz para ayudarte a escribir menos CSS.
Flujo de herencia
<html>
<body>
<article>
<p>Lorem ipsum dolor sit amet.</p>
</article>
</body>
</html>
El elemento raíz (<html>) no heredará nada porque es el primer elemento del
documento. Agrega CSS al elemento HTML, y el documento comienza en
cascada.
html {
color: lightslategray;
}
body {
font-size: 1.2em;
}
p {
font-style: italic;
}
azimut
border-collapse
border-spacing
lado del subtítulo
color
cursor
direction
celdas-vacías
familia-de-fuentes
font-size
font-style
font-variant
font-weight
fuente
espaciado-letras
line-height
list-style-image
list-style-position
list-style-type
list-style
huérfanos
precios
text-align
text-indent
transformación-de-texto
visibilidad
white-space
viudas
word-spacing
Cómo funciona la herencia
Cada elemento HTML tiene todas las propiedades de CSS definidas de forma
predeterminada con un valor inicial. Un valor inicial es una propiedad que no
se heredó y se muestra como predeterminada si la cascada no puede calcular
un valor para ese elemento.
strong {
font-weight: 900;
}
Este fragmento de CSS configura todos los elementos <strong> para que
tengan un font-weight de 900, en lugar del valor predeterminado bold, que
sería equivalente a font-weight: 700.
.my-component {
font-weight: 500;
}
.my-component strong {
font-weight: inherit;
}
Puedes establecer este valor de forma explícita, pero si usas inherit y el CSS
de .my-component cambia en el futuro, puedes garantizar que tu <strong> se
mantenga actualizado con él automáticamente.
aside strong {
font-weight: initial;
}
También puedes usar el valor unset con la propiedad all. Volviendo al ejemplo
anterior, ¿qué sucede si los diseños p globales obtienen algunas propiedades
adicionales? Solo se aplicará la regla que se configuró para margin y color.
aside p {
margin: unset;
color: unset;
all: unset;
}
line-height
animation
color
font-size
text-align
¿Qué valor se comporta como inherit, a menos que no haya nada que heredar
y, luego, se comporte como initial?
superset
unset
reset
Recursos
Referencia de MDN en valores calculados
Un artículo sobre cómo la herencia puede ser útil en los frontends modulares
Color
bookmark_border
El podcast de CSS 006: Color Parte uno
El color es una parte importante de cualquier sitio web y, en CSS, hay muchas
opciones de tipos de color, funciones y tratamientos.
¿Cómo decides qué tipo de color usar? ¿Cómo puedes hacer que los colores
sean semitransparentes? En esta lección, aprenderás qué opciones tienes a
fin de ayudarte a tomar las decisiones correctas para tu proyecto y equipo.
CSS tiene varios tipos de datos diferentes, como strings y números. El color es
uno de estos tipos y usa otros tipos, como números para sus propias
definiciones.
Colores numéricos
Colores hexadecimales
h1 {
color: #b71540;
}
Nota: Según el Web Almanac, hex es el tipo de sintaxis de color más popular.
Los rangos hexadecimales son 0-9 y A-F. Cuando se usan en una secuencia
de seis dígitos, se traducen a los rangos numéricos RGB que van del 0 al 255,
los cuales corresponden a los canales de color rojo, verde y azul,
respectivamente.
También puedes definir un valor alfa con cualquier color numérico. Un valor
alfa es un porcentaje de transparencia. En el código hexadecimal, agregas
otros dos dígitos a la secuencia de seis dígitos, lo que crea una secuencia de
ocho dígitos. Por ejemplo, para establecer el negro en código hexadecimal,
escribe #000000. Para agregar una transparencia del 50%, cámbiala
a #00000080.
Debido a que la escala hexadecimal es 0-9 y A-F, es probable que los valores
de transparencia no sean exactamente los esperados. Estos son algunos
valores comunes clave que se agregan al código hexadecimal
negro, #000000:
h1 {
color: rgb(183, 21, 64);
}
Los colores RGB se definen con la función de color rgb() y usa números o
porcentajes como parámetros. Los números deben estar dentro del rango
de 0-255 y los porcentajes deben estar entre 0-255. RGB funciona en la
escala de 0 a 255, por lo que 255 sería equivalente al 100% y de 0 a 0%.
Para configurar el negro en RGB, defínelo como rgb(0 0 0), que es cero rojo,
cero verde y cero azul. El negro también se puede definir como rgb(0%, 0%,
0%). El blanco es exactamente lo opuesto: rgb(255, 255, 255) o rgb(100%, 100%,
100%).
h1 {
color: hsl(344, 79%, 40%);
}
Con la función de color hsl(), para definir un negro verdadero, escribe hsl(0 0%
0%) o hsl(0deg 0% 0%). Esto se debe a que el parámetro de matiz define el
grado de la rueda de colores, que, si usas el tipo de número, es 0-360.
También puedes usar el tipo de ángulo, que es ( 0deg) o (0turn). Tanto la
saturación como la luminosidad se definen con porcentajes.
Nota: El tipo de ángulo en CSS es excelente para definir el matiz porque representa
muy bien el ángulo de la paleta de colores. Este tipo acepta grados, giros, radianes y
graduados.
Navegadores compatibles
2
12
3.6
4
Origen
Alfa se define en hsl(), de la misma manera que rgb(), si se agrega
un / después de los parámetros de matiz, saturación y luminosidad, o bien usa
la función hsla(). El valor alfa se puede definir con un porcentaje o un decimal
entre 0 y 1. Por ejemplo, para establecer un 50% de negro alfa, usa hsl(0 0%
0% / 50%) o hsl(0 0% 0% / 0.5). Con la función hsla(), escribe hsla(0, 0%, 0%,
50%) o hsla(0, 0%, 0%, 0.5).
Nota: Pronto se agregarán algunos tipos de color más recientes a CSS. Entre ellos,
se incluyen lab() y lch(), que permiten especificar un rango de color mucho más
amplio que el que es posible en RGB.
Nota: Hay mucho que aprender con los gradientes, por lo que escribimos una lección
completa sobre cómo usarlos.
rbga(400 0 1)
hotpink
#0f08
rgb(255, 0, 0)
#OOFZ2
hsl(0 0% 0% / 20%)
hsl(0, 0, 0)
Recursos
Una demostración práctica en la que se muestra cómo usar ángulos con HSL
Una guía completa sobre el color
Una guía completa sobre la amplia gama de colores
[video] Explicación sobre cómo leer códigos hexadecimales
Cómo funcionan los códigos hexadecimales
Unidades de tallas
bookmark_border
El podcast de CSS 008: Sizing Units
En este caso, puedes usar una unidad ch, que equivale al ancho de un
carácter "0" en la fuente renderizada en su tamaño calculado. Esta unidad te
permite limitar el ancho del texto con una unidad diseñada para ajustar el
tamaño del texto, lo que, a su vez, permite un control predecible,
independientemente del tamaño de ese texto. La unidad ch es una de las
pocas unidades que son útiles para contextos específicos, como este ejemplo.
Números
Los números se usan para definir opacity, line-height e incluso para valores de
canal de color en rgb. Los números son números enteros sin unidades (1, 2, 3,
100) y decimales (.1, .2, .3).
p {
font-size: 24px;
line-height: 1.5;
}
Cuando se establecen valores para los filtros, filter: sepia(0.5) aplica un filtro
sepia 50% al elemento.
Cuando se configura la opacidad, opacity: 0.5 aplica una opacidad 50%.
En los canales de color: rgb(50, 50, 50), donde los valores de 0 a 255 son
aceptables para establecer un valor de color. Consulta la lección sobre colores.
Para transformar un elemento, transform: scale(1.2) escala el elemento en un
120% de su tamaño inicial.
Porcentajes
div {
width: 300px;
height: 100px;
}
div p {
width: 50%;
}
Si configuras margin o padding como un porcentaje, serán una parte del ancho
del elemento superior, sin importar la dirección.
div {
width: 300px;
height: 100px;
}
div p {
margin-top: 50%; /* calculated: 150px */
padding-left: 50%; /* calculated: 150px */
}
div {
width: 300px;
height: 100px;
}
div p {
width: 50%; /* calculated: 150px */
transform: translateX(10%); /* calculated: 15px */
}
Dimensiones y longitudes
Longitudes absolutas
Todas las longitudes absolutas se resuelven en la misma base, lo que las hace
predecibles en cualquier lugar que se usen en tu CSS. Por ejemplo, si
usas cm para ajustar el tamaño de tu elemento y, luego, imprimir, debería ser
preciso si lo comparas con una regla.
div {
width: 10cm;
height: 5cm;
background: black;
}
mm Milímetros 1 mm = 1/10 de 1 cm
pt Puntos 1 pt = 1/72 de 1 in
px Píxeles 1 px = 1/96 de 1 in
Longitudes relativas
CSS proporciona unidades útiles que son relativas al tamaño de los elementos
de la tipografía renderizada, como el tamaño del texto (unidades em) o el
ancho de los caracteres de los tipos de letra (unidades ch).
en En relación con el tamaño de la fuente, es decir, 1.5em será un 50% más grande que el tamaño de fuente calc
superior. (Históricamente, es la altura de la letra "M" mayúscula).
p. ej. Heurística para determinar si se debe usar la altura de x, una letra "x" o ".5em" en el tamaño de fuente proce
elemento.
mayúscul Altura de las letras mayúsculas en el tamaño de la fuente calculada actual del elemento.
a
ch Avance de caracteres promedio de un glifo estrecho en la fuente del elemento (representada por el glifo "0")
ic El avance de caracteres promedio de un glifo de ancho completo en la fuente del elemento, como se represe
(ideograma de agua CJK, U+6C34).
rem El tamaño de fuente del elemento raíz (el valor predeterminado es de 16 px).
Puedes usar las dimensiones del viewport (ventana del navegador) como base
relativa. Estas unidades forman parte del espacio de viewport disponible.
vw 1% del ancho de la vista del puerto. Las personas usan esta unidad para realizar trucos interesantes d
tamaño de una fuente del encabezado en función del ancho de la página, de modo que, a medida qu
tamaño, también cambie el tamaño de la fuente.
VH el 1% de la altura del viewport Puedes usar esto para organizar los elementos en una IU, por ejemplo
herramientas de pie de página.
vi El 1% del tamaño del viewport en el eje intercalado del elemento raíz. El eje se refiere a los modos de
escritura horizontales, como el inglés, el eje intercalado es horizontal. En los modos de escritura verti
letra japoneses, el eje intercalado va de arriba abajo.
vb El 1% del tamaño del viewport en el eje de bloque del elemento raíz. Para el eje de bloque, esta sería
Los idiomas de izquierda a derecha, como el inglés, tendrían un eje de bloque vertical, ya que los lect
página de arriba abajo. Un modo de escritura vertical tiene un eje de bloque horizontal.
div {
width: 10vw;
}
p {
max-width: 60ch;
}
En este ejemplo, div será el 10% del ancho del viewport, ya que 1vw es el 1%
del ancho del viewport. El elemento p tiene un max-width de 60ch, lo que
significa que no puede exceder el ancho de 60 caracteres "0" en la fuente y el
tamaño calculados.
Objetivo: Ajustar el tamaño del texto con unidades relativas como em o rem, en lugar
de una unidad absoluta, como px, permite que el tamaño del texto responda a las
preferencias del usuario. Esto puede incluir el tamaño de la fuente del sistema o del
elemento superior, como <body>. El tamaño base de em es el elemento superior del
elemento y el tamaño base de rem es el tamaño de fuente base del documento. Si no
defines un font-size en tu elemento html, este tamaño de fuente preferido por el
usuario se respetará si usas longitudes relativas, como em y rem. Si usas
unidades px para el tamaño del texto, se ignorará esta preferencia.
Unidades varias
Hay algunas otras unidades que se han especificado para trabajar con
determinados tipos de valores.
Unidades de ángulo
Con la unidad de ángulo deg, puedes rotar un div 90° en su eje central.
div {
background-image: url('[Link]');
}
px
8
em
en
cm
ch
ux
p. ej.
ui
Verdadero
Falso
Recursos
Valores de especificaciones de CSS y unidades de nivel 4
Tamaño y unidades en MDN
Todo sobre Ems
Una explicación de porcentajes
¿Te resultó útil?
Diseño
bookmark_border
El podcast de CSS 009: Layout
.my-element {
display: inline;
}
Los elementos de bloque no deben estar uno junto al otro. Crean una línea
nueva para ellos mismos. A menos que lo modifique otro código CSS, un
elemento de bloque se expandirá hasta el tamaño de la dimensión intercalada
y, por lo tanto, abarcará todo el ancho en un modo de escritura horizontal. Se
respetará el margen en todos los lados de un elemento de bloque.
.my-element {
display: flex;
}
Flexbox y cuadrícula
Existen dos mecanismos de diseño principales que crean reglas de diseño
para varios elementos: flexbox y cuadrícula. Comparten similitudes, pero
están diseñados para resolver diferentes problemas de diseño.
Nota: En los próximos módulos, profundizaremos en ambos temas, pero aquí
encontrarás una descripción general de lo que son y para qué sirven.
Caja flexible
.my-element {
display: flex;
}
.my-element div {
flex: 1 0 auto;
}
.my-element div {
flex-grow: 1;
flex-shrink: 0;
flex-basis: auto;
}
Cuadrícula
.my-element {
display: grid;
}
.my-element {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 1rem;
}
En el ejemplo anterior, se muestra un diseño de un solo eje. Mientras que
Flexbox trata principalmente a los elementos como un grupo, la cuadrícula te
brinda un control preciso sobre su ubicación en dos dimensiones. Podríamos
definir que el primer elemento de esta cuadrícula ocupa 2 filas y 3 columnas:
.my-element :first-child {
grid-row: 1/3;
grid-column: 1/4;
}
Diseño de flujo
Bloqueo intercalado
p span {
display: inline-block;
}
p span {
margin-top: 0.5rem;
}
Anuncio flotante
Si tienes una imagen dentro de un párrafo de texto, ¿no sería útil que el texto
envolviera la imagen como la ves en un periódico? Puedes hacerlo con
números de punto flotante.
img {
float: left;
margin-right: 1em;
}
Advertencia: Cuando uses float, ten en cuenta que es posible que se ajuste el
diseño de cualquier elemento que siga al elemento flotante. Para evitar esto, puedes
borrar el número de punto flotante, ya sea usando clear: both en un elemento que
siga al elemento flotante o con display: flow-root en el elemento superior de tus
elementos flotantes. Obtén más información en el artículo The end of the clearfix
hack.
Si tienes una lista de elementos muy larga, como una lista de todos los países
del mundo, puede provocar que el usuario se desplace mucho y desperdicie
tiempo. También puede crear un espacio en blanco excesivo en la página.
Con las columnas múltiples de CSS, puedes dividir esto en varias columnas
para resolver ambos problemas.
<h1>All countries</h1>
<ul class="countries">
<li>Argentina</li>
<li>Aland Islands</li>
<li>Albania</li>
<li>Algeria</li>
<li>American Samoa</li>
<li>Andorra</li>
…
</ul>
.countries {
column-count: 2;
column-gap: 1em;
}
.countries {
width: 100%;
column-width: 260px;
column-gap: 1em;
}
Posicionamiento
.my-element {
position: relative;
top: 10px;
}
.my-element {
position: relative;
width: 100px;
height: 100px;
}
.another-element {
position: absolute;
bottom: 0;
right: 0;
width: 50px;
height: 50px;
}
Puedes lograr los aspectos fijos y fijos de fixed y los aspectos más predecibles
de respetar el flujo de documentos de relative mediante sticky. Con este valor,
a medida que el viewport se desplaza más allá del elemento, permanece
anclado a los valores top, right, bottom y left que establezcas.
Conclusión
El diseño CSS ofrece muchas opciones y flexibilidad. Para conocer más sobre
la potencia de Flexbox y Grid de CSS, continúa con los siguientes módulos.
display: flex
display: grid
column-count
float
Falso
Verdadero
¿Te resultó útil?
Caja flexible
bookmark_border
El podcast de CSS - 010: Flexbox
Este es el modelo de diseño ideal para este patrón de barra lateral. Flexbox
no solo ayuda a ubicar la barra lateral y el contenido intercalados, sino que,
cuando no hay suficiente espacio restante, la barra lateral se abrirá en una
línea nueva. En lugar de establecer dimensiones rígidas para que el
navegador las siga, con flexbox, puedes proporcionar límites flexibles para
sugerir cómo podría mostrarse el contenido.
Los diseños flexibles tienen las siguientes características, que podrás explorar
en esta guía.
Puedes realizar dos acciones en el eje cruzado. Puedes mover los elementos
de forma individual o como grupo para que se alineen entre sí y con el
contenedor flexible. Además, si uniste líneas flexibles, puedes tratarlas como
un grupo para controlar cómo se les asigna el espacio. En esta guía, verás
cómo funciona todo esto en la práctica. Por ahora, solo ten en cuenta que el
eje principal sigue tu flex-direction.
Crea un contenedor flexible
Para usar Flexbox, debes declarar que deseas usar un contexto de formato
flexible y no un bloque normal ni un diseño intercalado. Para ello, cambia el
valor de la propiedad display a flex.
.container {
display: flex;
}
Con row-reverse:, los elementos se disponen como una fila desde el final del
contenedor flexible.
column: Los elementos se disponen como una columna.
Reordenamiento de contenido
Desconexión de Flexbox y de la navegación con el teclado
Una vez
que alcancen el tamaño mínimo de contenido, los elementos flexibles comenzarán a
desbordarse del contenedor.
Los elementos que se muestran con los valores iniciales se reducirán lo más
pequeños posible, hasta el tamaño min-content antes de que se produzca el
desbordamiento.
Para hacer que los elementos unan, agrega flex-wrap: wrap al contenedor
flexible.
.container {
display: flex;
flex-wrap: wrap;
}
.container {
display: flex;
flex-flow: column wrap;
}
Si suponemos que nuestro contenedor tiene más espacio del necesario para
mostrar los elementos, estos se alinean al principio y no crecen para llenar el
espacio. Dejan de crecer al máximo de contenido. Esto se debe a que el valor
inicial de las propiedades de flex- es el siguiente:
Usar flex: auto implicará que los elementos terminen en diferentes tamaños,
ya que el espacio compartido entre los elementos se comparte después de
que cada uno se presenta como tamaño máximo de contenido. Por lo tanto,
un elemento grande ganará más espacio. Para forzar que todos los elementos
tengan un tamaño coherente e ignorar el tamaño del contenido,
cambia flex:auto a flex: 1 en la demostración.
El uso de flex: 1 indica que todos los elementos tienen tamaño cero, por lo que
todo el espacio en el contenedor flexible está disponible para distribuirse.
Como todos los elementos tienen un factor flex-grow de 1, todos crecen por
igual y el espacio se comparte por igual.
Nota: También hay un valor de flex: none, que te proporcionará elementos flexibles
inflexibles que no aumentan ni se reducen. Esto podría ser útil si solo usas flexbox
para acceder a las propiedades de alineación, pero no deseas ningún
comportamiento flexible.
.item2 {
flex: 2 1 auto;
}
Este es un caso de uso menos común, ya que el motivo para usar un flex-
basis de auto es permitir que el navegador determine la distribución del
espacio. Si quisieras hacer que un elemento crezca un poco más de lo que
decide el algoritmo, podría ser útil.
Advertencia: El uso de order tiene los mismos problemas que los valores row-
reverse y column-reverse de flex-direction. Sería muy fácil crear una experiencia
desconectada para algunos usuarios. No uses order porque estás reparando
elementos desordenados en el documento. Si lógicamente los elementos deberían
estar en un orden diferente, cambia tu HTML.
column
row
false
true
flex-grow
flex-basis
flex-shrink
Con el HTML que se usó antes, los elementos flexibles dispuestos en fila, hay
espacio en el eje principal. Los elementos no son lo suficientemente grandes
como para llenar el contenedor flexible por completo. Los elementos se
alinean al comienzo del contenedor flexible porque el valor inicial de justify-
content es flex-start. Los elementos se alinean al principio y cualquier espacio
adicional está al final.
.container {
display: flex;
justify-content: flex-end;
}
Prueba los diferentes valores, esta vez con un diseño de columnas de flexbox.
Con un contenedor flexible unido, es posible que haya espacio para distribuir
en el eje cruzado. En este caso, puedes usar la propiedad align-content con los
mismos valores que justify-content. A diferencia de justify-content, que alinea
los elementos con flex-start de forma predeterminada, el valor inicial de align-
content es stretch. Agrega la propiedad align-content al contenedor flexible para
cambiar ese comportamiento predeterminado.
.container {
align-content: center;
}
La abreviatura place-content
.container {
place-content: space-between;
/* sets both to space-between */
}
.container {
place-content: center flex-end;
/* wrapped lines on the cross axis are centered,
on the main axis items are aligned to the end of the flex container */
}
Alinear elementos en el eje cruzado
El valor inicial de align-self es stretch, por lo que los elementos flexibles en una
fila se extienden hasta la altura del elemento más alto de forma
predeterminada. Para cambiar esto, agrega la propiedad align-self a cualquiera
de tus elementos flexibles.
.container {
display: flex;
}
.item1 {
align-self: flex-start;
}
flex-start
flex-end
center
stretch
baseline
La siguiente demostración tiene una sola línea de elementos flexibles con flex-
direction: row. El último elemento define la altura del contenedor flexible. El
primer elemento tiene la propiedad align-self con un valor de flex-start. Intenta
cambiar el valor de esa propiedad para ver cómo se mueve dentro de su
espacio en el eje cruzado.
.container {
display: flex;
align-items: flex-start;
}
En la siguiente demostración, intenta cambiar el valor de align-items para
alinear todos los elementos del eje cruzado como un grupo.
Los elementos flexibles actúan como un grupo en el eje principal. Por lo tanto,
no hay el concepto de dividir un elemento individual de ese grupo.
Vale la pena saber que Flexbox funciona muy bien con los márgenes
automáticos. Si necesitas dividir un elemento de un grupo o separar el grupo
en dos, puedes aplicarle un margen. En el ejemplo a continuación, el último
elemento tiene un margen izquierdo de auto. El margen automático absorbe
todo el espacio en la dirección en la que se aplica. Esto significa que envía el
elemento hacia la derecha y, por lo tanto, divide los grupos.
.container {
width: 400px;
height: 300px;
display: flex;
justify-content: center;
align-items: center;
}
Nota: En el futuro, es posible que podamos realizar esta alineación sin necesidad de
hacer que el elemento superior sea un contenedor flexible. Las propiedades de
alineación se especifican para el diseño intercalado y en bloque. En este momento,
ningún navegador las implementó. Sin embargo, cambiar a un contexto de formato
flexible te brinda acceso a las propiedades. Si necesitas alinear algo, es una
excelente manera de hacerlo.
.container {
display: flex;
direction: ltr;
}
.container {
display: flex;
direction: ltr;
}
.container {
display: flex;
direction: ltr;
}
justify-content: flex-start
height: auto
align-items: flex-start
align-content: start
Recursos
El diseño de cuadro flexible de MDN CSS incluye una serie de guías detalladas
con ejemplos.
Guía de trucos de CSS para Flexbox
Qué sucede cuando se crea un contenedor flexible de Flexbox
Todo lo que necesitas saber sobre la alineación en Flexbox
¿Qué tan grande es esa caja flexible?
Casos de uso de Flexbox
Cómo inspeccionar y depurar diseños de Flexbox de CSS en las Herramientas
para desarrolladores de Chrome
Grid
bookmark_border
El podcast de CSS - 011: Grid
A lo largo de los años, ha habido muchos métodos para resolver este diseño,
pero con la cuadrícula de CSS, no solo es relativamente sencillo, sino que
tienes muchas opciones. La cuadrícula es excepcionalmente útil para
combinar el control que proporciona el tamaño extrínseco con la flexibilidad
del tamaño intrínseco, lo que lo hace ideal para este tipo de diseño. Esto se
debe a que la cuadrícula es un método de diseño diseñado para contenido
bidimensional. Es decir, dispones elementos en filas y columnas al mismo
tiempo.
Descripción general
1. Una cuadrícula se puede definir con filas y columnas. Puedes elegir cómo
ajustar el tamaño de los seguimientos de filas y columnas o reaccionar al
tamaño del contenido.
2. Los elementos secundarios directos del contenedor de cuadrícula se
posicionarán automáticamente en esta cuadrícula.
3. O bien, puedes colocar los elementos en la ubicación exacta que desees.
4. Se puede asignar un nombre a las líneas y áreas de la cuadrícula para facilitar
su ubicación.
5. El espacio libre en el contenedor de cuadrículas se puede distribuir entre los
segmentos.
6. Los elementos de cuadrícula se pueden alinear dentro de su área.
Terminología de cuadrícula
Líneas de cuadrícula
Las líneas se numeran a partir del 1, con la numeración que sigue el modo de
escritura y la dirección de la secuencia de comandos del componente. Esto
significa que la línea de columna 1 estará a la izquierda en un idioma de
izquierda a derecha, como el inglés, y a la derecha, en un idioma de derecha
a izquierda, como el árabe.
Pistas de cuadrícula
Un margen o pasaje entre las vías Para definir el tamaño, funcionan como las
pistas normales. No puedes colocar contenido en un espacio, pero puedes
abarcar elementos de la cuadrícula.
Contenedor de cuadrícula
.container {
display: grid;
}
Elemento de la cuadrícula
<div class="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
Filas y columnas
Para crear una cuadrícula básica, puedes definir una cuadrícula con tres
seguimientos de columnas, dos seguimientos de filas y un espacio de 10
píxeles entre los segmentos, de la siguiente manera.
.container {
display: grid;
grid-template-columns: 5em 100px 30%;
grid-template-rows: 200px auto;
gap: 10px;
}
La palabra clave min-content hará que la pista sea lo más pequeña posible sin
desbordar su contenido. Cambiar el diseño de cuadrícula de ejemplo para que
tenga tres seguimientos de columnas con un tamaño de min-content implica
que se volverán tan angostos como la palabra más larga del segmento.
La palabra clave max-content tiene el efecto contrario. La pista será lo
suficientemente ancha para que todo el contenido se muestre en una sola
cadena larga y continua. Esto podría provocar desbordamientos, ya que la
cadena no se unirá.
La función fit-content() actúa como max-content al principio. Sin embargo, una
vez que el segmento alcanza el tamaño que pasas a la función, el contenido
comienza a ajustarse. Por lo tanto, fit-content(10em) creará una pista de menos
de 10 em, si el tamaño de max-content es menor que 10 em, pero nunca
superior a 10.
La unidad fr
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
La función minmax()
Navegadores compatibles
57
16
52
10.1
Origen
Esta función permite establecer un tamaño mínimo y uno máximo para un
segmento. Esto puede ser bastante útil. Si tomamos el ejemplo de la
unidad fr anterior que distribuye el espacio restante, se podría escribir
con minmax() como minmax(auto, 1fr). La cuadrícula analiza el tamaño
intrínseco del contenido y distribuye el espacio disponible después de darle
suficiente espacio al contenido. Esto significa que es posible que no obtengas
segmentos que tengan una parte igual de todo el espacio disponible en el
contenedor de cuadrícula.
Notación repeat()
Navegadores compatibles
57
16
76
10.1
Origen
.container {
display: grid;
grid-template-columns:
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr),
minmax(0,1fr);
}
.container {
display: grid;
grid-template-columns: 200px repeat(2, 1fr 2fr) 200px; /*creates 6
tracks*/
}
auto-fill y auto-fit
Para lograrlo, usa repeat() y las palabras clave auto-fill o auto-fit. En la siguiente
demostración, la cuadrícula creará tantos seguimientos de 200 píxeles como
quepan en el contenedor. Abre la demostración en una ventana nueva y
observa cómo cambia la cuadrícula a medida que modificas el tamaño del
viewport.
Estos valores se relacionan con el modo de escritura del documento. Una fila
siempre se ejecuta en la misma dirección que una oración en el modo de
escritura del documento o componente. En la siguiente demostración, puedes
cambiar el modo del valor de grid-auto-flow y la propiedad writing-mode.
Segmentos de seguimiento
.item {
grid-column-end: span 2; /* will span two lines, therefore covering two
tracks */
}
.item {
grid-column: auto / span 2;
}
Colocación de elementos
Puedes usar las siguientes propiedades para ubicar elementos por número de
línea:
grid-column-start
grid-column-end
grid-row-start
grid-row-end
grid-column
grid-row
Para colocar tu elemento, establece las líneas de inicio y finalización del área
de cuadrícula en la que debe colocarse.
.container {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(2, 200px 100px);
}
.item {
grid-column-start: 1; /* start at column line 1 */
grid-column-end: 4; /* end at column line 4 */
grid-row-start: 2; /*start at row line 2 */
grid-row-end: 4; /* end at row line 4 */
}
Apilar elementos
Sin embargo, esto solo funciona para la cuadrícula explícita. Toma un diseño
de tres filas de elementos ubicados de forma automática en las que desees
que el primer elemento se extienda hasta la línea final de la cuadrícula.
Tal vez creas que puedes asignar grid-row: 1 / -1 a ese elemento. En la
siguiente demostración, verás que esto no funciona. Los segmentos se crean
en la cuadrícula implícita; no hay forma de llegar al final de la cuadrícula
mediante -1.
Para crear todas las filas implícitas con un tamaño mínimo de 10em y uno
máximo de auto, haz lo siguiente:
.container {
display: grid;
grid-auto-rows: minmax(10em, auto);
}
.container {
display: grid;
grid-auto-columns: 100px 200px;
}
.container {
display: grid;
grid-template-columns:
[main-start aside-start] 1fr
[aside-end content-start] 2fr
[content-end main-end]; /* a two column layout */
}
.sidebar {
grid-column: aside-start / aside-end;
/* placed between line 1 and 2*/
}
footer {
grid-column: main-start / main-end;
/* right across the layout from line 1 to line 3*/
}
.sidebar {
grid-area: sidebar;
}
.content {
grid-area: content;
}
footer {
grid-area: footer;
}
Puedes elegir el nombre que desees, excepto las palabras clave auto y span.
Una vez que tengan un nombre para todos los elementos, usa la
propiedad grid-template-areas para definir qué celdas de la cuadrícula abarcará
cada uno. Cada fila se define entre comillas.
.container {
display: grid;
grid-template-columns: repeat(4,1fr);
grid-template-areas:
"header header header header"
"sidebar content content content"
"sidebar footer footer footer";
}
.container {
display: grid;
grid-template-columns: repeat(4,1fr);
grid-template-areas:
"....... header header header"
"sidebar content content content"
"sidebar footer footer footer";
}
Propiedades abreviadas
grid-template
Navegadores compatibles
57
16
52
10.1
Origen
La propiedad grid-template es una abreviatura de grid-template-rows, grid-
template-columns y grid-template-areas. Las filas se definen primero, junto con
el valor de grid-template-areas. Se agrega el tamaño de columna después de /.
.container {
display: grid;
grid-template:
"head head head" minmax(150px, auto)
"sidebar content content" auto
"sidebar footer footer" auto / 1fr 1fr 1fr;
}
grid propiedad
Navegadores compatibles
57
16
52
10.1
Origen
La abreviatura grid se puede usar exactamente de la misma manera que la
abreviatura grid-template. Cuando se use de esta manera, restablecerá las
demás propiedades de cuadrícula que acepta a sus valores iniciales. Este es
el conjunto completo:
grid-template-rows
grid-template-columns
grid-template-areas
grid-auto-rows
grid-auto-columns
grid-auto-flow
.container {
display: grid;
grid: repeat(2, 80px) / auto-flow 120px;
}
Alineación
El diseño de cuadrícula usa las mismas propiedades de alineación que
aprendiste en la guía de flexbox. En la cuadrícula, las propiedades que
comienzan con justify- siempre se usan en el eje intercalado, la dirección en la
que se ejecutan las oraciones en el modo de escritura.
Observa cómo se aumentan las brechas cuando se usan valores como space-
between, y cualquier elemento de la cuadrícula que abarque dos segmentos
también crece para absorber el espacio adicional agregado a la brecha.
Nota: Al igual que con Flexbox, estas propiedades solo funcionarán si hay espacio
adicional para distribuir. Si los recorridos de tu cuadrícula llenan el contenedor de
forma prolija, no habrá espacio para compartir.
Nota: Si el elemento es una imagen o algún otro elemento con una relación de
aspecto intrínseca, el valor inicial será start en lugar de stretch para evitar estirar
elementos fuera de forma.
Círculos
áreas
brechas
recorridos
células
trenes
líneas
main {
display: grid;
}
Columnas
Filas
¿Qué es min-content?
¿Qué es max-content?
Cuando cuadrícula toma los elementos secundarios y los coloca en el mejor orden
según la heurística del navegador
Cuando los elementos secundarios de la cuadrícula reciben una grid-area y se
colocan en esa celda
Cuando se colocan los elementos de cuadrícula sin asignar a continuación en una
plantilla de diseño
Recursos
El ícono se ubica a la izquierda del texto con un pequeño espacio entre los
dos, que proporciona margin-right en el ícono. Sin embargo, hay un problema,
ya que esto solo funcionará cuando la dirección del texto sea de izquierda a
derecha. Si la dirección del texto cambia de derecha a izquierda (que es la
forma en que leen idiomas como el árabe), el ícono se posicionará contra el
texto.
Terminología
Flujo de bloqueo
Relativo de flujo
.my-element {
max-width: 150px;
max-height: 100px;
}
.my-element {
max-inline-size: 150px;
max-block-size: 100px;
}
Inicio y fin
Por ejemplo, para alinear el texto a la derecha, puedes usar este CSS:
p {
text-align: right;
}
p {
text-align: end;
}
Espaciado y posicionamiento
Las propiedades lógicas para margin, padding y inset facilitan y optimizan los
elementos de posicionamiento y determinan cómo interactúan entre sí en los
modos de escritura. Las propiedades relacionadas con el margen y el padding
siguen siendo asignaciones directas a direcciones, pero la diferencia clave es
que cuando cambia un modo de escritura, cambian con él.
.my-element {
padding-top: 2em;
padding-bottom: 2em;
margin-left: 2em;
position: relative;
top: 0.2em;
}
.my-element {
padding-block-start: 2em;
padding-block-end: 2em;
margin-inline-start: 2em;
position: relative;
inset-block-start: 0.2em;
}
De esta manera, se agrega un poco de espacio interno intercalado
con padding y se lo envía desde el inicio intercalado con margin. La
propiedad inset-block lo mueve hacia adentro desde el inicio del bloque.
.my-element {
padding-block: 2em;
margin-inline: 2em 0;
position: relative;
inset-block: 0.2em 0;
}
Bordes
.my-element {
border-bottom: 1px solid red;
border-right: 1px solid red;
border-bottom-right-radius: 1em;
}
.my-element {
border-block-end: 1px solid red;
border-inline-end: 1px solid red;
border-end-end-radius: 1em;
}
Unidades
p {
display: inline-flex;
align-items: center;
}
p svg {
width: 1.2em;
height: 1.2em;
margin-right: 0.5em;
flex: none;
}
p {
display: inline-flex;
align-items: center;
}
p svg {
width: 1.2em;
height: 1.2em;
margin-inline-end: 0.5em;
flex: none;
}
block
inline
Marca todos los beneficios que pueden aprovechar las propiedades lógicas.
lados de la caja
esquinas de recuadros
colores
tamaños
sombras
alignment
final intercalado
fin del bloque
inicio intercalado
inicio del bloque
¿Te resultó útil?
Espaciado
bookmark_border
El podcast de CSS 013: Espaciado
Supongamos que tienes un conjunto de tres cuadros, apilados uno encima del
otro, y quieres espacio entre ellos. ¿Cuántas maneras se te ocurren de hacer
eso en CSS?
Espaciado de HTML
El elemento <hr> crea una línea horizontal con espacio a ambos lados,
conocida como margin.
Además de usar elementos HTML, las entidades HTML pueden crear espacio.
Una entidad HTML es una cadena reservada de caracteres que el navegador
reemplaza por entidades de caracteres. Por ejemplo, si escribiras © en tu
archivo HTML, se convertiría en un carácter ©. La entidad se convierte
en un carácter de espacio de no separación, que proporciona un espacio
intercalado. Sin embargo, ten cuidado, ya que el aspecto no rotundo de este
carácter une los dos elementos, lo que puede generar un comportamiento
extraño.
Nota: Usa elementos HTML para agregar espacio solo cuando el elemento ayude a
comprender el documento. Por ejemplo, una <hr> no solo agrega espacio, sino que
crea una separación lógica de dos fragmentos de contenido. Si solo quieres una línea
con espacio a su alrededor, puede ser más apropiado agregar un borde con CSS.
Margen
.wrapper {
max-width: 400px;
margin: 0 auto;
}
Margen negativo
Contraer margen
<article>
<h1>My heading with teal margin</h1>
<p>A paragraph of text that has blue margin on it, following the heading
with margin.</p>
</article>
h1 {
margin-bottom: 2rem;
}
p {
margin-top: 3rem;
}
30px
20px
10px
40px
Si tienes un elemento sin margen entre dos elementos con margen de bloque,
el margen tampoco se contraerá, porque los dos elementos con margen de
bloque ya no son elementos del mismo nivel adyacentes: solo son elementos
del mismo nivel.
Según el modelo de caja que uses (que se analizó en la lección sobre modelos
de cajas), padding también puede afectar las dimensiones generales del
elemento.
Posicionamiento
También se explica en el módulo layout, si estableces un valor
para position que no sea static, puedes espaciar elementos con las
propiedades top, right, bottom y left. Existen algunas diferencias en el
comportamiento de estos valores direccionales:
Un elemento con position: relative mantendrá su lugar en el flujo del
documento, incluso cuando configures estos valores. También estarán
relacionados con la posición de tu elemento.
Un elemento con position: absolute basará los valores direccionales a partir de
la posición del elemento superior relativo.
Un elemento con position: fixed basará los valores direccionales en el viewport.
Un elemento con position: sticky solo aplicará los valores direccionales cuando
esté en su estado anclado o bloqueado.
Cuadrícula y flexbox
Es una muy buena idea elegir una estrategia y seguirla para ayudarte a crear
una interfaz de usuario coherente que tenga un buen flujo y ritmo. Una buena
manera de lograr esto es usar medidas coherentes para el espaciado.
Por ejemplo, puedes comprometerte a usar 20px como medida coherente para
todos los espacios entre elementos, conocidos como medianiles, de modo que
todos los diseños se vean y se sientan coherentes. También puedes optar por
usar 1em como el espaciado vertical entre el contenido del flujo, lo que
lograría un espaciado coherente según el font-size del elemento.
Independientemente de lo que elijas, debes guardar estos valores como
variables (o propiedades personalizadas de CSS) para asignar tokens a esos
valores y facilitar un poco la coherencia.
:root {
--gutter: 20px;
--spacing: 1em;
}
h1 {
margin-left: var(--gutter);
margin-top: var(--spacing);
}
Usar propiedades personalizadas como esta te permite definirlas una vez y,
luego, usarlas en todo tu CSS. Cuando se actualizan, ya sea de forma local
dentro de un elemento o globalmente, los valores pasarán a través de la
cascada y se reflejarán los valores actualizados.
Es solo una.
Nadie lo notará.
Ayuda a la comprensión del documento.
Es solo para el espacio.
Padding
HTML
Gap
Margen
Gap
Margen
Padding
HTML
Gap
Padding
Margen
HTML
Seudoelementos
bookmark_border
El podcast de CSS (014: Pseudoelementos)
p::first-letter {
color: blue;
float: left;
font-size: 2.6em;
font-weight: bold;
line-height: 1;
margin-inline-end: 0.2rem;
}
.my-element::after {
content: "";
}
El content puede ser cualquier string, incluso una vacía, pero ten en cuenta
que es probable que un lector de pantalla anuncie cualquier otro elemento
que no sea una string vacía. Puedes agregar una imagen url, que insertará
una imagen en sus dimensiones originales, por lo que no podrás cambiarle el
tamaño. También puedes insertar un counter.
Término clave: Puedes crear un contador con nombre y, luego, aumentarlo en
función de su posición en el flujo del documento. Hay todo tipo de contextos en los
que pueden ser muy útiles, como numerar automáticamente un esquema.
Una vez que se crea un elemento ::before o ::after, puedes diseñarlo como
quieras, sin límites. Solo puedes insertar un elemento ::before o ::after en un
elemento que acepte elementos secundarios (elementos con un árbol de
documentos), por lo que elementos como <img />, <video> y <input> no
funcionarán.
: input[type="checkbox"] es una excepción. Se permite tener pseudoelementos
secundarios.
::first-letter
Conocimos este seudoelemento al comienzo de la lección. Ten en cuenta que
no todas las propiedades de CSS se pueden usar cuando se segmenta a ::first-
letter. Las propiedades disponibles son las siguientes:
color
float
p::first-letter {
color: goldenrod;
font-weight: bold;
}
color
background propiedades
font propiedades
text propiedades
::backdrop
Si tienes un elemento que se presenta en modo de pantalla completa,
como <dialog> o <video>, puedes aplicar diseño al fondo (el espacio entre el
elemento y el resto de la página) con el seudoelemento ::backdrop:
video::backdrop {
background-color: goldenrod;
}
::marker
El seudoelemento ::marker te permite aplicar estilo a la viñeta o al número de
un elemento de la lista o a la flecha de un elemento <summary>.
::marker {
color: hotpink;
}
ul ::marker {
font-size: 1.5em;
}
ol ::marker {
font-size: 1.1em;
}
summary::marker {
content: '\002B'' '; /* Plus symbol with space */
}
details[open] summary::marker {
content: '\2212'' '; /* Minus symbol with space */
}
color
content
white-space
font propiedades
::selection
El seudoelemento ::selection te permite darle estilo al texto seleccionado.
::selection {
background: green;
color: white;
}
p:nth-of-type(2)::selection {
background: darkblue;
color: yellow;
}
color
text propiedades
::placeholder
Navegadores compatibles
57
79
51
10.1
Origen
Puedes agregar una sugerencia auxiliar a los elementos del formulario,
como <input> con un atributo placeholder. El seudoelemento ::placeholder te
permite aplicar estilo a ese texto.
input::placeholder {
color: darkcyan;
}
color
background propiedades
font propiedades
text propiedades
26
79
55
7
Origen
El último de este recorrido por los seudoelementos es el ::cue. Esto te permite
definir el estilo de las indicaciones de WebVTT, que son las leyendas de un
elemento <video>.
video::cue {
color: yellow;
}
video::cue(b) {
color: red;
}
video::cue(i) {
color: lightpink;
}
::after
:active
::pencil
::before
::first-paragraph
::marker
Verdadero
Falso
Seudoclases
bookmark_border
El podcast de CSS 015: Seudoclases
Supongamos que tienes un formulario de registro de correo electrónico y deseas que el campo del
formulario de correo electrónico tenga un borde rojo si contiene una dirección de correo
electrónico no válida. ¿Cómo puede hacerlo? Puedes usar una seudoclase :invalid de CSS, que es
una de las muchas seudoclases que proporciona el navegador.
Una seudoclase te permite aplicar estilos según los cambios de estado y factores externos. Esto
significa que tu diseño puede reaccionar a las entradas del usuario, como una dirección de correo
electrónico no válida. Estos se abordan en el módulo de selectores y, en este módulo, los
analizaremos con más detalle.
A diferencia de los seudoelementos, sobre los que puedes obtener más información en el módulo
anterior, las seudoclases se vinculan a estados específicos en los que puede estar un elemento, en
lugar de partes de ese elemento en general de estilo.
Estados interactivos
Las siguientes seudoclases se aplican debido a una interacción que un usuario tiene con tu página.
:hover
Navegadores compatibles
1
12
1
2
Origen
Si un usuario tiene un dispositivo apuntador, como un mouse o un panel táctil, y lo coloca sobre
un elemento, puedes conectarte a ese estado con :hover para aplicar estilos. Esta es una manera
útil de indicar que se puede interactuar con un elemento.
:active
Navegadores compatibles
1
12
1
1
Origen
Este estado se activa cuando se interactúa de manera activa con un elemento (como un clic) antes
de que se suelte este. Si se usa un dispositivo apuntador, como un mouse, este estado es cuando
comienza el clic y aún no se suelta.
Navegadores compatibles
1
12
1
1
Origen
Si un elemento puede recibir el enfoque, como un <button>, puedes reaccionar a ese estado con
la seudoclase :focus.
También puedes reaccionar si un elemento secundario de tu elemento recibe el foco con :focus-
within.
Los elementos enfocables, como los botones, mostrarán un anillo de enfoque cuando estén
enfocados, incluso cuando se haga clic en ellos. En este tipo de situación, un desarrollador aplicará
el siguiente CSS:
button:focus {
outline: none;
}
Este CSS quita el anillo de enfoque predeterminado del navegador cuando un elemento recibe el
foco, lo que presenta un problema de accesibilidad para los usuarios que navegan por una página
web con un teclado. Si no hay un estilo de enfoque, no podrán realizar un seguimiento de la
ubicación actual del enfoque cuando usen la tecla Tab. Con :focus-visible, puedes presentar un
estilo de enfoque cuando un elemento recibe el foco mediante el teclado y, al mismo tiempo, usar
la regla outline: none para evitarlo cuando un dispositivo puntero interactúa con él.
button:focus {
outline: none;
}
button:focus-visible {
outline: 1px solid black;
}
:target
Navegadores compatibles
1
12
1
1.3
Origen
La seudoclase :target selecciona un elemento que tenga una id que coincida con un fragmento de
URL. Supongamos que tienes el siguiente código HTML:
<article id="content">
…
</article>
#content:target {
background: yellow;
}
Esto es útil para destacar áreas a las que podrían estar vinculadas específicamente, como el
contenido principal de un sitio web, mediante un vínculo de navegación.
Estados históricos
:link
Navegadores compatibles
1
12
1
1
Origen
La seudoclase :link se puede aplicar a cualquier elemento <a> que tenga un
valor href que todavía no haya visitado.
:visited
Puedes definir el estilo de un vínculo que ya visitó el usuario con la seudoclase :visited. Este es el
estado opuesto a :link, pero tienes menos propiedades de CSS para usar por motivos de seguridad.
Solo puedes aplicar ajustes de estilo a color, background-color, border-color y outline-color,
y al color de SVG fill y stroke.
El orden es importante
Si defines un diseño :visited, se puede anular con una seudoclase de vínculo con al menos la
misma especificidad. Por este motivo, te recomendamos que uses la regla de la LVHA para aplicar
diseño a los vínculos con seudoclases en un orden específico: :link, :visited, :hover y :active.
a:link {}
a:visited {}
a:hover {}
a:active {}
Nota: Por motivos de seguridad, solo puedes cambiar los estilos definidos por un estado :link o no
visitado con la seudoclase :visited, por lo que es importante que primero te asegures de definir los
estilos modificables. Para lograrlo, cumplirás con la regla de la LVHA.
Estados de formularios
Las siguientes seudoclases pueden seleccionar elementos de formulario, en los diversos estados en
los que pueden estar estos elementos durante la interacción con ellos.
:disabled y :enabled
Navegadores compatibles
1
12
1
3.1
Origen
Si el navegador inhabilita un elemento de formulario, como <button>, puedes conectarte a ese
estado con la seudoclase :disabled. La seudoclase :enabled está disponible para el estado
opuesto, aunque los elementos de forma también son :enabled de forma predeterminada, por lo
que es posible que no alcances esta seudoclase.
:checked y :indeterminate
Navegadores compatibles
1
12
1
3.1
Origen
La seudoclase :checked está disponible cuando un elemento de formulario complementario,
como una casilla de verificación o un botón de selección, está marcado.
El estado :checked es un estado binario(verdadero o falso), pero las casillas de verificación
tienen un estado intermedio cuando no están marcadas ni desmarcadas. Esto se conoce como el
estado :indeterminate.
Un ejemplo de este estado es cuando tienes un control "seleccionar todo" que marca todas las
casillas de verificación en un grupo. Si el usuario desmarcara una de estas casillas de verificación,
la casilla de verificación raíz ya no representaría que se marquen todas las opciones, por lo que
debería pasar a un estado indeterminado.
El elemento <progress> también tiene un estado indeterminado al que se le puede dar estilo. Un
caso de uso común es darle una apariencia a rayas para indicar que se desconoce cuánto más se
necesita.
:placeholder-shown
Navegadores compatibles
47
79
51
9
Origen
Si el campo de un formulario tiene un atributo placeholder y sin valor, se puede usar la
seudoclase :placeholder-shown para adjuntar diseños a ese estado. En cuanto haya contenido en
el campo, ya sea que tenga un placeholder o no, este estado dejará de aplicarse.
Estados de validación
Navegadores compatibles
10
12
4
5
Origen
Puedes responder a la validación de formularios HTML con seudoclases,
como :valid, :invalid y :in-range. Las seudoclases :valid y :invalid son útiles en contextos
como un campo de correo electrónico que tiene un pattern que debe coincidir, a fin de que sea un
campo válido. Este estado de valor válido se puede mostrar al usuario para ayudarlo a comprender
que puede pasar de manera segura al siguiente campo.
La seudoclase :in-range está disponible si una entrada tiene min y max, como una entrada
numérica y el valor está dentro de esos límites.
Con los formularios HTML, puedes determinar si un campo es obligatorio con el
atributo required. La seudoclase :required estará disponible para los campos obligatorios. Los
campos que no son obligatorios se pueden seleccionar con la seudoclase :optional.
Nota: No es una buena idea confiar únicamente en el color para representar los cambios de estado,
especialmente el rojo y el verde, ya que los usuarios daltónicos y con visión reducida pueden tener
dificultades para ver un cambio de estado o, incluso, pasarlo por alto por completo. Una buena idea es
usar el color para respaldar los cambios de estado, junto con los cambios de texto y de íconos para
representar visualmente los cambios.
:first-child y :last-child
Navegadores compatibles
4
12
3
3.1
Origen
Si deseas encontrar el primer o el último elemento, puedes usar :first-child y :last-child. Estas
seudoclases mostrarán el primer o el último elemento en un grupo de elementos del mismo nivel.
:only-child
Navegadores compatibles
2
12
1.5
3.1
Origen
También puedes seleccionar elementos que no tengan elementos del mismo nivel, con la
seudoclase :only-child.
:first-of-type y :last-of-type
Navegadores compatibles
1
12
3.5
3.1
Origen
Puedes seleccionar :first-of-type y :last-of-type, que, al principio, parecen hacer lo mismo
que :first-child y :last-child, pero considera el siguiente código HTML:
<div class="my-parent">
<p>A paragraph</p>
<div>A div</div>
<div>Another div</div>
</div>
Y este CSS:
.my-parent div:first-child {
color: red;
}
Ningún elemento sería de color rojo porque el primer elemento secundario es un párrafo y no un
div. La seudoclase :first-of-type es útil en este contexto.
.my-parent div:first-of-type {
color: red;
}
Aunque el primer <div> es el segundo elemento secundario, sigue siendo el primero de tipo
dentro del elemento .my-parent. Por lo tanto, con esta regla, será de color rojo.
:nth-child y :nth-of-type
Navegadores compatibles
1
12
3.5
3.1
Origen
Tampoco estás limitado a los primeros y últimos tipos secundarios y tipos. Las seudoclases :nth-
child y :nth-of-type te permiten especificar un elemento que está en un índice determinado. La
indexación en los selectores CSS comienza en 1.
También puedes pasar más que un índice a estas seudoclases. Si deseas seleccionar todos los
elementos pares, puedes usar :nth-child(even).
También puedes crear selectores más complejos que encuentren elementos en intervalos
espaciados con regularidad mediante la microsintaxis An+B.
li:nth-child(3n+3) {
background: yellow;
}
Este selector selecciona cada tercer elemento a partir del elemento 3. La n en esta expresión es el
índice, que comienza en cero y el 3 (3n) es el valor por el que se multiplica ese índice.
Puedes experimentar con este tipo de selector en este nth-child-tester o en esta herramienta de
selección de cantidad.
:only-of-type
Navegadores compatibles
1
12
3.5
3.1
Origen
Por último, puedes encontrar el único elemento de un tipo determinado en un grupo de elementos
del mismo nivel con :only-of-type. Esto resulta útil si deseas seleccionar listas con un solo
elemento o si deseas buscar el único elemento en negrita en un párrafo.
Cómo buscar elementos vacíos
A veces, puede ser útil identificar elementos completamente vacíos, y también existe una
seudoclase para eso.
:empty
Navegadores compatibles
1
12
1
3.1
Origen
Si un elemento no tiene elementos secundarios, se les aplica la seudoclase :empty. Sin embargo,
los elementos secundarios no son solo elementos HTML o nodos de texto: también pueden ser
espacios en blanco, lo que puede resultar confuso cuando depuras el siguiente HTML y te
preguntas por qué no funciona con :empty:
<div>
</div>
Esto se debe a que hay un espacio en blanco entre el <div> de apertura y de cierre, por lo que el
valor vacío no funcionará.
La seudoclase :empty puede ser útil si tienes poco control sobre el HTML y deseas ocultar
elementos vacíos, como un editor de contenido WYSIWYG. En este caso, un editor agregó un
párrafo vacío suelto.
<article class="post">
<p>Donec ullamcorper nulla non metus auctor fringilla.</p>
<p></p>
<p>Curabitur blandit tempus porttitor.</p>
</article>
.post :empty {
display: none;
}
:is()
Navegadores compatibles
88
88
78
14
Origen
Si deseas encontrar todos los elementos secundarios h2, li y img en un elemento .post, te
recomendamos escribir una lista de selectores como la siguiente:
.post h2,
.post li,
.post img {
…
}
La seudoclase :is no solo es más compacta que una lista de selección, sino que también permite
mayor flexibilidad. En la mayoría de los casos, si hay un error o un selector no compatible en una
lista de selectores, la lista completa de selectores dejará de funcionar. Si hay un error en los
selectores pasados en una seudoclase :is, se ignorará el selector no válido, pero se usarán los que
sean válidos.
:not()
Navegadores compatibles
1
12
1
3.1
Origen
También puedes excluir elementos con la seudoclase :not(). Por ejemplo, puedes usarlo para
definir el estilo de todos los vínculos que no tengan un atributo class.
a:not([class]) {
color: blue;
}
Una seudoclase :not también puede ayudarte a mejorar la accesibilidad. Por ejemplo,
un <img> debe tener un alt, incluso si es un valor vacío, por lo que puedes escribir una regla de
CSS que agregue un contorno rojo grueso a las imágenes no válidas:
img:not([alt]) {
outline: 10px red;
}
Las pseudoclases actúan como si una clase se aplicara de forma dinámica a un elemento, mientras
que los seudoelementos actúan sobre un elemento en sí.
Falso
Verdadero
:empty
:not()
:target
:squeeze
:hover
:press
:target
:loading
:in-range
:enabled
:valid
:indeterminate
:fresh
Navegadores compatibles
1
12
1
1
Origen
Estilo
Para que aparezca un borde, debes definir el border-style. Puedes elegir entre
las siguientes opciones:
Cuando se usan los estilos ridge, inset, outset y groove, el navegador oscurece
el color del borde del segundo color mostrado para proporcionar contraste y
profundidad. Este comportamiento puede variar entre los navegadores, en
especial para colores oscuros como black. En Chrome, estos estilos de borde
parecerán ser sólidos y, en Firefox, se aclararán para ofrecer un segundo color
más oscuro.
Bordes
que se muestran en Chrome, Firefox y Safari.
Para establecer un diseño de borde a cada lado del cuadro, puedes usar los
elementos border-top-style, border-right-style, border-left-style y border-bottom-
style.
Abreviatura
Color
Puedes configurar el color en todos los lados del cuadro o en cada lado
individual con border-color. De forma predeterminada, usa el color de texto
actual del cuadro: currentColor. Esto significa que si solo declaras propiedades
del borde, como el ancho, el color será el valor calculado, a menos que lo
configures de forma explícita.
.my-element {
color: blue;
border: solid; /* Will be a blue border */
}
.my-element {
color: blue;
border: solid yellow;
}
Ancho
.my-element {
border: 2px dotted;
border-inline-end: 2px solid red;
}
En este ejemplo, .my-element tiene todos los lados definidos por tener un
borde punteado 2px que es el color actual del texto. El borde inline-end se
define como 2px, sólido y rojo. Esto significa que en los idiomas de izquierda a
derecha, como el inglés, el borde rojo estará en el lado derecho del cuadro. En
los idiomas que se leen de derecha a izquierda, como el árabe, el borde rojo
estará en el lado izquierdo del cuadro.
.my-element {
border-radius: 1em 2em 3em 4em;
}
Cuando defines un solo valor para una esquina, usas otra abreviatura porque
un radio de borde se divide en dos partes: la vertical y la horizontal. Esto
significa que cuando configuras border-top-left-radius: 1em, configuras el radio
superior izquierdo-superior y el superior izquierdo-izquierda.
.my-element {
border-top-left-radius: 1em 2em;
}
.my-element {
border: 2px solid;
border-radius: 95px 155px 148px 103px / 48px 95px 130px 203px;
}
border-image-source
.my-element {
border-image-source: linear-gradient(to bottom, #000, #fff);
}
border-image-slice
border-image-repeat
white
historicColor
black
currentColor
.my-element {
border: solid hotpink;
}
medium
solid
1px
Navegadores compatibles
10
12
4
5.1
Origen
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
Para hacer que una sombra cuadrada sea una sombra interior, en lugar de la
sombra exterior predeterminada, agrega una palabra clave inset antes de las
otras propiedades.
/* Outer shadow */
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
/* Inner shadow */
.my-element {
box-shadow: inset 5px 5px 20px 5px #000;
}
Varias sombras
Puedes agregar todas las sombras que quieras con box-shadow. Para ello,
agrega una colección de conjuntos de valores separados por comas:
.my-element {
box-shadow: 5px 5px 20px 5px darkslateblue, -5px -5px 20px 5px
dodgerblue,
inset 0px 0px 10px 2px darkslategray, inset 0px 0px 20px 10px
steelblue;
}
.my-element {
box-shadow: 0px 0px 20px 5px darkslateblue;
border-radius: 25px;
}
<div class="my-parent">
<div class="my-shadow">My shadow is hidden by my parent.</div>
</div>
.my-parent,
.my-shadow {
width: 250px;
height: 250px;
}
.my-shadow {
box-shadow: 0px 0px 20px 5px darkslateblue;
}
.my-parent {
overflow: hidden;
}
Navegadores compatibles
2
12
3.5
1.1
Origen
.my-element {
text-shadow: 3px 3px 3px hotpink;
}
.my-element {
text-shadow: 3px 3px 3px gold;
color: rgb(0 0 0 / 70%);
}
Varias sombras
Puedes agregar tantas sombras como desees con text-shadow, al igual que
con box-shadow. Agrega una colección de conjuntos de valores separados por
comas y podrás crear algunos efectos de texto geniales, como texto en 3D.
.my-element {
text-shadow: 1px 1px 0px white,
2px 2px 0px firebrick;
color: darkslategray;
}
Sombra paralela
Para lograr una sombra paralela que siga cualquier curva potencial de una
imagen, usa el filtro drop-shadow de CSS. Esta sombra se aplica a una máscara
alfa, lo que hace que sea muy útil para agregar una sombra a una imagen de
corte, como es el caso de la introducción de este módulo.
.my-image {
filter: drop-shadow(0px 0px 10px rgba(0 0 0 / 30%))
}
Término clave: En otro módulo, analizaremos los filtros de CSS, pero, en resumen,
los filtros te permiten aplicar varios efectos gráficos a los píxeles de un elemento.
Radio de desenfoque
Desplazamiento vertical
Color
inset
Desplazamiento horizontal
Radio de distribución
Falso
Verdadero
Concentración
bookmark_border
El podcast de CSS - 018: Focus
Como desarrollador web, tu trabajo es hacer que un sitio web sea inclusivo y
accesible para todos. La creación de estados de enfoque accesibles con CSS
es parte de esta responsabilidad.
Los estilos de enfoque ayudan a las personas que usan un dispositivo, como
un teclado o un control de interruptor, a navegar e interactuar con un sitio
web. Si un elemento recibe el enfoque y no hay una indicación visual, el
usuario puede perder de vista lo que está en primer plano. Esto puede crear
problemas de navegación y provocar comportamientos no deseados si, por
ejemplo, se sigue un vínculo incorrecto.
Nota: Obtén más información sobre la importancia del enfoque para la accesibilidad
en Aprende sobre accesibilidad: Enfoque y descubre cómo administrar el enfoque en
HTML en Aprende HTML: Enfoque.
Enfoque de estilo
Resumen
Evita usar outline: none en un elemento que pueda recibir el enfoque del
teclado.
Evita reemplazar los diseños de outline por box-shadow. ya que no aparecen en
el modo de contraste alto de Windows.
Solo establece un valor positivo para tabindex en un elemento HTML si es
necesario.
Asegúrate de que el estado del enfoque sea muy claro en comparación con el
estado predeterminado.
<a>
<input>
<p>
<output>
<button>
<select>
Ratón
Tecnología de asistencia (lector de pantalla, interruptor, etc.)
Una papa
Teclado
Controlador de juegos
Índice z y contextos de apilamiento
bookmark_border
El podcast de CSS - 019: Índice z y contextos de pila
Supongamos que tienes un par de elementos que están posicionados de manera absoluta y se
supone que deben estar uno encima del otro. Puedes escribir un fragmento de un código HTML
como el siguiente:
<div class="stacked-items">
<div class="item-1">Item 1</div>
<div class="item-2">Item 2</div>
</div>
Pero ¿cuál se ubica encima del otro de forma predeterminada? Para saber qué elemento haría eso,
necesitas comprender el índice z y los contextos de apilado.
Índice z
La propiedad z-index establece explícitamente un orden de capas para HTML basado en el
espacio 3D del navegador: el eje Z. Este es el eje que muestra las capas más cercanas y alejadas de
ti. El eje vertical en la Web es el eje Y y el horizontal es el eje X.
La propiedad z-index acepta un valor numérico que puede ser positivo o negativo. Los elementos
aparecerán encima de otro si tienen un valor de z-index más alto. Si no se establece z-index en
tus elementos, el comportamiento predeterminado es que el orden de origen del documento dicta
el eje Z. Esto significa que los elementos más abajo en el documento se sitúan sobre los elementos
que aparecen antes de ellos.
En el flujo normal, si estableces un valor específico para z-index y no funciona, debes establecer
el valor position del elemento en un valor distinto de static. Este es un lugar común donde los
usuarios tienen dificultades con z-index.
Sin embargo, este no es el caso si estás en un contexto de flexbox o cuadrícula, ya que puedes
modificar el índice z de los elementos flexibles o de cuadrícula sin agregar position: relative.
Índice z negativo
Para establecer un elemento detrás de otro, agrega un valor negativo para z-index.
.my-element {
background: rgb(232 240 254 / 0.4);
}
.my-element .child {
position: relative;
z-index: -1;
}
.my-element {
position: relative;
z-index: 0;
background: rgb(232 240 254 / 0.4);
}
Como .my-element ahora tiene un valor position que no es static y un valor z-index que no
es auto, creó un nuevo contexto de apilado. Esto significa que, incluso si configuras .child para
que tenga un z-index de -999, no se quedará detrás de .my-parent.
Contexto de apilamiento
En este ejemplo, el primer elemento superior tiene un z-index de 1, por lo que crea un nuevo
contexto de apilado. Su elemento secundario tiene un z-index de 999. Junto a este elemento
superior, hay otro elemento superior con un elemento secundario. El elemento superior tiene un z-
index de 2, y el elemento secundario también tiene un z-index de 2. Debido a que ambos
elementos superiores crean un contexto de apilado, el z-index de todos los elementos secundarios
se basa en el del elemento superior.
El z-index de los elementos dentro de un contexto de apilado siempre es relativo al orden actual
del elemento superior en su propio contexto de apilado.
Nota: El elemento <html> es un contexto de apilado en sí mismo y nunca puede ir detrás de él. Puedes
colocar elementos detrás de <body> hasta que crees un contexto de apilado con él.
Para explicar qué es una capa compuesta, imagina que una página web es un lienzo. Un navegador
toma tus elementos HTML y CSS y los usa para determinar el tamaño del lienzo. Luego, pinta la
página en este lienzo. Si un elemento fuera a cambiar (por ejemplo, si cambia de posición), el
navegador debe regresar y volver a pensar qué pintar.
Para mejorar el rendimiento, el navegador crea nuevas capas compuestas que se superponen con el
lienzo. Estas notas se parecen un poco a las notas adhesivas: mover una y modificarla no tiene un
gran impacto en el lienzo general. Se crea una nueva capa compuesta para los elementos
con opacity, transform y will-change, ya que es muy probable que cambien, por lo que el
navegador se asegura de que el cambio tenga el mejor rendimiento posible usando la GPU para
aplicar ajustes de estilo.
Nota: También puedes crear un contexto de apilado si agregas un filter y configuras backface-
visibility: hidden.
Recursos
Cómo forzar capas
Guía de animaciones: Cómo forzar la creación de capas
Información sobre el índice z
<section>
<article>1</article>
<article>2</article>
<article>3</article>
<article>4</article>
</section>
position
animation
relative
display
No
Sí
¿Te resultó útil?
Funciones
bookmark_border
El podcast de CSS (2020): Funciones
Hasta ahora, en este curso, estuviste expuesto a varias funciones de CSS. En
el módulo de cuadrícula, te presentamos minmax() y fit-content(), que te
ayudan a determinar el tamaño de los elementos. En el módulo color, te
presentamos rgb() y hsl(), que te ayudan a definir colores.
Al igual que muchos otros lenguajes de programación, CSS
tiene muchas funciones integradas a las que puedes acceder siempre que las
necesites.
Muchas funciones de CSS son funciones puras, lo que significa que, si les
pasas los mismos argumentos, siempre te devolverán el mismo resultado, sin
importar lo que suceda en el resto de tu código. A menudo, estas funciones se
volverán a calcular a medida que los valores cambien en tu CSS, de manera
similar a otros elementos en el lenguaje, como los valores calculados en
cascada como currentColor.
En CSS, solo puedes usar las funciones proporcionadas, en lugar de escribir
tus propias, pero las funciones se pueden anidar entre sí en algunos
contextos, lo que les da más flexibilidad. Veremos eso en detalle más
adelante en el módulo.
Selectores funcionales
.post :is(h1, h2, h3) {
line-height: 1.2;
}
.my-element {
background: var(--base-color);
}
La función attr() toma el contenido del atributo href del elemento <a> y lo
configura como el content del seudoelemento ::after. Si cambiara el valor del
atributo href del elemento <a>, esto se reflejaría automáticamente en este
atributo content.
.my-element {
background-image: url('/path/to/[Link]');
}
La función url() toma una URL de cadena y se usa para cargar imágenes,
fuentes y contenido. Si no se pasa una URL válida o no se puede encontrar el
recurso al que apunta la URL, la función url() no mostrará nada.
Funciones de color
Aprendiste todo sobre las funciones de color en el módulo color. Si todavía no
leíste este, te recomendamos que lo hagas.
Expresiones matemáticas
calc()
Navegadores compatibles
26
12
16
7
Origen
La función calc() toma una sola expresión matemática como parámetro. Esta
expresión matemática puede ser una combinación de tipos, como longitud,
número, ángulo y frecuencia. Las unidades también se pueden combinar.
.my-element {
width: calc(100% - 2rem);
}
En este ejemplo, la función calc() se usa para ajustar el tamaño del ancho de
un elemento como el 100% del elemento superior que lo contiene y, luego,
quita 2rem de ese valor calculado.
:root {
--root-height: 5rem;
}
.my-element {
width: calc(calc(10% + 2rem) * 2);
height: calc(var(--root-height) * 3);
}
min() y max()
Navegadores compatibles
79
79
75
11.1
Origen
La función min() muestra el valor calculado más pequeño de uno o más
argumentos pasados. La función max() hace lo contrario: obtiene el valor más
alto de los argumentos que se pasaron.
.my-element {
width: min(20vw, 30rem);
height: max(20vh, 20rem);
}
En este ejemplo, el ancho debe ser el valor más pequeño entre 20vw, que es
el 20% del ancho del viewport, y 30rem. La altura debe ser el valor más alto
entre 20vh, que equivale al 20% de la altura de la ventana de
visualización, y 20rem.
clamp()
Navegadores compatibles
79
79
75
13.1
Origen
La función clamp() toma tres argumentos: el tamaño mínimo, el ideal y el
máximo.
h1 {
font-size: clamp(2rem, 1rem + 3vw, 3rem);
}
Puedes obtener más información sobre las funciones min(), max() y clamp()
en este artículo.
Formas
Las propiedades de CSS clip-path, offset-path y shape-outside usan formas para
recortar visualmente tu cuadro o proporcionar una forma para que fluya el
contenido.
Hay funciones de forma que se pueden usar con ambas propiedades. Las
formas simples, como circle(), ellipse() y inset(), toman argumentos de
configuración para ajustar su tamaño. Las formas más complejas,
como polygon(), toman pares de valores del eje X e Y separados por comas
para crear formas personalizadas.
.circle {
clip-path: circle(50%);
}
.polygon {
clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%,
0% 75%);
}
Al igual que polygon(), también hay una función path() que toma una regla de
relleno de SVG como argumento. Esto permite formas muy complejas que se
pueden dibujar en una herramienta de gráficos, como Illustrator o Inkscape, y
luego copiarse en tu CSS.
Transformaciones
Por último, en esta descripción general de las funciones CSS, están las
funciones de transformación, que sesgan, cambian el tamaño y hasta
cambian la profundidad de un elemento. Las siguientes funciones se usan con
la propiedad transform.
Rotación
Navegadores compatibles
1
12
3.5
3.1
Origen
Puedes rotar un elemento con la función rotate(), que rotará un elemento en
su eje central. También puedes usar las
funciones rotateX(), rotateY() y rotateZ() para rotar un elemento en un eje
específico. Puedes pasar unidades de grados, giros y radianes para
determinar el nivel de rotación.
.my-element {
transform: rotateX(10deg) rotateY(10deg) rotateZ(10deg);
}
Navegadores compatibles
12
12
10
4
Origen
.my-element {
transform: rotate3d(1, 1, 1, 10deg);
}
escalabilidad
Navegadores compatibles
1
12
3.5
3.1
Origen
Puedes cambiar el escalamiento de un elemento con transform y la
función scale(). La función acepta uno o dos números como valor que
determinan un escalamiento positivo o negativo. Si solo defines un argumento
numérico, tanto el eje X como el eje Y se escalarán de la misma manera y
definir ambos es una abreviatura de X e Y. Al igual que rotate(), hay
funciones scaleX(), scaleY() y scaleZ() para escalar un elemento en un eje
específico.
.my-element {
transform: scaleX(1.2) scaleY(1.2);
}
También hay una función scale3d(), como la rotate. Es similar a scale(), pero
toma tres argumentos: el factor de escala X, Y y Z.
Traductor
Navegadores compatibles
1
12
3.5
3.1
Origen
Las funciones translate() mueven un elemento mientras mantiene su posición
en el flujo del documento. Aceptan valores de longitud y porcentaje como
argumentos. La función translate() traduce un elemento a lo largo del eje X si
se define un argumento y traduce un elemento a lo largo de los ejes X e Y si
se definen ambos argumentos.
.my-element {
transform: translatex(40px) translatey(25px);
}
Puedes usar funciones específicas para un eje específico, al igual que con
otras funciones de transformación, mediante translateX, translateY y translateZ.
También puedes usar translate3d, que te permite definir la traslación de X, Y y
Z en una función.
Desviación
Navegadores compatibles
1
12
3.5
3.1
Origen
Puedes sesgar un elemento con las funciones skew() que aceptan los ángulos
como argumentos. La función skew() funciona de manera muy similar
a translate(). Si solo defines un argumento, solo afectará el eje X y, si defines
ambos, afectará al eje X e Y. También puedes usar skewX y skewY para
modificar cada eje de forma independiente.
.my-element {
transform: skew(10deg);
}
Perspectiva
Navegadores compatibles
36
12
16
9
Origen
Por último, puedes usar la propiedad perspective, que forma parte de la familia
de propiedades de transformación, para modificar la distancia entre el usuario
y el plano Z. Esto brinda la sensación de distancia y se puede utilizar para
crear una profundidad de campo en tus diseños.
{}
[]
::
()
Falso
Verdadero
Se puede colocar una función calc() dentro de otra calc(), como font-size:
calc(10px + calc(5px * 3));
Falso
Verdadero
polygon()
circle()
square()
ellipse()
rect()
inset()
Gradientes
bookmark_border
El podcast de CSS 021: Gradientes
Imagina que tienes un sitio para crear y, en la parte superior, hay una
introducción con un encabezado, un resumen y un botón. El diseñador
entregó un diseño con fondo púrpura para esta introducción. El único
problema es que el fondo presenta dos tonos de púrpura como gradiente.
¿Cómo lo haces?
Gradiente lineal
Navegadores compatibles
26
12
16
7
Origen
La función linear-gradient() genera una imagen de dos o más colores, de forma
progresiva. Toma varios argumentos, pero en su configuración más simple,
puedes pasar algunos colores como este y los dividirá automáticamente de
manera uniforme y los combinará.
.my-element {
background: linear-gradient(black, white);
}
.my-element {
background: linear-gradient(to right, black, white);
}
.my-element {
background: linear-gradient(45deg, darkred 30%, crimson);
}
Gradiente radial
Navegadores compatibles
26
12
16
7
Origen
Para crear un gradiente que se irradia de forma circular, la función radial-
gradient() interviene para ayudarte. Es similar a linear-gradient(), pero, en lugar
de especificar un ángulo, puedes optar por una posición y una forma final. Si
solo especificas colores, radial-gradient() seleccionará automáticamente la
posición como center y seleccionará un círculo o una elipse, según el tamaño
del cuadro.
.my-element {
background: radial-gradient(white, black);
}
Puedes agregar tantas marcas de color como desees, como con linear-gradient.
Del mismo modo, puedes agregar todos los radial-gradients que desees.
Gradiente cónico
Navegadores compatibles
69
79
83
12.1
Origen
.my-element {
background: conic-gradient(white, black);
}
Puedes agregar tantas opciones de color como desees, como con otros tipos
de gradientes. Un buen caso de uso para esta función, con gradientes cónicos,
es la representación de gráficos circulares con CSS.
Repetir y mezclar
Cada tipo de gradiente también tiene un tipo repetido. Estos son repeating-
linear-gradient(), repeating-radial-gradient() y repeating-conic-gradient(). Son
similares a las funciones no repetitivas y toman los mismos argumentos. La
diferencia es que si el gradiente definido se puede repetir para llenar el
cuadro, según ambos tamaños, lo hará.
.my-element {
background: repeating-linear-gradient(
45deg,
red,
red 30px,
white 30px,
white 60px
);
}
Recursos
[Link]: una colección útil de gradientes cónicos.
Guía de MDN sobre los gradientes
Generador de gradientes
3
4
2
1
Verdadero
Falso
Animaciones
bookmark_border
A veces, verás pequeños asistentes en las interfaces que, cuando se hace clic
en ellos, proporcionan información útil sobre esa sección en particular. A
menudo, tienen una animación intermitente que te informa de forma sutil que
la información está allí y que se debe interactuar con ella. ¿Cómo lo hacemos
con CSS?
En CSS, puedes realizar este tipo de animación con animaciones de CSS, que
te permiten establecer una secuencia de animación mediante fotogramas
clave. Las animaciones pueden ser simples, de un estado o incluso secuencias
complejas basadas en el tiempo.
@keyframes
Navegadores compatibles
43
12
16
9
Origen
Ahora que sabes qué es un fotograma clave, ese conocimiento debería
ayudarte a comprender cómo funciona la regla @keyframes de CSS. Esta es
una regla básica con dos estados.
@keyframes my-animation {
from {
transform: translateY(20px);
}
to {
transform: translateY(0px);
}
}
@keyframes my-animation {
0% {
transform: translateY(20px);
}
100% {
transform: translateY(0px);
}
}
Puedes agregar todos los puestos que desees durante el período. Si usamos el
contexto del ejemplo de "pulser", hay 2 estados, que se traducen en 2
fotogramas clave. Esto significa que hay 2 posiciones dentro de la regla de
fotogramas clave para representar los cambios de cada uno de ellos.
@keyframes pulse {
0% {
opacity: 0;
}
50% {
transform: scale(1.4);
opacity: 0.4;
}
}
43
12
16
9
Origen
Para usar tu @keyframes en una regla de CSS, define varias propiedades de
animación o utiliza la propiedad de abreviatura animation.
animation-duration
Navegadores compatibles
43
12
16
9
Origen
.my-element {
animation-duration: 10s;
}
animation-timing-function
Navegadores compatibles
43
12
16
9
Origen
.my-element {
animation-timing-function: cubic-bezier(.42, 0, .58, 1);
}
.my-element {
animation-timing-function: steps(10, end);
}
animation-iteration-count
Navegadores compatibles
43
12
16
9
Origen
.my-element {
animation-iteration-count: 10;
}
Navegadores compatibles
43
12
16
9
Origen
.my-element {
animation-direction: reverse;
}
animation-delay
Navegadores compatibles
43
12
16
9
Origen
.my-element {
animation-delay: 5s;
}
Navegadores compatibles
43
12
16
9
Origen
.my-element:hover {
animation-play-state: paused;
}
animation-fill-mode
Navegadores compatibles
43
12
16
9
Origen
La propiedad animation-fill-mode define qué valores en tu cronograma
de @keyframes se conservan antes de que comience la animación o después
de que finalice. El valor predeterminado es none, lo que significa que, cuando
se completa la animación, se descartan los valores de tu cronograma. No
obstante, también se ofrecen las siguientes opciones:
forwards: Se conservará el último fotograma clave según la dirección de la
animación.
backwards: Se conservará el primer fotograma clave según la dirección de la
animación.
both: Sigue las reglas de forwards y backwards.
La abreviatura animation
En lugar de definir todas las propiedades por separado, puedes definirlas con
una abreviatura animation, lo que te permite definir las propiedades de la
animación en el siguiente orden:
1. animation-name
2. animation-duration
3. animation-timing-function
4. animation-delay
5. animation-iteration-count
6. animation-direction
7. animation-fill-mode
8. animation-play-state
.my-element {
animation: my-animation 10s ease-in-out 1s infinite forwards forwards
running;
}
Verdadero
Falso
0y1
0% y 100%.
start y end.
El animation-timing-function también se conoce comúnmente como
Easing
Tiempos dinámicos
Delay
3
4
1
2
Filtros
bookmark_border
El podcast de CSS (023: Filters)
Nota: Cuando coloques texto sobre las imágenes, asegúrate de que el texto sea
legible en caso de que el navegador del usuario no sea compatible con el efecto de
filtro. Por ejemplo, por el momento, backdrop-filter no es compatible con Firefox,
por lo que deberías comprobar que a los usuarios de Firefox no les quede texto que
no puedan leer fácilmente:
Navegadores compatibles
76
17
103
9
Origen
La propiedad filter
Navegadores compatibles
53
12
35
9.1
Origen
Puedes aplicar uno o muchos de los siguientes filtros como valor para filter. Si
aplicas un filtro de forma incorrecta, el resto de los filtros definidos
para filter no funcionarán.
blur
De esta manera, se aplica un desenfoque gaussiano y el único argumento que
puedes pasar es un radius, que es cuánto desenfoque se aplica. Debe ser una
unidad de longitud, como 10px. No se aceptan los porcentajes.
.my-element {
filter: blur(0.2em);
}
brightness
Navegadores compatibles
18
12
35
6
Origen
.my-element {
filter: brightness(80%);
}
contrast
Navegadores compatibles
18
12
35
6
Origen
grayscale
Navegadores compatibles
18
12
35
6
Origen
.my-element {
filter: grayscale(80%);
}
invert
Navegadores compatibles
18
12
35
6
Origen
.my-element {
filter: invert(1);
}
opacity
Navegadores compatibles
18
12
35
6
Origen
.my-element {
filter: opacity(0.3);
}
saturate
Navegadores compatibles
18
12
35
6
Origen
.my-element {
filter: saturate(155%);
}
sepia
Navegadores compatibles
18
12
35
6
Origen
Puedes agregar un efecto de tono sepia con este filtro que funciona
como grayscale(). El tono sepia es una técnica de impresión fotográfica que
convierte los tonos negros en tonos marrones para entrar en calor. Puedes
pasar un número o porcentaje como argumento de sepia(), lo que aumenta o
disminuye el efecto. Si no pasas ningún argumento, se agrega un efecto sepia
completo (equivalente a sepia(100%)).
.my-element {
filter: sepia(70%);
}
hue-rotate
Navegadores compatibles
18
12
35
6
Origen
En la lección de colores, aprendiste que el matiz de hsl hace referencia a una
rotación de la rueda de colores y que este filtro funciona de manera similar. Si
pasas un ángulo, como grados o giros, se modifica el matiz de todos los
colores del elemento y la parte de la rueda de colores a la que hace
referencia. Si no pasas ningún argumento, no pasa nada.
.my-element {
filter: hue-rotate(120deg);
}
drop-shadow
Navegadores compatibles
18
12
35
6
Origen
Puedes aplicar una sombra paralela con curvas como lo harías en una
herramienta de diseño, como Photoshop con drop-shadow. Esta sombra se
aplica a una máscara alfa que la hace muy útil para agregar una sombra a
una imagen recortada. El filtro drop-shadow toma un parámetro de sombra que
contiene valores de offset-x, offset-y, desenfoque y color separados por
espacios. Es casi idéntico a box-shadow, pero no se admiten la palabra
clave inset ni el valor de distribución.
.my-element {
filter: drop-shadow(5px 5px 10px orange);
}
url
Navegadores compatibles
5
12
3
6
Origen
El filtro url te permite aplicar un filtro SVG de un elemento o archivo SVG
vinculado. Puedes obtener más información sobre los filtros de SVG aquí.
Filtro de fondo
Navegadores compatibles
76
17
103
9
Origen
La propiedad backdrop-filter acepta los mismos valores de funciones de filtro
que filter. La diferencia entre backdrop-filter y filter es que la
propiedad backdrop-filter solo aplica los filtros al fondo, en el que la
propiedad filter se aplica a todo el elemento.
brightness()
grayscale()
invert()
flip()
multiply()
blur()
No
Sí
Modos de fusión
bookmark_border
El podcast de CSS 024: Blend Modes
Duotone es un tratamiento de color popular para fotografía que hace que una imagen parezca que
solo está formada por dos colores contrastantes: uno para zonas brillantes y otro para las zonas con
poca luz. ¿Cómo lo hacemos con CSS?
Con los modos de combinación y otras técnicas que aprendiste, como los filtros y
los pseudoelementos, puedes aplicar este efecto a cualquier imagen.
¿Qué es un modo de fusión?
Los modos de fusión se usan comúnmente en herramientas de diseño, como Photoshop, para crear
un efecto de composición combinando colores de dos o más capas. Cambiar la mezcla de colores
te permite lograr efectos visuales muy interesantes. También puedes usar modos de combinación
como utilidad, como aislar una imagen que tiene un fondo blanco, para que parezca que tiene un
fondo transparente.
Puedes usar la mayoría de los modos de combinación disponibles en una herramienta de diseño
con CSS, mediante las propiedades mix-blend-mode o background-blend-mode. El mix-
blend-mode aplica la combinación a un elemento completo, y el background-blend-
mode aplica la combinación al fondo de un elemento.
Usas background-blend-mode cuando tienes varios fondos en un elemento y quieres que todos
se combinen entre sí.
Navegadores compatibles
41
79
32
8
Origen
background-blend-mode
Navegadores compatibles
35
79
30
8
Origen
Modos de combinación separables
Normal
Este es el modo de fusión predeterminado y no cambia nada sobre cómo un elemento se combina
con otros.
Multiplicar
El modo de combinación multiply es como apilar varias transparencias una encima de la otra. Los
píxeles blancos parecerán transparentes y los negros, negros. Cualquier valor intermedio
multiplicará sus valores de luminosidad (luz). Esto significa que las luces se vuelven mucho más
claras, oscuras y oscuras, lo que suele producir un resultado más oscuro.
.my-element {
mix-blend-mode: multiply;
}
Pantalla
El uso de screen multiplica los valores de luz, un efecto inverso a multiply, y suele producir un
resultado más brillante.
.my-element {
mix-blend-mode: screen;
}
Superposición
Este modo de fusión, overlay, combina multiply y screen. Los colores oscuros base se vuelven
más oscuros y los claros base se vuelven más claros. Los colores de gama media, como el gris al
50%, no se ven afectados.
.my-element {
mix-blend-mode: overlay;
}
Oscurecer
El modo de combinación darken compara la luminosidad del color oscuro de la imagen de origen
y de fondo y selecciona el más oscuro. Para ello, se comparan los valores de RGB en lugar de la
luminosidad (como lo harían multiply y screen) para cada canal de color.
Con darken y lighten, se suelen crear nuevos valores de color a partir de este proceso de
comparación.
.my-element {
mix-blend-mode: darken;
}
Aclarar
.my-element {
mix-blend-mode: lighten;
}
Sobreexposición de color
Si usas color-dodge, se aclara el color de fondo para reflejar el color de origen. Los colores
negro puro no generan ningún efecto con este modo.
.my-element {
mix-blend-mode: color-dodge;
}
Quemado de color
.my-element {
mix-blend-mode: color-burn;
}
Luz fuerte
Si usas hard-light, se crea un contraste intenso. Este modo de fusión filtra o multiplica los valores
de luminosidad. Si el valor de píxeles es más claro que un gris del 50%, la imagen se aclara, como
si estuviera filtrada. Si es más oscuro, se multiplica.
.my-element {
mix-blend-mode: hard-light;
}
Luz suave
.my-element {
mix-blend-mode: soft-light;
}
Diferencia
.my-element {
mix-blend-mode: difference;
}
Exclusión
El uso de exclusion es muy similar a difference, pero en lugar de mostrar negro para píxeles
idénticos, mostrará un 50% de gris, lo que da como resultado un resultado más suave con menos
contraste.
.my-element {
mix-blend-mode: exclusion;
}
Hue
El modo de combinación hue toma el tono del color de origen y lo aplica a la saturación y la
luminosidad del color del fondo.
.my-element {
mix-blend-mode: hue;
}
Saturación
Esto funciona como hue, pero si usas saturation como modo de combinación, se aplica la
saturación del color de origen al tono y la luminosidad del color de fondo.
.my-element {
mix-blend-mode: saturation;
}
Color
El modo de combinación color creará un color a partir del tono y la saturación del color de origen,
y la luminosidad del color de fondo.
.my-element {
mix-blend-mode: color;
}
Luminosidad
Por último, luminosity es lo contrario a color. Crea un color con la luminosidad del color de
origen y el matiz y la saturación del color de fondo.
.my-element {
mix-blend-mode: luminosity;
}
La propiedad isolation
Navegadores compatibles
41
79
36
8
Origen
Si configuras la propiedad isolation para que tenga un valor de isolate, se creará un nuevo
contexto de apilado, lo que impedirá que se combine con una capa de fondo. Como aprendiste en
el módulo de índice z, cuando creas un nuevo contexto de apilado, esa capa se convierte en la capa
base. Esto significa que los modos de combinación a nivel superior ya no se aplicarán, pero los
elementos dentro de un elemento con isolation: isolate establecido pueden aún combinarse.
Aclarar
Dullen
Multiplicar
Superposición
Diferencia
Aclarar
Si quieres combinar diferentes colores de diferentes maneras, ¿qué estilo de modo de combinación
necesitas?
No separable
Separables
¿Te resultó útil?
Listas
bookmark_border
El podcast de CSS - 030: Listas
Imagine que tiene un montón de artículos que planea comprar la próxima vez
que vaya al supermercado. Una forma común de representar esto
visualmente es con una lista, pero ¿cómo puedes agregarle un estilo a tu lista
de compras?
<ul>
<li>oat milk</li>
<li>rhubarb</li>
<li>cereal</li>
<li>pie crust</li>
</ul>
li {
display: list-item;
}
<ol>
<li>oat milk</li>
<li>rhubarb</li>
<li>cereal</li>
<li>pie crust</li>
</ol>
Además, las listas de descripciones se crean con <dl>; sin embargo, este tipo
de lista no usa el elemento de elemento de lista <li>.
<dl>
<dt>oat milk</dt>
<dd>- non dairy trendy drink</dd>
<dt>cereal</dt>
<dd>- breakfast food</dd>
</dl>
Estilos de lista
Navegadores compatibles
1
12
1
1
Origen
Ahora que sabes cómo crear una lista, puedes definir el estilo. Las primeras
propiedades de CSS que se descubren son aquellas que se aplican a toda la
lista.
Existen tres propiedades de estilo de lista que puedes usar para definir el
diseño de tu ejemplo: list-style-position, list-style-image y list-style-type.
list-style-position
list-style-image
list-style-image te permite reemplazar las viñetas de tu lista por imágenes.
Esto te permite configurar una imagen, como url o none, para que tus viñetas
sean incluso imágenes, svg o gif. También puedes usar cualquier tipo de
medio o incluso un URI de datos.
list-style-type
Abreviatura de list-style
/* type */
list-style: square;
/* image */
list-style: url('../img/[Link]');
/* position */
list-style: inside;
/* type | position */
list-style: georgian inside;
/* Keyword value */
list-style: none;
/* Global values */
list-style: inherit;
list-style: initial;
list-style: revert;
list-style: unset;
Esta es la propiedad más usada de los estilos de lista que se analizan en esta
sección. Una aplicación común es list-style: none para ocultar los estilos
predeterminados. Los estilos predeterminados provienen del navegador y,
con frecuencia, verás que el restablecimiento de las hojas de estilo quita los
estilos de lista, como el relleno y los márgenes. También puedes usar esta
abreviatura para establecer estilos, como list-style: square inside;
Hasta ahora, los ejemplos se han centrado en diseñar una lista completa y los
elementos de una lista, pero ¿qué sucede con un enfoque más detallado?
Pseudoelemento ::marker
El elemento marcador list-item es la viñeta, el guion o el número romano que
ayuda a indicar cada elemento de la lista.
::marker {
unicode-bidi: isolate;
font-variant-numeric: tabular-nums;
text-transform: none;
text-indent: 0px !important;
text-align: start !important;
text-align-last: start !important;
}
Cuadro de marcadores
Nota: Nota: Los elementos ::marker preceden a los pseudoelementos que insertaste
con CSS ::before.
Estilos de marcador
animation-*
transition-*
color
direction
font-*
content
unicode-bidi
white-space
Nota: En las listas ordenadas, las viñetas se muestran de forma predeterminada en
números. El valor de contenido ::marker es un caso de uso de contadores para crear
numeración personalizada.
Tipo de visualización
Para ello, agrega la propiedad display: list-item. Un ejemplo del uso de display:
list-item es si deseas una viñeta pendiente en un encabezado, de modo que
puedas cambiarlo a otra cosa con ::marker. En el siguiente ejemplo, se
muestra un encabezado que usa display: list-item para dar estilo, con una lista
que usa el lenguaje de marcado de lista correcto.
::marcador
::lápiz
::contador
::viñeta
<ol>
<ul>
<list>
<lo>
<dl>
<li>
display
background-color
transition
color
Recursos
Guía de MDN sobre listas de diseño
Viñetas personalizadas con CSS ::marker
Smashing Magazine: Listas, marcadores y contadores de CSS
MDN con contadores de CSS
Nivel 3 del módulo de listas y contadores de CSS
Trucos de CSS: Cómo contar con contadores de CSS y cuadrículas de CSS
Transiciones
bookmark_border
El podcast de CSS 044: Transiciones
Al interactuar con un sitio web, es posible que notes que muchos elementos
tienen state. Por ejemplo, los menús desplegables pueden estar abiertos o
cerrados. Es posible que el color de los botones cambie cuando se enfoca o
cuando se coloca el cursor sobre ellos. Los modales aparecen y desaparecen.
Propiedades de transición
Navegadores compatibles
26
12
16
9
Origen
propiedad-de-transición
De manera opcional, puedes usar transition-property: all para indicar que todas
las propiedades deben realizar la transición.
duración de la transición
función-de-tiempo-de-transición
retraso-de-transición
abreviación: transición
.shorthand {
transition: transform 300ms ease-in-out 0s;
}
Transformación
Navegadores compatibles
36
12
16
9
Origen
Por lo general, se realiza la transición de la propiedad transform de CSS porque
es una propiedad acelerada por GPU que da como resultado una animación
más fluida que también consume menos batería. Esta propiedad te permite
ajustar, rotar, trasladar o sesgar un elemento de manera arbitraria.
Consulta la sección sobre transformaciones en nuestro módulo Funciones.
Color
Nota: Por lo general, no es necesario que las transiciones de color estén detrás de
una preferencia de movimiento reducido. Usa tu mejor juicio.
Sombras
Filtros
filter es una propiedad de CSS potente que te permite agregar efectos gráficos
sobre la marcha. La transición entre diferentes estados de filter puede crear
resultados bastante impresionantes.
Consulta nuestro módulo sobre filtros.
Activadores de transición
Tu CSS debe incluir un cambio de estado y un evento que active ese cambio
de estado para que se activen las transiciones de CSS. Un ejemplo típico de
un activador de este tipo es la seudoclase :hover. Esta pseudoclase coincide
cuando el usuario coloca el cursor sobre un elemento con el cursor.
.my-element:hover {
background: blue;
Consideraciones de accesibilidad
Las transiciones de CSS no son para todos. Para algunas personas, las
transiciones y las animaciones pueden causar mareos o molestias.
Afortunadamente, CSS tiene una función multimedia llamada prefers-reduced-
motion que detecta si un usuario indicó preferencia por un menor movimiento
desde su dispositivo.
/*
If the user has expressed their preference for
reduced motion, then don't use transitions.
*/
@media (prefers-reduced-motion: reduce) {
.my-element {
transition: none;
}
}
/*
If the browser understands the media query and the user
explicitly hasn't set a preference, then use transitions.
*/
@media (prefers-reduced-motion: no-preference) {
.my-element {
transition: transform 250ms ease;
}
}
transition-cubic-bezier
transition-timing-function
transition-easing
animation-ease
transition-duration
false
true
false
true
¿Te resultó útil?
Menú ampliado
bookmark_border
El podcast de CSS - 034: Desbordamiento
Navegadores compatibles
x
x
69
x
Origen
Las propiedades overflow-inline y overflow-block establecen el desbordamiento
según la dirección del documento y el modo de escritura.
La abreviatura overflow
Valores
Analicemos con más detalle los valores y las palabras clave disponibles para
las propiedades de overflow.
overflow: hidden
Con overflow: hidden, el contenido se recorta en la dirección especificada y no
se proporcionan barras de desplazamiento para mostrarlo.
overflow: scroll
overflow: scroll habilita las barras de desplazamiento para permitir que los
usuarios se desplacen por el contenido. Incluso si el contenido no está
desbordado, las barras de desplazamiento estarán presentes. Esta es una
excelente manera de reducir el cambio de diseño en el futuro si es posible que
un contenedor sea desplazable en el futuro, por ejemplo, según el cambio de
tamaño, y preparar visualmente al usuario para las áreas desplazables.
overflow: clip
overflow: auto
Por último, el valor más usado: overflow: auto. Esto respeta las preferencias del
usuario y muestra barras de desplazamiento si es necesario, pero las oculta de
forma predeterminada y da la responsabilidad de desplazarse al usuario y al
navegador.
Nota: El uso de la propiedad overflow con un valor distinto de visible crea
un contexto de formato de bloque.
Desplazamiento y desbordamiento
Desplazamiento y accesibilidad
Luego, se puede usar CSS para indicar que el cuadro está enfocado, usando la
propiedad outline para dar una pista visual de que ahora se podrá desplazar.
En Cómo usar CSS para aplicar la accesibilidad, Adrian Roselli demuestra
cómo CSS puede ayudar a prevenir las regresiones de accesibilidad. Por
ejemplo, para activar el desplazamiento y agregar el indicador de enfoque
solo si se usan los atributos correctos. Las siguientes reglas solo permitirán
que el cuadro sea desplazable si tiene atributos tabindex, aria-labelledby y role.
[role][aria-labelledby][tabindex] {
overflow: auto;
}
[role][aria-labelledby][tabindex]:focus {
outline: .1em solid blue;
}
comportamiento-de-desplazamiento
Navegadores compatibles
61
79
36
15.4
Origen
comportamiento-sobredesplazamiento
Navegadores compatibles
63
18
59
16
Origen
Si alguna vez llegaste al final de una superposición modal, luego continúas
desplazándote y la página que se encuentra detrás de la superposición se
movió, se trata del encadenamiento de desplazamiento, o se burbujean hasta
el contenedor de desplazamiento superior. La propiedad overscroll-behavior te
permite evitar que el desplazamiento desbordado se filtre en un contenedor
superior (llamado encadenamiento de desplazamiento).
false
true
La propiedad overflow acepta 2 palabras clave. ¿Para qué eje es la primera?
vertical
horizontal
cuadro de relleno
cuadro de contenido
cuadro de borde
cuadro de margen
overscroll-behavior
scroll-behavior
scroll-hint
overscroll-effect
scroll-padding
Recursos
Sobreflujo y pérdida de datos en CSS de Smashing Magazine
Fondos
bookmark_border
El podcast de CSS - 053: Background
Fondos
Detrás de cada cuadro de CSS, hay una capa especializada denominada capa
de fondo. CSS ofrece una variedad de formas de realizar cambios
significativos en él, incluida la posibilidad de usar varios fondos.
Las capas de fondo están más alejadas del usuario y se renderizan detrás del
contenido de un cuadro a partir de su región padding-box. Esto permite que la
capa de fondo no se superponga con los bordes.
Color de fondo
Navegadores compatibles
1
12
1
1
Origen
Uno de los efectos más simples que puedes aplicar a una capa de fondo es
configurar el color. El valor inicial de background-color es transparent, lo que
permite que el contenido de un elemento superior sea visible. Un conjunto de
color válido en una capa de fondo se encuentra detrás de otros objetos
pintados en ese elemento.
Imágenes de fondo
Navegadores compatibles
1
12
1
1
Origen
Navegadores compatibles
1
12
1
1
Origen
El valor repeat-x repite una imagen solo de forma horizontal. Esto equivale
a repeat no-repeat.
Posición de fondo
Navegadores compatibles
1
12
1
1
Origen
Cuando se utilizan las palabras clave solo, el orden de las palabras clave no
importa:
Sí
Sí
Sí
background-position: left top;
El orden no importa para las palabras clave asociadas con diferentes ejes de posición.
Cuando los valores de CSS se usan junto con las palabras clave, el orden es importante. El primer
valor representa el eje horizontal y el segundo, el eje vertical.
Cuando se usan tres parámetros, la longitud o el valor del CSS puede ser el
segundo o el tercer parámetro, mientras que los otros dos son palabras clave.
La palabra clave que tenga éxito se usará para determinar el límite del valor o
la longitud del CSS que corresponde al desplazamiento. El desplazamiento de
la otra palabra clave especificada se establece en 0.
Sí
Sí
Sí
Cuando se usan cuatro parámetros, las dos palabras clave se combinan con
dos valores que corresponden a un desfase con respecto a los orígenes de
cada palabra clave especificada. Si se aplica background-position: bottom 20%
right 30% a una imagen de fondo, esta se posiciona un 20% desde la parte
inferior y un 30% desde la derecha del cuadro de CSS.
Nota: Para obtener más información sobre los matices relacionados con el
posicionamiento de los fondos, consulta background-position en MDN.
Navegadores compatibles
3
12
4
5
Origen
La propiedad background-size establece el tamaño de las imágenes de fondo.
De forma predeterminada, el tamaño de las imágenes de fondo se ajusta en
función de su ancho, altura y relación de aspecto intrínsecos (reales).
Los últimos 2 están diseñados para usarse de forma independiente sin otro
parámetro.
Navegadores compatibles
1
12
1
1
Origen
La palabra clave local permite que la posición de las imágenes de fondo se fije
en relación con el contenido del elemento. Las imágenes de fondo ahora se
desplazan por el espacio que ocupan, ya que se renderiza dentro y fuera de
los límites del cuadro CSS (generalmente debido a transformaciones de
desplazamiento, 2D o 3D).
Navegadores compatibles
1
12
4
3
Origen
Clip de fondo
Navegadores compatibles
1
12
4
5
Origen
La propiedad background-clip controla lo que se ve visualmente desde una
capa en segundo plano, sin importar los límites que cree la
propiedad background-origin.
Navegadores compatibles
1
12
4
5
Origen
Nota: Esta propiedad no es compatible con la configuración simultánea
de background-clip: text en un cuadro de CSS.
Varios fondos
background-image: url("[Link]
[Link]"),
url("[Link]
linear-gradient(hsl(191deg, 40%, 86%), hsla(191deg, 96%, 96%, 0.5));
background-size: contain, cover, auto;
background-repeat: no-repeat, no-repeat, no-repeat;
background-position: 50% 50%, 10% 50%, 0% 0%;
background-origin: padding-box, border-box, content-box;
Para que sea más fácil darle estilo a la capa de fondo de un cuadro
(especialmente cuando se desean varias capas de fondo), hay una
abreviatura que sigue el siguiente patrón específico:
background:
<background-image>
<background-position> / <background-size>?
<background-repeat>
<background-attachment>
<background-origin>
<background-clip>
<background-color>?
background: url("[Link]
50% 50%/contain no-repeat padding-box,
url("[Link] 10% 50% / cover border-box,
linear-gradient(hsl(191deg, 40%, 86%), hsla(191deg, 96%, 96%, 0.5) ) 0% 0%
/ cover no-repeat content-box ;
Falso
Verdadero
Verdadero
Falso
background-position: left
background-attachment: scroll
background-attachment: fixed
background-position: fixed
background-fixed-to-viewport: true
margin-box
border-box
content-box
padding-box
Texto y tipografía
bookmark_border
El podcast de CSS - 036: Text & Typography
Navegadores compatibles
1
12
1
1
Origen
Usa font-family para cambiar el tipo de letra del texto.
La propiedad font-family acepta una lista de strings separadas por comas, ya
sea que hagan referencia a familias de fuentes específicas o genéricas. Las
familias de fuentes específicas son cadenas entrecomilladas, como
"Helvetica", "EB Garamond" o "Times New Roman". Las familias de fuentes
genéricas son palabras clave como serif, sans-serif y monospace (consulta
la lista completa de opciones en MDN). El navegador mostrará el primer tipo
de letra disponible de la lista proporcionada.
Nota: Cuando el navegador elige qué fuente mostrar de tu declaración de font-
family, no se detiene en la primera fuente disponible de la lista. En cambio,
selecciona las fuentes un carácter a la vez. Si un carácter en particular no está
disponible en la primera fuente de la lista, pasa a la siguiente y así sucesivamente.
Navegadores compatibles
1
12
1
1
Origen
Usa font-style para establecer si el texto debe estar en cursiva o no. font-
style acepta una de las siguientes palabras clave: normal, italic y oblique.
Nota: P.: ¿Cuál es la diferencia entre italic y oblique? R: En las fuentes
compatibles, font-style: italic suele ser una versión cursiva del tipo de letra
normal. font-style: oblique muestra una versión inclinada del tipo de letra normal.
Navegadores compatibles
2
12
1
1
Origen
Usa font-weight para establecer la “negrita” del texto. Esta propiedad acepta
valores de palabras clave (normal, bold), valores relativos de palabra clave
(lighter, bolder) y valores numéricos (de 100 a 900).
Navegadores compatibles
1
12
1
1
Origen
Usa font-size para controlar el tamaño de los elementos de texto. Esta
propiedad acepta valores de longitud, porcentajes y algunos valores de
palabras clave.
Nota: P.: ¿Cuál es la diferencia entre em y rem? R.: En CSS, em representa el font-
size heredado del elemento superior. Por ejemplo, font-size: 2em equivale al valor
de font-size del elemento superior multiplicado por dos. rem es similar, pero, en
cambio, representa el font-size heredado del elemento raíz, es decir, <html>.
Navegadores compatibles
1
12
1
1
Origen
Usa line-height para especificar la altura de cada línea en un elemento. Esta
propiedad acepta un número, una longitud, un porcentaje o la palabra
clave normal. Por lo general, se recomienda usar un número en lugar de una
longitud o un porcentaje para evitar problemas con la herencia.
Cambiar el espacio entre caracteres
Navegadores compatibles
1
12
1
1
Origen
Usa letter-spacing para controlar la cantidad de espacio horizontal entre los
caracteres de tu texto. Esta propiedad acepta valores de longitud
como em, px y rem.
Navegadores compatibles
1
12
1
1
Origen
Usa word-spacing para aumentar o disminuir la longitud del espacio entre cada
palabra del texto. Esta propiedad acepta valores de longitud
como em, px y rem. Ten en cuenta que la longitud que especificas
corresponde al espacio adicional, además del espaciado normal. Esto significa
que word-spacing: 0 es equivalente a word-spacing: normal.
Abreviatura de font
Puedes usar la propiedad abreviada font para establecer muchas propiedades
relacionadas con la fuente a la vez. La lista de propiedades posibles es font-
family, font-size, font-stretch, font-style, font-variant, font-weight y line-height.
Consulta el artículo font de MDN para obtener información específica sobre
cómo pedir estas propiedades.
Cómo cambiar mayúsculas y minúsculas del texto
Navegadores compatibles
1
12
1
1
Origen
Usa text-transform para modificar las mayúsculas del texto sin necesidad de
cambiar el HTML subyacente. Esta propiedad acepta los siguientes valores de
palabra clave: uppercase, lowercase y capitalize.
Subrayar, subrayar y agregar líneas al texto
Navegadores compatibles
1
12
1
1
Origen
Usa text-decoration para agregar líneas al texto. Por lo general, los subrayados
son los más utilizados, pero es posible agregar líneas encima del texto o
directamente a través de él.
Navegadores compatibles
1
12
1
1
Origen
Usa text-indent para agregar una sangría a tus bloques de texto. Esta
propiedad toma una longitud (por ejemplo, 10px, 2em) o un porcentaje del
ancho del bloque contenedor.
Cómo abordar el contenido oculto o desbordado
Navegadores compatibles
1
12
7
1.3
Origen
Usa text-overflow para especificar cómo se representa el contenido oculto.
Existen dos opciones: clip (la opción predeterminada), que trunca el texto en
el punto de desbordamiento; y ellipsis, que muestra puntos suspensivos (...)
en el punto de desbordamiento.
Controlar los espacios en blanco
Navegadores compatibles
1
12
1
1
Origen
La propiedad white-space se usa para especificar cómo se deben controlar los
espacios en blanco en un elemento. Para obtener más detalles, consulta
el artículo de white-space sobre MDN.
white-space: pre puede ser útil para renderizar arte ASCII o bloques de código
con sangría cuidadosamente.
Controla cómo se rompen las palabras
Navegadores compatibles
1
12
15
3
Origen
Usa word-break para cambiar la forma en que las palabras deben estar "rotas"
cuando sobrepasan la línea. De forma predeterminada, el navegador no divide
palabras. Si usas el valor de palabra clave break-all para word-break, se
indicará al navegador que divida las palabras en caracteres individuales si es
necesario.
Cómo cambiar la alineación del texto
Navegadores compatibles
1
12
1
1
Origen
Usa text-align para especificar la alineación horizontal del texto en un bloque o
elemento de una celda de la tabla. Esta propiedad acepta los valores de
palabra clave left, right, start, end, center, justify y match-parent.
Los valores left y right alinean el texto a los lados izquierdo y derecho del
bloque, respectivamente.
Usa start y end para representar la ubicación del principio y el final de una
línea de texto en el modo de escritura actual. Por lo tanto, start se asigna
a left en inglés y a right en alfabeto árabe, que se escribe de derecha a
izquierda (RTL). Son alineaciones lógicas. Obtén más información en nuestro
módulo de propiedades lógicas.
Navegadores compatibles
2
12
1
1
Origen
Usa direction para definir la dirección del texto, que puede ser ltr (de izquierda
a derecha, predeterminada) o rtl (de derecha a izquierda). Algunos idiomas,
como el árabe, el hebreo o el persa, se escriben de derecha a izquierda, por lo
que se debe usar direction: rtl. Para inglés y todos los demás idiomas que se
escriben de izquierda a derecha, usa direction: ltr.
Precaución: Por lo general, te recomendamos que uses el atributo HTML dir en
lugar de direction. Consulta esta discusión de Stack Overflow para obtener más
detalles.
Navegadores compatibles
48
12
41
10.1
Origen
Usa writing-mode para cambiar la forma en que fluye y se organiza el texto. El
valor predeterminado es horizontal-tb, pero también puedes establecer writing-
mode en vertical-lr o vertical-rl para el texto que deseas que fluya
horizontalmente.
Cómo cambiar la orientación del texto
Navegadores compatibles
48
79
41
14
Origen
Usa text-orientation para especificar la orientación de los caracteres en el
texto. Los valores válidos para esta propiedad son mixed y upright. Esta
propiedad solo es relevante cuando writing-mode está configurado en un valor
distinto de horizontal-tb.
Cómo agregar una sombra al texto
Navegadores compatibles
2
12
3.5
1.1
Origen
Usa text-shadow para agregar una sombra al texto. Esta propiedad espera tres
longitudes (x-offset, y-offset y blur-radius) y un color.
Consulta la sección text-shadow de nuestro módulo sobre sombras para
obtener más información.
Fuentes variables
Consulta nuestro artículo sobre fuentes variables para obtener más detalles.
Seudoelementos
Término clave: un seudoelemento es una parte de un elemento que puedes
segmentar con palabras clave de CSS sin necesidad de agregar más código HTML.
Consulta nuestro módulo sobre pseudoelementos para obtener un análisis detallado
de este tema.
1
12
1
1
Origen
Los pseudoelementos ::first-letter y ::first-line se orientan a la primera letra y la
primera línea de un elemento de texto, respectivamente.
Pseudoelemento ::selection
Navegadores compatibles
1
12
62
1.1
Origen
Usa el seudoelemento ::selection para cambiar la apariencia del texto
seleccionado por el usuario.
font-variant
Navegadores compatibles
1
12
1
1
Origen
La propiedad font-variant es una abreviatura de varias propiedades de CSS que
te permiten elegir variantes de fuente, como small-caps y slashed-zero. Las
propiedades de CSS que se incluyen en esta abreviatura son font-variant-
alternates, font-variant-caps, font-variant-east-asian, font-variant-ligatures y font-
variant-numeric. Consulta los vínculos de cada propiedad para obtener más
detalles sobre su uso.
sans-serif
monospace
italic
serif
helvetica
sci-fi
text-capitalize: true;
text-transform: capitalize;
font-style: capitals;
font-variant: capitalize;
text-case: capitalize;
Falso
Verdadero
¿Qué propiedad de CSS se puede usar para cambiar el espacio entre las líneas
de texto?
line-spacing
baseline-distance
leading
line-height
Recursos
En Prácticas recomendadas sobre fuentes, se aborda la importación y la
renderización de fuentes, además de otras prácticas recomendadas para usar
fuentes en la Web.
Estilos fundamentales de texto y fuente de MDN .
Conclusión y próximos pasos
bookmark_border
El podcast de CSS - 025: Resumen de la temporada 1
Tal vez te preguntes adónde puedes ir a partir de aquí. Una de las mejores
formas de aprender es aprender de la práctica: prueba tus nuevas habilidades
de CSS creando tu propio sitio web. Explora estos recursos adicionales para
seguir desarrollando tus habilidades de CSS:
Recursos adicionales
Documentación de CSS sobre MDN
Escuchar el podcast de CSS
Artículos de CSS en [Link]
How To Learn CSS (Cómo aprender CSS: Smashing Magazine)
Trucos de CSS
Layout Land - YouTube
Servicio brindado por
Adam Argyle
Andy Bell
Camden Bickel
Emma Twersky
Jiwoong Lee
Kayce Basques
Kevin Lozandier
Rachel Andrew
Rob Dodson
Una Kravets