Vous utilisez une expression régulière en CSS?


127

J'ai une page html avec des divs qui ont des identifiants de la forme s1 , s2 et ainsi de suite.

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

Je veux appliquer une propriété css à un sous-ensemble de ces sections / divs (en fonction de l'id). Cependant, chaque fois que j'ajoute un div , je dois ajouter le css pour la section séparément comme ceci.

//css
#s1{
...
}

Y a-t-il quelque chose comme des expressions régulières en css que je peux utiliser pour appliquer un style à un ensemble de divs .


9
Vous devriez probablement utiliser l' classattribut pour identifier la classe d'éléments avec ces ID
LeeGee

Réponses:


191

Vous pouvez gérer la sélection de ces éléments sans aucune forme d'expression régulière comme le montrent les réponses précédentes, mais pour répondre directement à la question, oui, vous pouvez utiliser une forme d'expression régulière dans les sélecteurs:

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

Cela dit, sélectionnez tous les éléments div à l'intérieur des #sections div qui ont un ID commençant par la lettre «s».

Voir violon ici .

La documentation du sélecteur CSS W3 ici .


1
C'était dans une recommandation pour CSS 2.1; il est pris en charge par IE 7, Opera 9 etc. Source: developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Mike S

2
vous venez de faire ma journée. Je cherchais à inclure des sélecteurs css avancés dans un robot d'exploration pour le rendre configurable par l'utilisateur. cela ^ = était comme l'eau dans le désert de ******.
DGoiko

60

En complément de cette réponse, vous pouvez utiliser $pour obtenir les correspondances de fin et *pour obtenir des correspondances n'importe où dans le nom de valeur.

Matches partout: .col-md, .left-col, .col, .tricolor, etc.

[class*="col"]

Matches au début: .col-md, .col-sm-6, etc.

[class^="col-"]

Matches à la fin: .left-col, .right-col, etc.

[class$="-col"]

(Je sais que cela semble fou mais) Est-il possible de "détruire" à chaque match?
Walter

24

Un ID est destiné à identifier l'élément de manière unique . Tous les styles qui lui sont appliqués doivent également être uniques à cet élément. Si vous souhaitez appliquer des styles à de nombreux éléments, vous devez leur ajouter une classe à tous, plutôt que de vous fier aux sélecteurs d'ID ...

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

et

.sec {
    ...
}

Ou dans votre cas spécifique, vous pouvez sélectionner toutes les divisions à l'intérieur de votre conteneur parent, si rien d'autre n'est à l'intérieur, comme ceci:

#sections > div {
    ...
}

10

Tout d'abord, il existe de très nombreuses façons de faire correspondre des éléments dans un document HTML. Commencez par cette référence pour voir certains des sélecteurs / modèles disponibles que vous pouvez utiliser pour appliquer une règle de style à un ou plusieurs éléments.

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

Correspond à tous les divs qui sont des descendants directs de #main.

#main > div

Correspond à tous les divs qui sont des descendants directs ou indirects de #main.

#main div

Correspond au premier divqui est un descendant direct de #sections.

#main > div:first-child

Faites correspondre un divavec un attribut spécifique.

#main > div[foo="bar"]

5

Vous pouvez simplement ajouter une classe à chacun de vos DIV et appliquer la règle à la classe de cette manière:

HTML:

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

CSS:

//css
.myclass
{
   ...
}

3
De plus, en règle générale, j'essaie de ne pas du tout styliser les choses avec des sélecteurs d'identification. Cela modifie la spécificité de sorte qu'ils sont plus difficiles à ignorer, ce qui fait généralement plus mal que cela n'aide dans mon expérience. J'utilise id ... mais pas pour appliquer le CSS.
prodigitals le

J'étais juste en train de dire que j'essaie d'éviter d'utiliser des sélecteurs d'identifiants, car si vous remplacez le style plus tard (disons pour une page spécifique), vous finissez par devoir utiliser ce même sélecteur + tout ce que vous pouvez utiliser pour le rendre plus spécifique que le sélecteur d'origine. Pas mal si c'est juste, .thepage #someidmais cela peut devenir très long sur un style avancé de table ou de liste. Ce n'était pas une critique de votre réponse, mais plutôt un conseil général développant votre réponse :-)
prodigitals le

0

J'utilise généralement *lorsque je veux obtenir toutes les chaînes contenant les caractères voulus.

* utilisé dans regex, remplace tous les caractères.

Utilisé dans SASS ou CSS serait quelque chose comme [id*="s"]et il obtiendra tous les éléments DOM avec les id "s ......".

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

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

-4

Essayez mon expression régulière CSS générique

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

Démo https://regexr.com/4a22i


-11

il existe également un autre moyen simple de sélectionner des éléments particuliers en css ...

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

si vous n'avez que quelques éléments à choisir et que vous ne voulez pas vous embêter avec les classes, cela fonctionnera facilement aussi.


3
@AustinHenley Bcoz ce n'est pas la solution. Je ne veux pas modifier les règles css à chaque fois comme je l'ai mentionné dans la question.
Ankit

Cela ne mérite pas un vote défavorable. Si vous saviez, par exemple, qu'il y avait au plus 10 divs, vous pourriez mettre # s1 à # s10 et vous n'auriez pas à toucher les sélecteurs. La bonne façon de faire est d'utiliser les classes, mais cette solution prend vos hypothèses et tente une solution.
jcuenod

4
Cela n'a pas vraiment d'importance s'il s'agit d'une solution de contournement possible pour cette situation donnée. Cette réponse ne répond pas du tout à la question car toute personne possédant les connaissances les plus élémentaires en CSS sait utiliser plusieurs sélecteurs ou classes.
Jayant Bhawal
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.