Чи можу я націлити всі теги <H> за допомогою одного селектора?


155

Я хотів би націлити всі h теги на сторінці. Я знаю, що ти можеш це зробити так ...

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

але чи існує більш ефективний спосіб зробити це за допомогою сучасних селекторів CSS? наприклад, щось на кшталт:

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

(але, очевидно, це не працює)


8
Це стає все більш стомлюючим при виборіh1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, ...
Vortico

Відповіді:


128

Ні, список, розділений комами, - це те, що ви хочете в цьому випадку.


14
Для тих, хто тут приземлився з google, і цікаво, що означає розділений комою список у CSS, це перший приклад, який OP дав. Тобто h1, h2, h3 {}.
bluesmonk

44

Це не основний css, але якщо ви використовуєте менше ( http://lesscss.org ), ви можете це зробити за допомогою рекурсії:

.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 ) дозволить вам керувати цим, але не дозволить рекурсії; вони мають @forсинтаксис для цих примірників:

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

Якщо ви не використовуєте динамічну мову, яка компілюється в CSS, наприклад LESS або Sass, вам обов'язково слід перевірити один із цих варіантів. Вони дійсно можуть спростити та зробити більш динамічним вашу розробку CSS.


12
Я впевнений, що вручну вводити текст, ніж створювати цикл у CSS, таких як h1, h2, h3 ... займає менше часу, місця .. зрозуміліше зрозуміти зараз і пізніше.
Мухаммед Умер

¯_ (ツ) _ / ¯ "can" != "should". Незважаючи на це, параметри Sass / LESS дають вам розширюваність, яку не має ванільний CSS. Придумайте щось подібне font-size: (48px / @index).
Стів

Це нормально, якщо це найкраще відповідає вашим потребам. Як було сказано в попередньому коментарі, якщо вам з якихось причин потрібно оперувати індексом у LESS або Sass, такий підхід дозволяє це зробити легко. Ваша реалізація може бути динамічною на основі номера заголовка.
Стів

Для людей , які не хочуть інтегрувати scss/sassв свій проект, але хочуть , щоб генерувати cssз scss/sassвони можуть використовувати цей онлайн - інструмент під назвою sassmeister
Самір Хан

38

Якщо ви використовуєте SASS, ви також можете використовувати цей міксин:

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

Використовуйте його так:

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

Редагувати: мій улюблений особистий спосіб зробити це, необов'язково розширивши селектор заповнювачів на кожному з елементів заголовка.

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

Тоді я можу орієнтуватися на всі заголовки так, як я б націлив будь-який окремий клас, наприклад:

.element > %headings {
    color: red;
}

Це дуже маленький крок від SCSS до SCSS + Compass: compass-style.org/reference/compass/helpers/selectors - заголовки ($ від, $ до)
імператив

1
Ого, натрапив на це через два роки .. і редакція виглядає золотою! Я впевнений, що я розумію призначення !optionalпрапора в розширенні? І, схоже, нічого не можна знайти в Google ...
Білль,


3

Стилус «и селектор інтерполяції

for n in 1..6
  h{n}
    font: 32px/42px trajan-pro-1,trajan-pro-2;

Це не працює. Будь ласка, протестуйте свій код перед публікацією відповіді, оскільки це згубно для всіх, хто може спробувати його використати. Я відредагував вашу відповідь випробуваним та робочим кодом.
Гібридна веб-

@Hybridwebdev Здається, це працює для мене. Окрім того, як документи описують ітерацію
laggingreflex

3

Селектор jQuery для всіх тегів h (h1, h2 тощо) - це ": header". Наприклад, якщо ви хочете зробити всі теги h червоними кольорами за допомогою jQuery, використовуйте:

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


чи можна націлити всі заголовки лише в межах конкретного div? наприклад $('.my_div :header').css("color","red")?
користувач1063287

1

Для вирішення цього питання за допомогою ванільного CSS шукайте візерунки у предків h1..h6елементів:

<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>

Якщо ви можете помітити шаблони, можливо, ви зможете написати селектор, який орієнтується на те, що ви хочете. З огляду на наведений вище приклад, усі h1..h6елементи можуть бути націлені, комбінуючи :first-childта :notпсевдокласи з CSS3, доступні у всіх сучасних браузерах, наприклад:

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

Надалі передові псевдокласові селектори на кшталт :has()та комбінатори наступних побратимів ( ~) нададуть ще більший контроль, оскільки веб-стандарти продовжують розвиватися з часом.



1

Ви можете .класифікувати всі заголовки у вашому документі, якщо ви хочете націлити їх на один селектор, як описано нижче,

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

і в css

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

Я не кажу, що це завжди найкраща практика, але це може бути корисно, а для націлювання на синтаксис - простіше у багатьох відношеннях,

тож якщо ви даєте всім від h1 до h6 того самого класу .headhead у html, ви можете змінити їх для будь-яких HTML-документів, які використовують цей css аркуш.

перевернутий, більш глобальний контроль порівняно з "статтею розділ h1 та ін. {}",

Знизу, замість того, щоб закликати всіх селекторів на місце у css, у вас буде набагато більше вводити html, але я вважаю, що мати клас у html для націлювання на всі заголовки може бути корисним, просто будьте уважні до переваги в css, тому що можуть виникнути конфлікти


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.