ใช้นิพจน์ทั่วไปใน css?


127

ฉันมีเพจ html ที่มี div ที่มีidของแบบฟอร์มs1 , s2และอื่น ๆ

<div id="sections">
   <div id="s1">...</div>
   <div id="s2">...</div>
   ...
</div>

ฉันต้องการใช้คุณสมบัติ css กับส่วนย่อยของส่วน / div เหล่านี้ (ขึ้นอยู่กับ id) อย่างไรก็ตามทุกครั้งที่เพิ่มdivฉันต้องเพิ่ม css สำหรับส่วนแยกกันเช่นนี้

//css
#s1{
...
}

มีบางอย่างเช่นนิพจน์ทั่วไปใน css ที่ฉันสามารถใช้สไตล์กับชุดของdivได้หรือไม่


9
คุณน่าจะใช้classแอตทริบิวต์เพื่อระบุคลาสขององค์ประกอบด้วย ID เหล่านั้น
LeeGee

คำตอบ:


191

คุณสามารถจัดการการเลือกองค์ประกอบเหล่านั้นได้โดยไม่ต้องมี regex ในรูปแบบใด ๆ ตามที่คำตอบก่อนหน้านี้แสดง แต่เพื่อตอบคำถามโดยตรงใช่คุณสามารถใช้รูปแบบนิพจน์ทั่วไปในตัวเลือก:

#sections div[id^='s'] {
    color: red;  
}

ที่ระบุว่าเลือกองค์ประกอบ div ใด ๆ ภายใน #sections div ที่มี ID ขึ้นต้นด้วยตัวอักษร 's'

ดูซอนี่

W3 เอกสารเลือก CSS ที่นี่


1
นี่เป็นคำแนะนำสำหรับ CSS 2.1; รองรับโดย IE 7, Opera 9 เป็นต้นที่มา: developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Mike S

2
คุณทำให้วันนี้ดี. ฉันต้องการรวมตัวเลือก css ขั้นสูงในโปรแกรมรวบรวมข้อมูลเพื่อให้ผู้ใช้กำหนดค่าได้ ว่า ^ = เป็นเหมือนน้ำในทะเลทราย f ******
DGoiko

60

ในฐานะที่เป็นส่วนเติมเต็มของคำตอบนี้คุณสามารถใช้$เพื่อรับการจับคู่สิ้นสุดและ*เพื่อให้ได้การจับคู่ที่ใดก็ได้ในชื่อค่า

ตรงกับทุกที่: .col-md, .left-col, .col, .tricolorฯลฯ

[class*="col"]

ตรงกับที่จุดเริ่มต้น: .col-md, .col-sm-6ฯลฯ

[class^="col-"]

ตรงกับที่ตอนจบ: .left-col, .right-colฯลฯ

[class$="-col"]

(ฉันรู้ว่ามันฟังดูบ้า แต่) เป็นไปได้ไหมที่จะ "ทำลาย" ในแต่ละนัด?
วอลเตอร์

24

รหัสจะหมายถึงการระบุองค์ประกอบที่ไม่ซ้ำกัน สไตล์ใด ๆ ที่ใช้กับองค์ประกอบนั้นก็ควรไม่ซ้ำกับองค์ประกอบนั้น หากคุณมีสไตล์ที่ต้องการใช้กับองค์ประกอบจำนวนมากคุณควรเพิ่มคลาสให้กับองค์ประกอบทั้งหมดแทนที่จะใช้ตัวเลือก ID ...

<div id="sections">
   <div id="s1" class="sec">...</div>
   <div id="s2" class="sec">...</div>
   ...
</div>

และ

.sec {
    ...
}

หรือในกรณีเฉพาะของคุณคุณสามารถเลือกหน่วยงานทั้งหมดภายในคอนเทนเนอร์หลักของคุณได้หากไม่มีอะไรอยู่ข้างในเช่นนั้น:

#sections > div {
    ...
}

