Css'de normal ifade mi kullanıyorsunuz?


127

S1 , s2 ve benzeri biçimlerde id (ler) i olan div'lere sahip bir html sayfam var .

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

Bu bölümlerin / div'lerin bir alt kümesine bir css özelliği uygulamak istiyorum (kimliğe bağlı olarak). Ancak, her div ekleyişimde, bölüm için css'yi bu şekilde ayrı ayrı eklemem gerekiyor.

//css
#s1{
...
}

Ben bir dizi stil uygulamak için kullanabileceği css düzenli ifadeler gibi orada şey mi bölümlerde; .


9
Muhtemelen classbu kimliklerle elemanların sınıfını tanımlamak için özniteliği kullanmalısınız
LeeGee

Yanıtlar:


191

Önceki yanıtların gösterdiği gibi herhangi bir normal ifade biçimi olmadan bu öğeleri seçmeyi yönetebilirsiniz, ancak soruyu doğrudan yanıtlamak için, evet, seçicilerde bir normal ifade biçimi kullanabilirsiniz:

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

Bu, #sections div içinde 's' harfiyle başlayan bir kimliği olan herhangi bir div öğesinin seçildiğini söylüyor.

Burada keman görün .

W3 CSS seçici belgeleri burada .


1
Bu, CSS 2.1 için bir tavsiye içindeydi; IE 7, Opera 9 vb. tarafından desteklenmektedir. Kaynak: developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Mike S

2
sadece günümü yaptın Kullanıcı tarafından yapılandırılabilir hale getirmek için bir tarayıcıya bazı gelişmiş css seçicileri dahil etmek istiyordum. o ^ = lanet çöldeki su gibiydi.
DGoiko

60

Bu cevabın bir tamamlayıcısı olarak $, son eşleşmeleri *elde etmek ve değer adının herhangi bir yerinde eşleşmeleri elde etmek için kullanabilirsiniz .

Maçlar her yerde: .col-md, .left-col, .col, .tricolor, vb

[class*="col"]

Başında Maçlar: .col-md, .col-sm-6vb

[class^="col-"]

Biten de Maçlar: .left-col, .right-colvb

[class$="-col"]

(Bunun çılgınca geldiğini biliyorum ama) Her maçta "yıkım" yapmak mümkün mü?
Walter

24

Bir kimlik, öğeyi benzersiz şekilde tanımlamak içindir . Buna uygulanan stillerin de o öğeye özgü olması gerekir. Birçok öğeye uygulamak istediğiniz stilleriniz varsa , kimlik seçicilere güvenmek yerine hepsine bir sınıf eklemelisiniz ...

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

ve

.sec {
    ...
}

Veya özel durumunuzda, içinde başka hiçbir şey yoksa, ana kapsayıcınızın içindeki tüm bölümleri seçebilirsiniz, örneğin:

#sections > div {
    ...
}

10

Her şeyden önce, bir HTML belgesindeki öğeleri eşleştirmenin birçok yolu vardır. Bir öğeye / öğelere stil kuralı uygulamak için kullanabileceğiniz mevcut seçicilerden / kalıplardan bazılarını görmek için bu referansla başlayın.

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

Tüm eşleştir divdoğrudan torunları s #main.

#main > div

divDoğrudan veya dolaylı soyundan gelen tüm URL'leri eşleştirin #main.

#main div

İlk Maç divdoğrudan soyundan olan #sections.

#main > div:first-child

A'yı divbelirli bir öznitelikle eşleştirin.

#main > div[foo="bar"]

5

DIV'lerinizin her birine bir sınıf ekleyebilir ve kuralı şu şekilde sınıfa uygulayabilirsiniz:

HTML:

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

CSS:

//css
.myclass
{
   ...
}

3
Ayrıca genel bir kural olarak, şeyleri ID seçicilerle biçimlendirmemeye çalışıyorum. Özgünlüğü değiştirir, böylece onları geçersiz kılmaları daha zordur ve bu genellikle benim deneyimime yardımcı olduğundan daha fazla acı verir. Kimlikleri kullanıyorum ... sadece css uygulamak için değil.
prodigitalson

Kimlik seçicilerini kullanmaktan kaçınmaya çalıştığımı söylüyordum çünkü daha sonra stili geçersiz kılmaya giderseniz (belirli bir sayfa için diyelim) o zaman aynı seçiciyi + daha fazlasını yapmak için kullanabileceğiniz başka her şeyi kullanmak zorunda kalırsınız. orijinal seçiciden daha özel. Fena değil, .thepage #someidancak gelişmiş tablo veya liste stilinde gerçekten uzun sürebilir. Cevabınız için bir eleştiri değildi, cevabınızı genişleten genel bir tavsiyeydi :-)
prodigitalson

0

*İstenilen karakterleri içeren tüm dizeleri almak istediğimde genellikle kullanırım .

* regex'te kullanılır, tüm karakterlerin yerini alır.

SASS veya CSS'de kullanıldığında buna benzer bir şey olur [id*="s"]ve "s ......" kimliğine sahip tüm DOM öğelerini alır.

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

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

-4

Genel CSS normal ifademi dene

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


-11

css'de de belirli öğeleri seçmenin başka bir basit yolu var ...

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

Seçebileceğiniz yalnızca birkaç öğeniz varsa ve sınıflarla uğraşmak istemiyorsanız, bu da kolayca çalışacaktır.


3
@AustinHenley Bcoz bu çözüm değil. Soruda bahsettiğim gibi her seferinde css kurallarını düzenlemek istemiyorum.
Ankit

Bu bir olumsuz oyu hak etmiyor. Örneğin, en fazla 10 div olduğunu bilseydiniz, # s1'i # s10'a koyabilirdiniz ve seçicilere dokunmanız gerekmezdi. Bunu yapmanın doğru yolu sınıflardadır, ancak bu çözüm varsayımlarınızı almak ve bir çözüme ulaşmaktır.
jcuenod

4
Bu belirli durum için bunun olası bir geçici çözüm olup olmadığı gerçekten önemli değil. Bu cevap soruya hiç cevap vermiyor çünkü en temel CSS bilgisine sahip olan herkes birden fazla seçici veya sınıfı nasıl kullanacağını biliyor.
Jayant Bhawal
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.