ฉันสามารถกำหนดเป้าหมายแท็ก <H> ทั้งหมดด้วยตัวเลือกเดียวได้หรือไม่


155

ฉันต้องการกำหนดเป้าหมายแท็กทั้งหมดในหน้า ฉันรู้ว่าคุณสามารถทำได้ด้วยวิธีนี้ ...

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 ขั้นพื้นฐาน แต่ถ้าคุณใช้ 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;
  }
}

หากคุณไม่ได้ใช้ภาษาแบบไดนามิกที่รวบรวม CSS เช่น LESS หรือ Sass คุณควรลองใช้ตัวเลือกเหล่านี้ พวกเขาสามารถทำให้การพัฒนา CSS ของคุณง่ายขึ้นและมีชีวิตชีวามากขึ้น


12
ฉันค่อนข้างมั่นใจว่าการพิมพ์ด้วยตนเองมากกว่าการสร้างลูปใน CSS เช่น h1, h2, h3 ... ใช้เวลาน้อยลงพื้นที่ว่าง .. ชัดเจนยิ่งขึ้นที่จะเข้าใจในตอนนี้และในภายหลัง
มูฮัมหมัดอูเมอ

"can" != "should"_ (ツ) _ / ¯ ถึงกระนั้นตัวเลือก Sass / LESS ก็ให้คุณเพิ่มความสามารถที่วานิลลา CSS ไม่ได้ font-size: (48px / @index)คิดว่าสิ่งที่ต้องการ
Steve

ไม่เป็นไรถ้าเหมาะสมกับความต้องการของคุณมากที่สุด ดังที่ได้กล่าวไว้ในความคิดเห็นก่อนหน้านี้หากคุณจำเป็นต้องดำเนินการกับดัชนีใน LESS หรือ Sass ด้วยเหตุผลบางประการวิธีนี้จะช่วยให้คุณทำเช่นนั้นได้อย่างง่ายดาย การใช้งานของคุณอาจเป็นแบบไดนามิกตามหมายเลขส่วนหัว
Steve

สำหรับผู้ที่ไม่ต้องการรวมscss/sassในโครงการของพวกเขา แต่ต้องการสร้างcssด้วยscss/sassพวกเขาสามารถใช้เครื่องมือออนไลน์นี้เรียกว่าsassmeister
Sameer Khan

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 - ส่วนหัว ($ จาก, $ to)
Imperative

1
ว้าวเจอสองปีต่อมา .. และการแก้ไขดูเป็นสีทอง! ฉันแน่ใจว่าฉันเข้าใจวัตถุประสงค์ของการ!optionalตั้งค่าสถานะในส่วนขยายหรือไม่ และดูเหมือนจะไม่พบสิ่งใดใน google ...
Bill


3

การแก้ไขตัวเลือกของStylus

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

สิ่งนี้ใช้ไม่ได้ โปรดทดสอบรหัสของคุณก่อนโพสต์คำตอบเนื่องจากอาจเป็นอันตรายต่อผู้ที่อาจลองใช้ ฉันแก้ไขคำตอบของคุณด้วยรหัสที่ผ่านการทดสอบและใช้งานได้
Hybrid web dev

@Hybridwebdev ดูเหมือนว่าจะทำงานให้ฉัน นอกจากนี้ยังเป็นวิธีที่เอกสารอธิบายการวนซ้ำ
laggingreflex

3

ตัวเลือก jQuery สำหรับแท็ก h ทั้งหมด (h1, h2 ฯลฯ ) คือ ": header" ตัวอย่างเช่นหากคุณต้องการทำให้แท็ก h ทั้งหมดเป็นสีแดงด้วย jQuery ให้ใช้:

$(':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องค์ประกอบทั้งหมดอาจถูกกำหนดเป้าหมายโดยการรวม:first-childและ:notpseudo-classes จาก 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 คลาส. heading เดียวกันใน html จากนั้นคุณสามารถแก้ไขพวกเขาสำหรับเอกสาร html ใด ๆ ที่ใช้ชีท css นั้น

กลับหัวควบคุมทั่วโลกมากขึ้นเมื่อเทียบกับ "ส่วน div บทความ h1, ฯลฯ {}",

ข้อเสียแทนการเรียกตัวเลือกทั้งหมดในสถานที่ใน CSS คุณจะมีมากขึ้นในการพิมพ์ HTML แต่ฉันพบว่าการมีชั้นเรียนใน HTML เพื่อกำหนดเป้าหมายหัวข้อทั้งหมดจะเป็นประโยชน์เพียงระวังความสำคัญใน css เพราะความขัดแย้งอาจเกิดขึ้นได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.