CSSで正規表現を使用していますか?


127

s1s2などの形式のIDを持つdivを含むHTMLページがあります。

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

これらのセクション/ divのサブセットにidに応じてcssプロパティを適用したい。ただし、divを追加するたびに、このようにセクションのcssを個別に追加する必要があります。

//css
#s1{
...
}

私はセットにスタイルを適用するために使用できるCSSでの正規表現のようなものがあるのdivが


9
おそらくclass属性を使用して、これらのIDを持つ要素のクラスを識別する必要があります
LeeGee

回答:


191

以前の回答が示すように、正規表現の形式なしでそれらの要素を選択することを管理できますが、質問に直接回答するには、はい、セレクターで正規表現の形式を使用できます。

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

つまり、IDが文字「s」で始まる#sections div内のdiv要素を選択します。

ここフィドルを参照してください。

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

59

この回答を補完するものとして$、最後の一致*を取得し、値の名前の任意の場所で一致を取得するために使用できます。

マッチの任意の場所:.col-md.left-col.col.tricolor、など

[class*="col"]

最初に一致します.col-md.col-sm-6など

[class^="col-"]

エンディングで一致します.left-col.right-colなど

[class$="-col"]

(これはクレイジーに聞こえるかもしれませんが)試合ごとに「破壊」することは可能ですか?
ウォルター

24

IDは、要素を一意に識別するためのものです。それに適用されるスタイルも、その要素に固有でなければなりません。多くの要素に適用したいスタイルがある場合は、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/

div直接の子孫であるすべてのに一致します#main

#main > div

div直接または間接の子孫であるすべてのに一致します#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を適用するだけではありません。
プロデジタルソン2012年

私はidセレクターを使用しないようにしようとしていると言っていたので、後でスタイルをオーバーライドしようとすると(特定のページについて言いましょう)、同じセレクターを使用する必要があります。元のセレクターよりも具体的です。それだけで悪くはありません.thepage #someidが、高度なテーブルやリストのスタイリングに本当に長くかかる可能性があります。それはあなたの答えを拡張する一般的なアドバイスだったので、あなたの答えに対する批判ではあり
ませんでした

0

通常*は、必要な文字を含むすべての文字列を取得するときに使用します。

* 正規表現で使用され、すべての文字を置き換えます。

SASSまたはCSSでの使用は次のようなもので[id*="s"]、IDが「s ......」のすべてのDOM要素を取得します。

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

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

-4

私の一般的なCSS正規表現を試してください

(([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}(?=.*-))

デモhttps://regexr.com/4a22i


-11

CSSで特定の要素を選択する別の簡単な方法もあります...

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

選択する要素がいくつかあり、クラスを気にしたくない場合は、これも簡単に機能します。


3
@AustinHenley Bcozこれは解決策ではありません。質問で述べたように、CSSルールを毎回編集したくありません。
Ankit

これは反対票に値しません。たとえば、divが最大で10であることがわかっている場合は、#s1を#s10に置くことができ、セレクターを操作する必要はありません。これを行う正しい方法はクラスを使用することですが、この解決策はあなたの仮定を踏まえて解決策を試みています。
jcuenod 2015

4
これがこの特定の状況に対して考えられる回避策であるかどうかは、特に問題ではありません。CSSの最も基本的な知識を持っている人なら誰でも複数のセレクターやクラスを使用する方法を知っているので、この答えはまったく質問には答えません。
Jayant Bhawal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.