Usando expressão regular em css?


127

Eu tenho uma página html com divs que têm id (s) do formulário s1 , s2 e assim por diante.

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

Eu quero aplicar uma propriedade css a um subconjunto dessas seções / divs (dependendo do id). No entanto, toda vez que adiciono uma div , tenho que adicionar o css para a seção separadamente dessa maneira.

//css
#s1{
...
}

Existe algo como expressões regulares em css que eu possa usar para aplicar estilo a um conjunto de divs .


9
Você provavelmente deveria estar usando o classatributo para identificar a classe de elementos com esses IDs
LeeGee

Respostas:


191

Você pode gerenciar a seleção desses elementos sem nenhuma forma de regex, como mostram as respostas anteriores, mas para responder diretamente à pergunta, sim, você pode usar uma forma de regex nos seletores:

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

Dito isto, selecione qualquer elemento div dentro da #sections div que tenha um ID começando com a letra 's'.

Veja violino aqui .

O seletor de CSS do W3 documenta aqui .


1
Isso estava em uma recomendação para CSS 2.1; ele é suportado pelo IE 7, Opera 9 etc .. Fonte: developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
Mike S

2
você fez meu dia. Eu estava procurando incluir alguns seletores de CSS avançados em um rastreador para torná-lo configurável pelo usuário. que ^ = era como a água no deserto.
DGoiko

59

Como complemento desta resposta, você pode usar $para obter as correspondências finais e *obter correspondências em qualquer lugar do nome do valor.

Jogos em qualquer lugar: .col-md, .left-col, .col, .tricolor, etc.

[class*="col"]

Jogos no início: .col-md, .col-sm-6, etc.

[class^="col-"]

Corresponde à final: .left-col, .right-col, etc.

[class$="-col"]

(Eu sei que isso parece loucura, mas) É possível "destruir" a cada partida?
Walter

24

Um ID destina-se a identificar o elemento exclusivamente . Quaisquer estilos aplicados a ele também devem ser exclusivos para esse elemento. Se você possui estilos que deseja aplicar a muitos elementos, adicione uma classe a todos eles, em vez de confiar nos seletores de ID ...

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

e

.sec {
    ...
}

Ou, no seu caso específico, você pode selecionar todas as divisões dentro do contêiner pai, se não houver mais nada dentro dele, da seguinte forma:

#sections > div {
    ...
}

10

Primeiro de tudo, existem muitas, muitas maneiras de combinar itens em um documento HTML. Comece com esta referência para ver alguns dos seletores / padrões disponíveis que você pode usar para aplicar uma regra de estilo a um (s) elemento (s).

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

Combine todos os divs que são descendentes diretos de #main.

#main > div

Combine todos os divs que são descendentes diretos ou indiretos de #main.

#main div

Combine o primeiro, divque é um descendente direto de #sections.

#main > div:first-child

Combine a divcom um atributo específico.

#main > div[foo="bar"]

5

Você pode 'simplesmente adicionar uma classe a cada um dos seus DIVs e aplicar a regra à classe desta maneira:

HTML:

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

CSS:

//css
.myclass
{
   ...
}

3
Também como regra geral, tento não estilizar as coisas com seletores de ID. Ele altera a especificidade para que sejam mais difíceis de substituir, o que geralmente dói mais do que ajuda na minha experiência. Eu uso id's ... só que não para aplicar css.
Prodigitalson

Eu estava apenas dizendo que tento evitar o uso de seletores de ID porque, se você substituir o estilo mais tarde (digamos, para uma página específica), acabará tendo que usar o mesmo seletor + o que mais puder usar para torná-lo mais específico do que o seletor original. Não é ruim, .thepage #someidmas apenas pode ficar muito tempo na tabela avançada ou no estilo de lista. Não era uma crítica de sua resposta tanto como ele foi o conselho geral expandindo sua resposta :-)
prodigitalson

0

Eu costumo usar *quando quero obter todas as seqüências que contêm os caracteres desejados.

* usado no regex, substitui todos os caracteres.

Usado no SASS ou CSS seria algo parecido [id*="s"]e obterá todos os elementos DOM com o ID "s ......".

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

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

-4

Experimente minha expressão regular CSS genérica

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

Demo https://regexr.com/4a22i


-11

existe outra maneira simples de selecionar elementos específicos em css também ...

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

se você tiver apenas alguns elementos para escolher e não quiser se preocupar com as aulas, isso também será fácil.


3
@AustinHenley Bcoz, essa não é a solução. Não quero editar regras de CSS toda vez que mencionei na pergunta.
Ankit

Isso não merece voto negativo. Se você soubesse, por exemplo, que havia no máximo 10 divs, poderia colocar # s1 a # s10 e não precisaria tocar nos seletores. A maneira correta de fazer isso é com as classes, mas esta solução está tomando suas suposições e tentando uma solução.
Jcuenod #

4
Realmente não importa se essa é uma solução possível para essa situação. Esta resposta não responde à pergunta, porque qualquer pessoa com o conhecimento mais básico em CSS sabe como usar vários seletores ou classes.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.