Por qué usar.h1 en lugar de h1 real?


Dentro del proyecto CSS Bootstrap , se proporcionan estilos para las etiquetas de encabezado (H1, H2, H3, H4, H5, H6), pero también hay una serie de nombres de clase basados en los encabezados (.h1, .h2, .h3, .h4, .h5, .h6). ¿Cuál es el beneficio obtenido al usar el nombre de clase de un H1 sin usar correctamente la etiqueta H1? Creo que siempre quieres asegurarte de que tu HTML refleje tu importancia visual.

Cualquier pensamiento que explique una buena razón para usar .h1 en lugar de usar una etiqueta h1 se agradecería.

Author: animuson, 2013-09-30

7 answers

Usted pregunta:

¿Por qué usar .h1 en lugar de h1 real?

Respuesta corta:

El objetivo es usar ambos, juntos.

La utilidad de las clases .h* entra en juego cuando el tamaño de la tipografía en el diseño no se correlaciona con los niveles de encabezado semánticamente apropiados. Al dividir el problema en dos, podemos resolver limpiamente para ambos.

El primer bit es el elemento/etiqueta. El '<h*> ' se encarga de la semántica, accesibilidad y SEO.

El segundo bit es la clase. El '.h* ' se ocupa de la semántica visual y la jerarquía tipográfica.

Respuesta larga:

Creo que los orígenes de estas clases provienen del proyecto OOCSS:

CSS orientado a objetos

La última iteración de OOCSS ha cambiado un poco desde la última vez que lo miré, pero aquí está el archivo heading.css relevante, de un commit anterior, que tiene el .h1 - .h6 clases que conozco con:

6e481bc18f oocss / core / heading / heading.css

De los comentarios:

.h1-.h6 las clases deben utilizarse para mantener los niveles semánticamente apropiados de las partidas - NO deben utilizarse en partidas que no sean
...
si se necesitan encabezados adicionales, deben crearse a través de clases adicionales, nunca a través de estilos dependientes de la ubicación

Note el énfasis arriba.

Para una buena explicación en cuanto a por qué uno usaría estas clases, ver:

  1. stubbornella.org: No estilizar encabezados Usando Secciones HTML5 (Nicole, la autora de este post, es la creadora de OOCSS)
  2. csswizardry.com: Pragmático, práctico tamaño de fuente en CSS
  3. Google Agrupa encabezados "CSS Orientado a objetos" pregunta: ¿Concepto básico/uso? (Una pregunta que hice en septiembre del 12)

Citas relevantes de la enlaces anteriores:

1. stubbornella.org

... [HTML5] Los elementos de sección están destinados a ayudar al navegador a averiguar qué nivel es realmente el encabezado, pero no necesariamente para decidir cómo darle estilo.

Entonces, ¿cómo diseñamos los encabezados en un mundo HTML5?

... No debemos usar elementos seccionadores para el estilo. Deberíamos dejarles hacer el trabajo para el que fueron diseñados, que es ordenar el árbol de documentos y resolver problemas de estilo otra forma que cumple mejor nuestros objetivos: con nombres de clase reutilizables simples que se pueden aplicar a cualquiera de nuestros encabezados sin importar cuán profundos sean en el contenido de la sección.

Recomiendo abstraer los encabezados de todo el sitio en clases porque entonces son portátiles, predecibles y secos. Puedes llamarlos como quieras.

2. csswizardry.com

Otra pepita absolutamente estelar de sabiduría [Nicole Sullivan nos ha] dado es lo que llama a la jerarquía de encabezados de doble cadena. Esta es la práctica de definir una clase cada vez que define un encabezado en CSS.

... Al asignar una clase junto con cada estilo de encabezado, ahora tenemos esos estilos conectados a un selector muy flexible que se puede mover a cualquier lugar, en lugar de a uno muy específico y no móvil.

3. groups.google.com

Aquí hay un ejemplo de uso de pseudo-html5 (h / t Jamund Ferguson):

<body>
    <div class="main">
        <h1>Main Heading</h1>
        <section>
            <h1 class="h2">Section Header</h1>
        </section>
    </div>
    <aside class="side">
        <article class="widget">
            <h1 class="h3">Sidebar Headings</h1>
        </article>
        <article class="widget">
            <h1 class="h3">Sidebar Headings</h1>
        </article>
    </aside>
