Una colección de consejos para ayudarte a mejorar tus conocimientos profesionales de CSS.
Para ver otras listas geniales, echa un vistazo a la lista curada por [@sindresorhus](https://github.com/sindresorhus/) de listas Awesome.
box-sizing
unset
en lugar de restablecer todas las
propiedades
:not()
para Aplicar o Cancelar la aplicación de
bordes en la navegación
line-height
al body
:focus
para elementos de formulario
nth-child
negativo
max-height
para Sliders con CSS puro
rem
para tamaños globales; Usar
em
para tamaños locales
:root
para una tipografía flexible
font-size
en los elementos de formulario para
una mejor experiencia móvil
display: none
en Saltos de línea utilizados
como espaciado
Los CSS Resets ayudan a hacer cumplir la coherencia de estilo en los diferentes navegadores, como una hoja en blanco para los elementos de estilo. Puedes utilizar una biblioteca CSS Reset como Normalize, y otros, o puedes utilizar un enfoque más simplificado para el reset:
Ahora los elementos están despojados de márgenes y paddings, y
box-sizing
te permite administrar el diseño con el modelo de
caja de CSS.
Nota: Si sigues el consejo de más abajo
Heredar box-sizing
puedes
optar por no incluir la propiedad box-sizing
en tu CSS reset.
volver al índice de contenidos
box-sizing
Heredar box-sizing
de html
:
Esto hace que sea más fácil cambiar box-sizing
en plugins u
otros componentes que aprovechan otros comportamientos.
volver al índice de contenidos
unset
en lugar de restablecer todas las propiedades
Al restablecer las propiedades de un elemento, no es necesario restablecer cada propiedad individual:
button {
background: none;
border: none;
color: inherit;
font: inherit;
outline: none;
padding: 0;
}
Puede especificar todas las propiedades de un elemento usando la
declaraciones cortas all
. Establecer el valor a
unset
cambia las propiedades de un elemento a sus valores
iniciales:
Nota: la abreviatura all
yunset
no es compatible con IE11.
volver al índice de contenidos
:not()
para Aplicar o Cancelar la aplicación de bordes
en la navegación
En lugar de poner en el borde…
… para luego quitarlo del último elemento…
… utiliza la pseudo-clase :not()
para sólo aplicar el estilo
a los elementos que deseas:
El selector CSS define los bordes de la forma en que un ser humano lo describiría.
volver al índice de contenidos
Puede verificar si una fuente está instalada localmente antes de buscarla de forma remota, lo que también es un buen consejo de rendimiento.
@font-face {
font-family: "Dank Mono";
src:
/* Full name */
local("Dank Mono"),
/* Postscript name */
local("Dank Mono"),
/* Otherwise, download it! */
url("//...a.server/fonts/DankMono.woff");
}
code {
font-family: "Dank Mono", system-ui-monospace;
}
Felicitaciones a Adam Argyle por compartir este protip y demo.
volver al índice de contenidos
line-height
al body
No es necesario añadir line-height
a
cada<p>
,<h *>
, et al. por
separado. En su lugar, agregalo al body
:
De esta manera los elementos de texto pueden heredarlo fácilmente de
body
.
volver al índice de contenidos
:focus
para elementos de formulario
Los usuarios de teclado videntes confían en el enfoque para determinar dónde van los eventos del teclado en la página. Haga que el enfoque de los elementos de formulario se destaque y sea coherente con la implementación predeterminada de un navegador:
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus {
box-shadow: none;
outline: #000 dotted 2px;
outline-offset: .05em;
}
volver al índice de contenidos
No, no es magia negra, realmente puedes centrar elementos verticalmente:
html,
body {
height: 100%;
margin: 0;
}
body {
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-flex;
display: flex;
}
…y también con CSS Grid:
¿Quieres centrar algo más? Vertical, horizontal… cualquier cosa, en cualquier momento y en cualquier lugar? CSS-Tricks tiene un bonito artículo para hacer todo eso.
Nota: mira algunos comportamientos erróneos de Flexbox en IE11.
volver al índice de contenidos
Hacer que los elementos de la lista se vean de forma real, separados por comas:
Utilice la pseudo-clase :not()
para agregar una coma al
último elemento.
Nota: Este consejo puede no ser ideal para la accesibilidad, específicamente para lectores de pantalla. Y copiar / pegar desde el navegador no funciona con el contenido generado por CSS. Procede con precaución.
volver al índice de contenidos
nth-child
negativo
Utiliza nth-child
negativo en CSS para seleccionar los
numerales de 1 a n.
li {
display: none;
}
/* seleccionar los elementos de 1 hasta 3 y muestralos */
li:nth-child(-n+3) {
display: block;
}
O bien, como ya has aprendido un poco sobre
el uso de :not()
, trata de:
/* seleccionar todos los elementos excepto los 3 primeros y mostrarlos */
li:not(:nth-child(-n+3)) {
display: none;
}
Bueno, éso ha sido bastante fácil.
volver al índice de contenidos
No hay ninguna razón para no usar SVG para los íconos:
SVG funciona bien para todos los tipos de resoluciones y es compatible con todos los navegadores hasta IE9. Así que olvidate de tus archivos .png, .jpg o .gif-jif-loquesea.
Nota: Si tienes botones de íconos con SVG para usuarios no videntes y el SVG falla al cargar, esto te ayudará a mantener la accesibilidad:
volver al índice de contenidos
Puede que tenga un nombre extraño, pero utilizando el selector universal
(*
) con el selector de hermanos adyacentes (+
)
puedes proporcionar una potente capacidad de CSS:
En este ejemplo, todos los elementos del flujo del documento que siguen
otros elementos recibirán margin-top: 1.5em
.
Para más información sobre el selector “búho lobotomizado”, lee el post de Heydon Pickering en A List Apart.
volver al índice de contenidos
max-height
para Sliders con CSS puro
Implementar un slider con CSS puro utilizando max-height
con
overflow hidden.
.slider {
max-height: 200px;
overflow-y: hidden;
width: 300px;
}
.slider:hover {
max-height: 600px;
overflow-y: scroll;
}
El elemento se expande hasta el valor de max-height
en hover
y el slider se muestra como resultado del desbordamiento (overflow).
volver al índice de contenidos
Las tablas pueden ser dolorosas para trabajar, por lo que se trate de usar
table-layout: fixed
para mantener las celdas con el mismo
ancho:
Diseño de tablas sin dolor.
volver al índice de contenidos
Cuando trabajas con el espaciado entre columnas puedes deshacerte de los
hacks con nth-
, first-
y
last-child
mediante el uso de la propiedad
space-between
de Flexbox:
Ahora las columnas aparecen siempre espaciadas uniformemente.
volver al índice de contenidos
Mostrar vínculos cuando el elemento <a>
no tiene un
valor de texto, pero el atributo href
tiene un enlace:
Eso es bastante conveniente.
volver al índice de contenidos
Añadir un estilo a los enlaces “por defecto”:
Ahora los enlaces que se insertan a través de un CMS, que por lo general
no tienen un atributo class
, tendrán una distinción sin
afectar de forma genérica la cascada.
volver al índice de contenidos
Utilice un selector universal (*
) dentro de un elemento para
crear un ritmo vertical consistente:
Un ritmo vertical consistente proporciona una estética visual que hace que el contenido sea mucho más legible.
volver al índice de contenidos
Para crear un cuadro con una proporción intrínseca, todo lo que tiene que hacer es aplicar un padding superior o inferior a un div:
.container {
height: 0;
padding-bottom: 20%;
position: relative;
}
.container div {
border: 2px dashed #ddd;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
Usando un 20% de padding hace que la altura de la caja sea igual al 20% de su anchura. No importa el ancho de la ventana, el div hijo va a mantener su relación de aspecto (100% / 20% = 5: 1).
volver al índice de contenidos
Haz que las imágenes rotas sean estéticamente más agradables con un poco de CSS:
img {
display: block;
font-family: sans-serif;
font-weight: 300;
height: auto;
line-height: 2;
position: relative;
text-align: center;
width: 100%;
}
Ahora añade propiedades desde los pseudo-elementos para mostrar un mensaje al usuario y una referencia de dirección URL de la imagen rota:
img::before {
content: "We're sorry, the image below is broken :(";
display: block;
margin-bottom: 10px;
}
img::after {
content: "(url: " attr(src) ")";
display: block;
font-size: 12px;
}
Aprende más sobre el estilo de este patrón en post original de Iré Aderinokun.
volver al índice de contenidos
rem
para tamaños globales; Usar em
para
tamaños locales
Después de definir el tamaño de la fuente base en la raíz (html { font-size: 100%; }
), ajusta el tamaño de fuente para los elementos textuales con
em
:
A continuación, establezca el tamaño de fuente para los módulos con
rem
:
Ahora cada módulo se vuelve compartimentado y más fácil de estilizar, más fácil de mantener, y más flexible.
volver al índice de contenidos
Este es un gran truco para una hoja de estilo de usuario personalizada. Evita la sobrecarga de un usuario con el sonido de un vídeo que se reproduce automáticamente cuando se carga la página. Si el sonido no está silenciado, no se muestra el video:
Una vez más, estamos tomando ventaja de usar la pseudo-clase
:not()
.
volver al índice de contenidos
:root
para una tipografía flexible
El tamaño de tipo de letra en un diseño que responde debe ser capaz de
ajustar con cada ventana. Se puede calcular el tamaño de la fuente basada
en la altura y la anchura de la ventana gráfica usando :root
:
Ahora se puede utilizar la unidad de root em
basado en el
valor calculado por :root
:
volver al índice de contenidos
font-size
en los elementos de formulario para una
mejor experiencia móvil
Para evitar que los navegadores móviles (iOS Safari, et al.)
hagan zoom sobre los elementos de un formulario HTML cuando un
<select>
desplegable es pulsado, agrega
font-size
a la regla del selector:
:dancer:
volver al índice de contenidos
Eventos del puntero le permiten especificar cómo el mouse interactúa con el elemento que está tocando. Para deshabilitar el evento de puntero predeterminado en un botón, por ejemplo:
Es así de simple.
volver al índice de contenidos
display: none
en Saltos de línea utilizados como
espaciado
Como señaló [Harry Roberts] (https://twitter.com/csswizardry/status/1170835532584235008), esto puede ayudar a evitar que los usuarios de CMS usen saltos de línea adicionales para el espaciado:
volver al índice de contenidos
Las versiones actuales de Chrome, Firefox, Safari, Opera, Edge y IE11.