Hay un atributo HTML que hace exactamente lo que cree que debería hacer:
<div>I'm visible</div>
<div hidden>I'm hidden</div>
Incluso tiene un gran soporte para navegadores. ¿Es útil? Uhm. Quizás. Realmente no.
A Adam Laki le gusta la semántica:
Si usamos el atributo oculto, mejoramos un poco nuestra semántica. Cualquiera entenderá qué significa un atributo “oculto” en un elemento.
Monica Dinculescu lo llama mentira:
el hidden
La regla es un estilo de agente de usuario, lo que significa que es menos específica que un estornudo moderado. Esto significa que tu favorito display
el estilo lo anulará:
<style>
div { display: block; }
</style>
<div hidden>
lol guess who's not hidden anymore
hint: it's this thing
</div>
Entonces, dos problemas relacionados …
- Es extremadamente débil. Literalmente cualquier cambio en el
display
propiedad que no sea lanone
el valor en el elemento con cualquier selector de fuerza lo anulará. Al igual que cualquier otra propiedad de visualización, comowidth
o lo que sea, excepto que de alguna manera se siente peor tener unhidden
atributo activamente en un elemento y que no esté realmente oculto. - El
display
La propiedad está tristemente sobrecargada de responsabilidades. Sería genial sihidden
era una propiedad de CSS que podría estar a cargo de la visibilidad / acceso de los elementos en lugar de la misma propiedad que controla el tipo de bloque que es. Pero, por desgracia, la compatibilidad con versiones anteriores 4-lyfe de la web detiene eso (lo cual es bueno para la salud de la web en general).
Si realmente amas la semántica del atributo, Monica sugiere:
[hidden] { display: none !important; }
Parece una buena adición a cualquier “reinicio” o hoja de estilo base.
De lo contrario, la técnica clásica de ocultar cosas con una clase está absolutamente bien. Normalmente tengo una clase de utilidad:
.hide, .hidden {
display: none;
}
Pero recuerde que siempre hay un millón de formas de hacer las cosas. Regularmente me encuentro haciendo mecanismos únicos de ocultar / mostrar. Por ejemplo, un menú en el que necesita alternar la visibilidad con estilo, pero permanecer accesible en todo momento …
.menu {
opacity: 0;
visibility: hidden;
transition: 0.2s;
transform: translateX(20px);
&[data-open] {
opacity: 1;
visibility: visible;
transform: translateX(0);
}
}