</body>

Por favor, lea los artículos completos (y el hilo), a través de los enlaces anteriores, para obtener información más detallada relacionada con esta pregunta/tema.

 57
Author: mhulse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-09 23:50:39

La mayoría de las hojas de estilo tienen un conjunto de tamaños de fuente que se corresponden con los estilos de encabezado del 1 al 6. A veces, en otras partes de la página, los diseñadores web quieren usar esos mismos tamaños de fuente en el texto que debería no ser parte de un elemento de encabezado real, por razones semánticas. En lugar de proporcionar nombres para cada uno de esos tamaños como .size-12, .size-14, .size-16, etc, es más fácil simplemente nombrarlos a todos con nombres de clase similares a sus encabezados. De esa manera, usted sabe que el texto será del mismo tamaño que un Elemento H1, aunque en realidad no es un elemento H1. He hecho esto un par de veces.

 32
Author: animuson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 16:51:48

Algunas razones que se me ocurren:

  • Usando div en lugar de etiqueta adecuada para obtener la visual de un encabezado sin un impacto en SEO
  • Para evitar complicaciones de inconsistencias del navegador
  • Compatibilidad con otras bibliotecas y frameworks que optan por hacer lo mismo por las razones 1 y 2
  • Flexibilidad de diseño (como señaló @scrappedcola en los comentarios)
 8
Author: Mike H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 16:48:52

Esto permite una separación de la jerarquía visual de la jerarquía semántica. por ejemplo, quiero decirle al espectador una cosa, mientras que decirle a una computadora (motores de búsqueda) algo más.

<article>
    <h1 class="h1">Page Title</h1>
    <p>Some content</p>
    <section>
        <h1 class="h2">Section Heading</h1>
        <div class="h6">Sub Heading</div>
        <p>Some content</p>
    </section>
    <section>
        <h1 class="h2">Section Heading 2</h1>
        <div class="h6">Sub Heading 2</div>
        <p>Some content 2</p>
    </section>
</article>

Véase:

 5
Author: Byran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 17:32:39

Lo único que se me ocurre de repente es para los motores de búsqueda. Muchos verán una etiqueta h1 real como el título o asunto de una página y la usarán para búsquedas, etc. Tener múltiples etiquetas h1 puede confundir a las arañas del motor de búsqueda y puede arruinar las búsquedas que devolverían resultados para su sitio (también he oído que puede conseguirle en la lista de "sitio malo" con algunas arañas como Google).

Tener los estilos le permite tener el mismo aspecto visual a un elemento sin arruinar la búsqueda motor.

 1
Author: Becuzz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 16:50:19

Otra razón que he encontrado recientemente... esto no es particular de Angular pero sirve como un buen ejemplo:

Quiero crear formularios dinámicos/declarativos en Angular (consulte Formularios dinámicos en el libro de cocina de Angular) y permitir elementos de texto con estilo. La máxima flexibilidad requeriría permitirme agregar declarativamente elementos HTML arbitrarios a mis formularios, pero esto está abierto a ataques de scripting, y requiere una subversión explícita del compilador Angular para incluso permitirlo. En su lugar, permito elementos de texto que se agregarán a los formularios, junto con una clase para controlar el estilo. Así que puedo usar el .estilo h1 pero no el elemento h1.

 0
Author: Peter Swords,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-25 01:25:44

Esto definitivamente ayudaría en términos de SEO y rastreadores de Google a entender mejor tu página. Cuando lee h1, asume que lo que está allí debe ser el punto focal de la página. H2, serían los segundos componentes y así sucesivamente. De esta manera, Google puede entender el "alcance" de lo que cubre tu página en términos de contenido.

No estoy del todo seguro, pero una gran variable en mi opinión sería el modo "leído" de las páginas. Esto permitiría a los dispositivos y lectores organizar el contenido especialmente para dispositivos utilizados por personas con discapacidad visual.

También proporciona estructura a la página y un sentido de orden.

 0
Author: agc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-21 07:09:56