Tüm <H> etiketlerini tek bir seçiciyle hedefleyebilir miyim?


155

Bir sayfadaki tüm h etiketlerini hedeflemek istiyorum. Bunu bu şekilde yapabileceğini biliyorum ...

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

ancak bunu gelişmiş CSS seçicileri kullanarak yapmanın daha etkili bir yolu var mı? örneğin:

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

(ama tabii ki bu işe yaramıyor)


8
Bu seçim yaparken giderek daha sıkıcı olurh1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, ...
Vortico

Yanıtlar:


128

Hayır, virgülle ayrılmış bir liste bu durumda istediğiniz şeydir.


14
Google'dan buraya inen ve virgülle ayrılmış bir listenin CSS'de ne anlama geldiğini merak edenler için OP'nin ilk örneği. Yani h1, h2, h3 {},.
bluesmonk

44

Temel css değildir, ancak LESS ( http://lesscss.org ) kullanıyorsanız, bunu özyineleme kullanarak yapabilirsiniz:

.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 ) bunu yönetmenize izin verir, ancak özyinelemeye izin vermez; onlar var @forbu örnekleri için sözdizimi:

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

LESS veya Sass gibi CSS ile derlenen dinamik bir dil kullanmıyorsanız, kesinlikle bu seçeneklerden birine göz atmalısınız. CSS gelişiminizi gerçekten basitleştirebilir ve daha dinamik hale getirebilirler.


12
i h1, h2, h3 gibi döngü için oluşturmaktan daha elle manuel yazarak eminim ... daha az zaman, alan alır ... şimdi ve daha sonra anlamak daha açık.
Muhammed Umer

¯_ (ツ) _ / ¯ "can" != "should". Yine de, Sass / LESS seçenekleri size vanilya CSS'nin yapmadığı genişletilebilirlik sağlar. Gibi bir şey düşünün font-size: (48px / @index).
Steve

İhtiyaçlarınıza en uygunsa sorun değil. Daha önceki bir yorumda belirtildiği gibi, eğer herhangi bir nedenle LESS veya Sass dizininde işlem yapmanız gerekiyorsa, bu yaklaşım bunu kolayca yapmanızı sağlar. Uygulamanız, başlık numarasına göre dinamik olabilir.
Steve

Entegre etmek istemeyen insanlar için scss/sassonların projede, ancak oluşturmak istiyorum cssile scss/sassbu çevrimiçi aracı denilen kullanabilirsiniz sassmeister
Sameer Han

38

SASS kullanıyorsanız, bu karışımı da kullanabilirsiniz:

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

Şöyle kullanın:

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

Düzenleme: İsteğe bağlı olarak başlık öğelerinin her birine bir yer tutucu seçici genişleterek bunu yapmak benim kişisel favori yolu.

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

Sonra herhangi bir sınıfı hedefleyeceğim gibi tüm başlıkları hedefleyebilirim, örneğin:

.element > %headings {
    color: red;
}

SCSS'den SCSS + Pusula'ya çok küçük bir adım: compass-style.org/reference/compass/helpers/selectors - başlıklar ($ 'dan $' a kadar)
Zorunlu

1
Vay be, iki yıl sonra karşılaştım .. ve düzenleme altın görünüyor! Eminim !optionalbayrağın amacını anladığımdan emin miyim ? Google'da hiçbir şey bulamıyorum ...
Bill



3

Tüm h etiketleri (h1, h2 vb.) İçin jQuery seçici ": header" şeklindedir. Örneğin, tüm h etiketlerini jQuery ile kırmızı renkte yapmak istiyorsanız, şunu kullanın:

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


yalnızca belirli bir div içindeki tüm başlıkları hedefleyebilir misiniz? örneğin $('.my_div :header').css("color","red")?
user1063287

1

Bunu vanilya CSS ile çözmek için h1..h6elementlerin atalarında desen arayın :

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

Desenleri tespit edebiliyorsanız, istediğinizi hedefleyen bir seçici yazabilirsiniz. Yukarıdaki örnek göz önüne alındığında, tüm h1..h6elemanlar , aşağıdaki gibi tüm modern tarayıcılarda bulunan CSS3'ten :first-childve :notsözde sınıfları birleştirerek hedeflenebilir :

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

Gelecekte, ilerleyen kardeş birleştiriciler ( ) gibi gelişmiş sözde sınıf seçicileri :has(), Web standartları zaman içinde gelişmeye devam ettikçe daha da fazla kontrol sağlayacaktır.~


1

PostCSS ve özel seçiciler eklentisini de kullanabilirsiniz

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

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

Çıktı:

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

1

Aşağıdaki gibi tek bir seçiciyle hedeflemek isterseniz, belgenizdeki tüm başlıkları sınıflandırabilirsiniz,

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

ve css'de

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

Bunun her zaman en iyi uygulama olduğunu söylemiyorum, ancak yararlı olabilir ve sözdizimini hedeflemek için birçok yönden daha kolay,

tüm h1'den h6'ya html'de aynı .heading sınıfını verirseniz, bu css sayfasını kullanan herhangi bir html dokümanı için bunları değiştirebilirsiniz.

"bölüm div makalesi h1, vs {}" ile karşılaştırıldığında daha küresel kontrol,

olumsuz, css yerinde tüm seçicileri çağırmak yerine, html'de çok daha fazla yazı yazacaksınız, ancak html'de tüm başlıkları hedeflemek için bir sınıfa sahip olmanın yararlı olabileceğini, sadece css, çünkü çatışmalar


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.