10

ก่อนอื่นมีหลายวิธีในการจับคู่รายการภายในเอกสาร HTML เริ่มต้นด้วยการอ้างอิงนี้เพื่อดูตัวเลือก / รูปแบบที่มีอยู่ซึ่งคุณสามารถใช้เพื่อใช้กฎสไตล์กับองค์ประกอบได้

http://www.w3.org/TR/selectors/

ตรงกับทุกdivs #mainซึ่งเป็นทายาทสายตรงของ

#main > div

ตรงกับทุกdivs #mainซึ่งเป็นทายาทสายตรงหรือทางอ้อม

#main div

การแข่งขันครั้งแรกซึ่งเป็นทายาทสายตรงของdiv#sections

#main > div:first-child

จับคู่divกับแอตทริบิวต์เฉพาะ

#main > div[foo="bar"]

5

คุณสามารถ 'เพิ่มคลาสให้กับแต่ละ DIV ของคุณและใช้กฎกับคลาสด้วยวิธีนี้:

HTML:

<div class="myclass" id="s1">...</div>
<div class="myclass" id="s2">...</div>

CSS:

//css
.myclass
{
   ...
}

3
ตามกฎทั่วไปฉันพยายามที่จะไม่จัดสไตล์สิ่งต่างๆด้วยตัวเลือก ID เลย มันปรับความเฉพาะเจาะจงดังนั้นจึงยากที่จะลบล้างซึ่งมักจะเจ็บมากกว่าที่จะช่วยได้ในประสบการณ์ของฉัน ฉันใช้ id ... ไม่ใช่เพื่อสมัคร css
prodigitalson

ฉันบอกว่าฉันพยายามหลีกเลี่ยงการใช้ id selectors เพราะถ้าคุณไปแทนที่สไตล์ในภายหลัง (สมมติว่าสำหรับหน้าใดหน้าหนึ่ง) คุณจะต้องใช้ตัวเลือกเดียวกันนั้น + สิ่งอื่นใดที่คุณสามารถใช้เพื่อทำให้มันมากขึ้น เฉพาะเจาะจงกว่าตัวเลือกเดิม ไม่เลวถ้าเพียง.thepage #someidแต่สามารถยืดยาวได้อย่างแท้จริงบนตารางขั้นสูงหรือสไตล์รายการ มันไม่ได้วิจารณ์คำตอบของคุณมากนักเพราะมันเป็นคำแนะนำทั่วไปสำหรับคำตอบของคุณ :-)
prodigitalson

0

ฉันมักจะใช้*เมื่อฉันต้องการรับสตริงทั้งหมดที่มีอักขระที่ต้องการ

* ใช้ใน regex แทนที่อักขระทั้งหมด

ใช้ใน SASS หรือ CSS จะเป็นอย่างไร[id*="s"]และจะได้รับองค์ประกอบ DOM ทั้งหมดที่มี id "s ...... "

/* add red color to all div with id s .... elements */

div[id^="s"] {
    color: red;
}


-11

มีอีกวิธีง่ายๆในการเลือกองค์ประกอบเฉพาะใน css ด้วย ...

#s1, #s2, #s3 {
    // set css attributes here
}

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


3
@AustinHenley Bcoz นี่ไม่ใช่ทางออก ฉันไม่ต้องการแก้ไขกฎ css ทุกครั้งตามที่กล่าวไว้ในคำถาม
Ankit

สิ่งนี้ไม่สมควรได้รับการโหวตลดลง ตัวอย่างเช่นถ้าคุณรู้ว่ามี div มากที่สุด 10 ตัวคุณสามารถใส่ # s1 ถึง # s10 และไม่ต้องแตะตัวเลือก วิธีที่ถูกต้องในการทำเช่นนี้คือการเรียน แต่การแก้ปัญหานี้ใช้สมมติฐานของคุณและพยายามหาวิธีแก้ปัญหา
jcuenod

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