¿Puedo orientar todas las etiquetas <H> con un solo selector?

154

Me gustaría apuntar a todas las etiquetas h en una página. Sé que puedes hacerlo de esta manera ...

h1,
h2,
h3,
h4,
h5,
h6 {
  font: 32px/42px trajan-pro-1,trajan-pro-2;
}

¿Pero hay una manera más eficiente de hacer esto usando selectores avanzados de CSS? por ejemplo, algo como:

[att^=h] {
  font: 32px/42px trajan-pro-1,trajan-pro-2;
}

(pero obviamente esto no funciona)

SparrwHawk
fuente
8
Esto se vuelve cada vez más tedioso al seleccionarh1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, ...
Vortico

Respuestas:

128

No, una lista separada por comas es lo que quiere en este caso.

Dave Markle
fuente
14
Para aquellos que llegan aquí desde google y se preguntan qué significa una lista separada por comas en CSS, es el primer ejemplo que dio OP. Es decir, h1, h2, h3 {}.
bluesmonk
44

No es CSS básico, pero si está utilizando MENOS ( http://lesscss.org ), puede hacerlo utilizando la recursividad:

.hClass (@index) when (@index > 0) {
    h@{index} {
        font: 32px/42px trajan-pro-1,trajan-pro-2;
    }
    .hClass(@index - 1);
}
.hClass(6);

Sass ( http://sass-lang.com ) le permitirá administrar esto, pero no permitirá la recursividad; tienen @forsintaxis para estos casos:

@for $index from 1 through 6 {
  h#{$index}{
    font: 32px/42px trajan-pro-1,trajan-pro-2;
  }
}

Si no está utilizando un lenguaje dinámico que se compila a CSS como LESS o Sass, definitivamente debe consultar una de estas opciones. Realmente pueden simplificar y hacer más dinámico su desarrollo CSS.

Steve
fuente
12
Estoy bastante seguro de que escribir manualmente en lugar de crear un bucle en CSS como h1, h2, h3 ... lleva menos tiempo, espacio ... más claro de entender ahora y más adelante.
Muhammad Umer
¯_ (ツ) _ / ¯ "can" != "should". Aun así, las opciones Sass / LESS le brindan una extensibilidad que el CSS estándar no ofrece. Piensa en algo como font-size: (48px / @index).
Steve
Eso está bien si se ajusta mejor a tus necesidades. Como se mencionó en un comentario anterior, si por alguna razón necesita operar en el índice en MENOS o Sass, este enfoque le permite hacerlo fácilmente. Su implementación puede ser dinámica en función del número de encabezado.
Steve
Para las personas que no desean integrarse scss/sassen su proyecto, pero que desean generar csscon scss/sassellas, pueden usar esta herramienta en línea llamada sassmeister
Sameer Khan
37

Si usa SASS, también podría usar este mixin:

@mixin headings {
    h1, h2, h3,
    h4, h5, h6 {
        @content;
    }
}

Úselo así:

@include headings {
    font: 32px/42px trajan-pro-1, trajan-pro-2;
}

Editar: mi forma favorita de hacer esto al ampliar opcionalmente un selector de marcador de posición en cada uno de los elementos de encabezado.

h1, h2, h3,
h4, h5, h6 {
    @extend %headings !optional;
}

Entonces puedo apuntar a todos los encabezados como apuntaría a cualquier clase individual, por ejemplo:

.element > %headings {
    color: red;
}
Ben Fleming
fuente
Es un paso muy pequeño de SCSS a SCSS + Compass: compass-style.org/reference/compass/helpers/selectors - headings ($ from, $ to)
Imperativo
1
Wow, me encontré con esto dos años después ... ¡y la edición se ve dorada! ¿Estoy seguro de entender el propósito de la !optionalbandera en la extensión? Y parece que no puedo encontrar nada en Google ...
Bill
3

Stylus 's interpolación selector

for n in 1..6
  h{n}
    font: 32px/42px trajan-pro-1,trajan-pro-2;
laggingreflex
fuente
Esto no funciona. Pruebe su código antes de publicar una respuesta, ya que esto es perjudicial para cualquier persona que pueda intentar usarlo. Edité tu respuesta con código probado y funcional.
Desarrollador web híbrido
@Hybridwebdev Parece estar funcionando para mí. También es cómo los documentos describen la iteración
laggingreflex
3

El selector jQuery para todas las etiquetas h (h1, h2, etc.) es ": encabezado". Por ejemplo, si desea que todas las etiquetas h sean de color rojo con jQuery, use:

$(':header').css("color","red")

Fabian Madurai
fuente
¿Puedes apuntar a todos los encabezados dentro de un div específico solamente? por ejemplo $('.my_div :header').css("color","red")?
user1063287
1

Para abordar esto con CSS vainilla, busque patrones en los antepasados ​​de los h1..h6elementos:

<section class="row">
  <header>
    <h1>AMD RX Series</h1>
    <small>These come in different brands and types</small>
  </header>
</header>

<div class="row">
  <h3>Sapphire RX460 OC 2/4GB</h3>
  <small>Available in 2GB and 4GB models</small>
</div>

Si puede detectar patrones, puede escribir un selector que apunte a lo que desea. Teniendo en cuenta el ejemplo anterior todos los h1..h6elementos pueden ser el blanco de la combinación de la :first-childy :notpseudo-clases de CSS3, disponible en todos los navegadores modernos, así:

.row :first-child:not(header) { /* ... */ }

En el futuro, los selectores avanzados de pseudo-clase como :has(), y los combinadores de hermanos posteriores ( ~), proporcionarán aún más control a medida que los estándares web continúen evolucionando con el tiempo.

Josh Habdas
fuente
1

También puede usar PostCSS y el complemento de selectores personalizados

@custom-selector :--headings h1, h2, h3, h4, h5, h6;

article :--headings {
  margin-top: 0;
}

Salida:

article h1,
article h2,
article h3,
article h4,
article h5,
article h6 {
  margin-top: 0;
}
Mattia Astorino
fuente
1

Puede clasificar todos los encabezados en su documento si desea orientarlos con un solo selector, de la siguiente manera,

<h1 class="heading">...heading text...</h1>
<h2 class="heading">...heading text...</h2>

y en el css

.heading{
    color: #Dad;
    background-color: #DadDad;
}

No digo que esto sea siempre una práctica recomendada, pero puede ser útil y, para orientar la sintaxis, es más fácil de muchas maneras,

así que si le das a todos h1 a h6 la misma clase .heading en el html, entonces puedes modificarlos para cualquier documento html que utilice esa hoja css.

al revés, más control global versus "sección div artículo h1, etc. {}",

inconveniente, en lugar de llamar a todos los selectores en el lugar en el CSS, tendrá que escribir mucho más en el html, pero encuentro que tener una clase en el html para apuntar a todos los encabezados puede ser beneficioso, solo tenga cuidado con la precedencia en el css, porque los conflictos pueden surgir de

DennisWPaulsenJR
fuente