Menggunakan ekspresi reguler di css?

127

Saya memiliki halaman html dengan div yang memiliki id dalam bentuk s1 , s2 dan seterusnya.

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

Saya ingin menerapkan properti css ke subset dari bagian / div ini (tergantung pada id). Namun, setiap kali saya menambahkan div , saya harus menambahkan css untuk bagian tersebut secara terpisah seperti ini.

//css
#s1{
...
}

Apakah ada sesuatu seperti ekspresi reguler di css yang dapat saya gunakan untuk menerapkan gaya ke satu set div .

Ankit
sumber
9
Anda mungkin harus menggunakan classatribut untuk mengidentifikasi kelas elemen dengan ID tersebut
LeeGee

Jawaban:

191

Anda dapat mengatur pemilihan elemen tersebut tanpa bentuk ekspresi reguler seperti yang ditunjukkan oleh jawaban sebelumnya, tetapi untuk menjawab pertanyaan secara langsung, ya Anda dapat menggunakan bentuk ekspresi reguler di pemilih:

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

Yang mengatakan pilih elemen div di dalam #sections div yang memiliki ID yang dimulai dengan huruf 's'.

Lihat biola di sini .

Dokumen pemilih CSS W3 di sini .

steveax
sumber
1
Ini ada dalam rekomendasi untuk CSS 2.1; itu didukung oleh IE 7, Opera 9 dll .. Sumber: developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Mike S
2
kau mencerahkan hariku. Saya ingin menyertakan beberapa pemilih css tingkat lanjut dalam perayap untuk membuatnya dapat dikonfigurasi pengguna. bahwa ^ = seperti air di gurun pasir.
DGoiko
60

Sebagai pelengkap dari jawaban ini, Anda dapat menggunakan $untuk mendapatkan kecocokan akhir dan *untuk mendapatkan kecocokan di mana saja dalam nama nilai.

Cocok di mana saja: .col-md, .left-col, .col, .tricolor, dll

[class*="col"]

Cocok di awal: .col-md, .col-sm-6, dll

[class^="col-"]

Cocok di ending: .left-col, .right-col, dll

[class$="-col"]
uruapanmexicansong
sumber
(Saya tahu ini kedengarannya gila, tetapi) Apakah mungkin untuk melakukan "penghancuran" dengan setiap pertandingan?
Walter
24

ID dimaksudkan untuk mengidentifikasi elemen secara unik . Gaya apa pun yang diterapkan padanya juga harus unik untuk elemen itu. Jika Anda memiliki gaya yang ingin Anda terapkan ke banyak elemen, Anda harus menambahkan kelas ke semuanya, daripada mengandalkan pemilih ID ...

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

dan

.sec {
    ...
}

Atau dalam kasus spesifik Anda, Anda dapat memilih semua divisi di dalam container induk Anda, jika tidak ada yang lain di dalamnya, seperti:

#sections > div {
    ...
}
animuson
sumber
10

Pertama-tama, ada banyak cara untuk mencocokkan item dalam dokumen HTML. Mulailah dengan referensi ini untuk melihat beberapa pemilih / pola yang tersedia yang dapat Anda gunakan untuk menerapkan aturan gaya ke sebuah elemen.

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

Cocokkan semua divyang merupakan keturunan langsung dari #main.

#main > div

Cocokkan semua divyang merupakan keturunan langsung atau tidak langsung dari #main.

#main div

Cocokkan yang pertama divyang merupakan keturunan langsung dari #sections.

#main > div:first-child

Cocokkan divdengan atribut tertentu.

#main > div[foo="bar"]
Tim Medora
sumber
5

Anda dapat 'menambahkan kelas ke setiap DIV Anda dan menerapkan aturan ke kelas dengan cara ini:

HTML:

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

CSS:

//css
.myclass
{
   ...
}
Aurelio De Rosa
sumber
3
Juga sebagai aturan umum saya mencoba untuk tidak menata sesuatu dengan pemilih ID sama sekali. Ini mengubah kekhususan sehingga lebih sulit untuk ditimpa yang biasanya lebih menyakitkan daripada membantu dalam pengalaman saya. Saya menggunakan id ... hanya saja tidak untuk menerapkan css.
ajaib
Saya hanya mengatakan bahwa saya mencoba menghindari menggunakan pemilih id karena jika Anda pergi untuk mengganti gaya nanti (katakanlah untuk halaman tertentu) maka Anda akhirnya harus menggunakan pemilih yang sama + apa pun yang dapat Anda gunakan untuk membuatnya lebih spesifik dari pemilih asli. Tidak buruk jika hanya .thepage #someidtetapi bisa sangat panjang lebar tentang gaya tabel atau daftar tingkat lanjut. Ini bukan kritik atas jawaban Anda, melainkan saran umum yang memperluas jawaban Anda :-)
prodigitalspada
0

Saya biasanya menggunakan *ketika saya ingin mendapatkan semua string yang berisi karakter yang diinginkan.

* digunakan dalam regex, menggantikan semua karakter.

Digunakan di SASS atau CSS akan seperti [id*="s"]itu dan itu akan mendapatkan semua elemen DOM dengan id "s ......".

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

div[id^="s"] {
    color: red;
}
Niko9
sumber
-4

Coba ekspresi reguler CSS generik saya

(([a-z]{5,6}.*?\))|([\d.+-]?)(?![a-z\s#.()%])(\d?\.?\d?)?[a-z\d%]+)|(url\([/"'][a-z:/.]*['")]\))|(rgb|hsl)a?\(\d+%?,?\s?\d+%?,?\s?\d+%?(,\s?\d+\.?\d?)?\)|(#(\w|[\d]){3,8})|([\w]{3,8}(?=.*-))

Demo https://regexr.com/4a22i

Max Halochkin
sumber
-11

ada cara sederhana lain untuk memilih elemen tertentu di css juga ...

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

jika Anda hanya memiliki sedikit elemen untuk dipilih, dan tidak ingin repot dengan kelas, ini juga akan bekerja dengan mudah.

Sandeep S
sumber
3
@AustinHenley Bcoz ini bukan solusinya. Saya tidak ingin mengedit aturan css setiap saat seperti yang saya sebutkan dalam pertanyaan.
Ankit
Ini tidak pantas mendapatkan suara negatif. Jika Anda tahu, misalnya, bahwa terdapat paling banyak 10 div, Anda dapat meletakkan # s1 hingga # s10 dan Anda tidak perlu menyentuh pemilih. Cara yang benar untuk melakukan ini adalah dengan kelas tetapi solusi ini mengambil asumsi Anda dan mencoba solusi.
jcuenod
4
Tidak masalah jika ini adalah solusi yang mungkin untuk situasi tertentu ini. Jawaban ini tidak menjawab pertanyaan sama sekali karena siapa pun yang memiliki pengetahuan CSS paling dasar tahu cara menggunakan banyak pemilih atau kelas.
Jayant Bhawal