1つのセレクターですべての<H>タグをターゲティングできますか?


154

ページ上のすべての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 2013

回答:


127

いいえ、この場合は、コンマ区切りのリストが必要です。


13
googleからここに着陸し、CSSでコンマ区切りのリストが何を意味するのか疑問に思う人にとって、これはOPが提供した最初の例です。それは、ありますh1, h2, h3 {}
bluesmonk

44

これは基本的なcssではありませんが、LESS(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;
  }
}

LESSやSassなどのCSSにコンパイルする動的言語を使用していない場合は、これらのオプションのいずれかを必ずチェックしてください。彼らは本当にCSSの開発を簡素化し、よりダイナミックにすることができます。


12
h1、h2、h3のようなCSSでforループを作成するよりも手動でタイプアウトする方が確実だと思います...時間とスペースが少なくて済みます。
Muhammad Umer

¯_(ツ)_ /¯ "can" != "should"。それでも、Sass / LESSオプションは、バニラCSSにはない拡張性を提供します。のようなものを考えてくださいfont-size: (48px / @index)
Steve

それがあなたのニーズに最もよく合っているなら、それは問題ありません。以前のコメントで述べたように、何らかの理由でLESSまたはSassでインデックスを操作する必要がある場合、このアプローチを使用すると簡単に操作できます。ヘッダー番号に基づいて、実装を動的にすることができます。
Steve

scss/sassプロジェクトに統合したくないが、css一緒に生成したいscss/sass人は、sassmeister
Sameer Khan

37

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-headings($ from、$ to)
Imperative

1
うわー、2年後にこれに出くわしました。そして編集は黄金に見えます!私は!optional延長の旗の目的を理解していると確信していますか?そして、グーグルで何かを見つけることができないようです...
Bill


3

スタイラスセレクター補間

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

これは動作しません。解答を投稿する前にコードをテストしてください。これは、解答を使用しようとするすべての人にとって有害で​​す。テスト済みで動作するコードを使用して、回答を編集しました。
ハイブリッドWeb

@Hybridwebdevそれは私のために働いているようです。ドキュメントがイテレーションを
laggingreflex

3

すべてのhタグ(h1、h2など)のjQueryセレクターは ":header"です。たとえば、jQueryですべてのhタグを赤にしたい場合は、次のようにします。

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


特定のdiv内のすべての見出しをターゲットにできますか?例えば$('.my_div :header').css("color","red")
user1063287

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要素は、CSS3の:first-childおよびの:not疑似クラスを組み合わせることでターゲットにすることができます。

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

のような将来の高度な疑似クラスセレクター:has()、および後続の兄弟コンビネーター~)は、Web標準が時間とともに進化し続けるため、さらに多くの制御を提供します。



1

次のように、単一のセレクターでそれらをターゲットにする場合は、ドキュメントのすべての見出しを.classできます。

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

そしてCSSで

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

これが常にベストプラクティスであると言っているわけではありませんが、構文を対象とする場合に便利であり、多くの点で簡単です。

したがって、h1からh6までのすべてに同じ.headingクラスをhtmlで指定すると、そのcssシートを利用する任意のhtmlドキュメント用にそれらを変更できます。

逆に、「セクションdiv記事h1など{}」と比較して、よりグローバルな制御

欠点は、CSSのすべてのセレクターを呼び出す代わりに、HTMLでより多くの入力を行うことになりますが、すべての見出しをターゲットにするためにHTMLにクラスを含めると効果的であることがわかります。 css、競合が発生する可能性があるため


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.