Використовуючи регулярний вираз у 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.