Використовуючи регулярний вираз у css?


127

У мене є html-сторінка з divs, які мають ідентифікатори форм s1 , s2 тощо.

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

Я хочу застосувати властивість css до підмножини цих розділів / divs (залежно від ідентифікатора). Однак кожного разу, коли я додаю div , я повинен додавати css для розділу окремо, як це.

//css
#s1{
...
}

Чи є щось на зразок регулярних виразів у css, які я можу використовувати, щоб застосувати стиль до набору divs .


9
Напевно, ви повинні використовувати classатрибут для ідентифікації класу елементів з тими ідентифікаторами
LeeGee

Відповіді:


191

Ви можете керувати вибором цих елементів без будь-якої форми регулярного вираження, як показано в попередніх відповідях, але, щоб відповісти на питання безпосередньо, так, ви можете використовувати форму регулярного вираження в селекторах:

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

Це говорить про те, що виберіть будь-які елементи div всередині div #sections, які мають ідентифікатор, починаючи з літери 's'.

Дивіться скрипку тут .

Тут вибираються W3 CSS-селектори .


1
Це було в рекомендації для CSS 2.1; його підтримують IE 7, Opera 9 тощо. Джерело: developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Майк 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 ...

<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 ... просто не для застосування css.
блудник

Мені jsut казав, що я намагаюся уникати використання селекторів ідентифікаторів, тому що якщо ви перейдете на перегляд стилю пізніше (скажімо для певної сторінки), то в кінцевому підсумку вам доведеться використовувати той самий селектор + все, що ви можете використовувати, щоб зробити його більше конкретний, ніж оригінальний селектор. Непогано, якщо це просто, .thepage #someidале це може бути дуже довго накручене на розширений стиль таблиці або списку. Це не було критики вашої відповіді настільки, що це загальна порада, яка розширюється щодо вашої відповіді :-)
блудник

0

Зазвичай я використовую, *коли хочу отримати всі рядки, що містять шукані символи.

* використовується в регулярному вираженні, замінює всі символи.

Використовуваний в SASS або CSS буде щось подібне, [id*="s"]і він отримає всі елементи DOM з ідентифікатором "s ......".

/* 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, як я вже згадував у питанні.
Анкіт

Це не заслуговує протистояння. Якби ви знали, наприклад, що існує не більше 10 дівок, ви можете поставити # s1 до # s10, і вам не доведеться доторкатися до селекторів. Правильний спосіб зробити це з класами, але це рішення - це прийняття ваших припущень і спроба рішення.
jcuenod

4
Не важливо, чи це можливе вирішення для даної ситуації. Ця відповідь взагалі не відповідає на питання, оскільки кожен, хто володіє найосновнішими знаннями CSS, знає, як використовувати кілька селекторів або класів.
Джаянт Бхаваль
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.