Bisakah saya menargetkan semua tag <H> dengan satu pemilih?


154

Saya ingin menargetkan semua tag h pada halaman. Saya tahu Anda bisa melakukannya dengan cara ini ...

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

tetapi apakah ada cara yang lebih efisien untuk melakukan ini menggunakan penyeleksi CSS tingkat lanjut? misalnya sesuatu seperti:

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

(tapi jelas ini tidak berhasil)


8
Ini menjadi semakin membosankan ketika memilihh1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, ...
Vortico

Jawaban:


128

Tidak, daftar yang dipisahkan koma adalah yang Anda inginkan dalam kasus ini.


14
Bagi mereka yang mendarat di sini dari google, dan bertanya-tanya apa arti daftar yang dipisahkan koma dalam CSS, ini adalah contoh pertama yang diberikan OP. Yaitu h1, h2, h3 {},.
bluesmonk

44

Ini bukan css dasar, tetapi jika Anda menggunakan KURANG ( http://lesscss.org ), Anda dapat melakukan ini menggunakan rekursi:

.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 ) akan memungkinkan Anda untuk mengelola ini, tetapi tidak akan mengizinkan rekursi; mereka memiliki @forsintaks untuk instance ini:

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

Jika Anda tidak menggunakan bahasa dinamis yang mengkompilasi ke CSS seperti KURANG atau Sass, Anda harus memeriksa salah satu opsi ini. Mereka benar-benar dapat menyederhanakan dan membuat pengembangan CSS Anda lebih dinamis.


12
saya cukup yakin mengetik secara manual daripada membuat untuk loop di CSS seperti h1, h2, h3 ... membutuhkan waktu lebih sedikit, ruang .. lebih jelas untuk dipahami sekarang dan nanti.
Muhammad Umer

¯_ (ツ) _ / ¯ "can" != "should". Meski begitu, opsi Sass / LESS memberi Anda ekstensibilitas yang tidak dimiliki oleh vanilla CSS. Pikirkan sesuatu seperti font-size: (48px / @index).
Steve

Tidak apa-apa jika itu paling sesuai dengan kebutuhan Anda. Seperti disebutkan dalam komentar sebelumnya, jika Anda karena suatu alasan perlu beroperasi pada indeks di LESS atau Sass, pendekatan ini memungkinkan Anda melakukannya dengan mudah. Implementasi Anda bisa dinamis berdasarkan nomor tajuk.
Steve

Bagi orang yang tidak ingin berintegrasi scss/sassdalam proyek mereka, tetapi ingin menghasilkan cssdengan scss/sassmereka dapat menggunakan alat online ini yang disebut sassmeister
Sameer Khan

37

Jika Anda menggunakan SASS, Anda juga dapat menggunakan mixin ini:

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

Gunakan seperti ini:

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

Sunting: Cara favorit pribadi saya untuk melakukan ini dengan secara opsional memperluas pemilih placeholder pada setiap elemen heading.

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

Lalu saya dapat menargetkan semua pos seperti saya akan menargetkan satu kelas, misalnya:

.element > %headings {
    color: red;
}

Ini adalah langkah yang sangat kecil dari SCSS ke SCSS + Compass: kompas-style.org/reference/compass/helpers/selectors - heading ($ from, $ to)
Imperative

1
Wow, temui ini dua tahun kemudian .. dan hasil editnya terlihat emas! Saya yakin yakin saya mengerti tujuan !optionalbendera pada perpanjangan itu? Dan sepertinya tidak dapat menemukan apa pun di google ...
Bill



3

Pemilih jQuery untuk semua tag h (h1, h2 dll) adalah ": header". Misalnya, jika Anda ingin membuat semua tag h berwarna dengan jQuery, gunakan:

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


dapatkah Anda menargetkan semua judul hanya dalam div tertentu? misalnya $('.my_div :header').css("color","red")?
user1063287

1

Untuk mengatasinya dengan vanilla CSS, cari pola di leluhur h1..h6elemen:

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

Jika Anda dapat menemukan pola, Anda mungkin dapat menulis pemilih yang menargetkan apa yang Anda inginkan. Dengan contoh di atas, semua h1..h6elemen dapat ditargetkan dengan menggabungkan kelas :first-childdan :notpseudo dari CSS3, tersedia di semua browser modern, seperti:

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

Di masa depan, penyeleksi pseudo-kelas lanjutan seperti :has(), dan kombinator saudara kandung berikutnya ( ~), akan memberikan lebih banyak kontrol saat standar Web terus berkembang seiring waktu.


1

Anda juga dapat menggunakan PostCSS dan plugin penyeleksi kustom

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

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

Keluaran:

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

1

Anda dapat mengklasifikasikan semua judul dalam dokumen Anda jika Anda ingin menargetkannya dengan pemilih tunggal, sebagai berikut,

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

dan di css

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

Saya tidak mengatakan ini selalu praktik terbaik, tetapi ini bisa bermanfaat, dan untuk penargetan sintaksis, lebih mudah dalam banyak hal,

jadi jika Anda memberikan semua h1 hingga h6 kelas .heading yang sama di html, maka Anda dapat memodifikasinya untuk setiap dokumen html yang memanfaatkan lembar css itu.

terbalik, lebih banyak kontrol global dibandingkan "artikel bagian h1, dll {}",

Kelemahannya, daripada memanggil semua penyeleksi di tempat di css, Anda akan memiliki lebih banyak mengetik html, namun saya menemukan bahwa memiliki kelas di html untuk menargetkan semua judul dapat bermanfaat, hanya berhati-hati dari prioritas dalam css, karena konflik dapat muncul dari


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.