Использование регулярного выражения в CSS?


127

У меня есть html-страница с div, у которых есть id (s) формы s1 , s2 и так далее.

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

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

//css
#s1{
...
}

Есть ли что-то вроде регулярных выражений в css, которые я могу использовать для применения стиля к набору div .


9
Вероятно, вам следует использовать classатрибут для определения класса элементов с этими идентификаторами
LeeGee

Ответы:


191

Вы можете управлять выбором этих элементов без какой-либо формы регулярного выражения, как показывают предыдущие ответы, но чтобы ответить на вопрос напрямую, да, вы можете использовать форму регулярного выражения в селекторах:

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

Это говорит о том, что выберите любые элементы div внутри div #sections, идентификаторы которых начинаются с буквы 's'.

Смотрите скрипку здесь .

Документация по селектору CSS W3 здесь .


1
Это было в рекомендации для CSS 2.1; он поддерживается IE 7, Opera 9 и т. д. Источник: developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Mike S

2
ты сделал мой день. Я хотел включить в сканер некоторые расширенные селекторы CSS, чтобы сделать его настраиваемым пользователем. это ^ = было похоже на воду в гребаной пустыне.
DGoiko

60

В качестве дополнения к этому ответу вы можете использовать $для получения конечных совпадений и *для получения совпадений в любом месте имени значения.

Матчи в любом месте: .col-md, .left-col, .col, .tricolorи т.д.

[class*="col"]

Матчи в начале: .col-md, .col-sm-6и т.д.

[class^="col-"]

Матчи в финале: .left-col, .right-colи т.д.

[class$="-col"]

(Я знаю, это звучит безумно, но) Возможно ли "уничтожить" с каждым матчем?
Уолтер

24

Идентификатор предназначен для уникальной идентификации элемента . Любые стили, применяемые к нему, также должны быть уникальными для этого элемента. Если у вас есть стили, которые вы хотите применить ко многим элементам, вы должны добавить класс для них всех, а не полагаться на селекторы идентификаторов ...

<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/

Сопоставьте все divs, являющиеся прямыми потомками #main.

#main > div

Сопоставьте все divs, которые являются прямыми или косвенными потомками #main.

#main div

Соответствует первому, divкоторый является прямым потомком #sections.

#main > div:first-child

Сопоставьте a 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.
prodigitalson

Я просто сказал, что стараюсь избегать использования селекторов идентификаторов, потому что тогда, если вы переопределите стиль позже (скажем, для конкретной страницы), вам придется использовать тот же селектор + все, что вы можете использовать, чтобы сделать его больше специфичнее, чем исходный селектор. Неплохо, если это просто, .thepage #someidно это может быть очень длинным при расширенном стиле таблиц или списков. Это была не столько критика вашего ответа, сколько общий совет, расширяющий ваш ответ :-)
prodigitalson

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 каждый раз, как я уже упоминал в вопросе.
Ankit

Это не заслуживает отрицательного голоса. Если бы вы знали, например, что существует не более 10 div, вы могли бы поместить от # s1 до # s10, и вам не пришлось бы прикасаться к селекторам. Правильный способ сделать это - использовать классы, но это решение принимает ваши предположения и пытается найти решение.
jcuenod

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