Como fazer com que o CSS ignore se o atributo está com letra MAIÚSCULA ou minúscula? – html css html5

Pergunta:


Imagine que eu tenha uma situação onde eu precise estilizar vários links da minha página, mas só os links que terminem em .html, porém reparei que ao tentar pegar o atributo href, eu só consigo pegar os que terminam exatamente com .html, se for .HTML ou .Html por exemplo o link não pega o estilo. Eu não gostaria que esse acontecesse, eu quero pegar o link independente se está ou não com letra maiúscula.

Exite alguma forma de corrigir isso? Fazer com que o CSS ignore se o atributo está com letra MAIÚSCULA ou minúscula?

Segue um exemplo do problema:

a {
  display: block;
  padding: 10px;
  transition: all ease-out .2s;
  font-size: 1.5rem;
}

a:hover {
  transform: scale(1.2);
}

[href*="html"] {
  color: green;
}
<a href="pagina.HTML">link terminando em .HTML</a>
<a href="pagina.html">link terminando em .html</a>
<a href="pagina.Html">link terminando em .Html</a>
Autor da pergunta hugocsl

fernandosavio

Aparentemente o seletor CSS de atributos segue o padrão:

[attr operator value i]

Onde i é uma flag indicando se é ascii case insensitive. Ou seja, apenas caracteres entre a-z e A-Z são case-insensitive. Então

a[href$=".html"]

funcionará com .html, .HTML, etc.. Porém

a[href$=".fóo"]

não funcionará com .FÓO por Ó não fazer parte da tabela ASCII.

Então, trocando seu seletor para

[href*="html" i]

funcionará como o esperado.

Ou ainda [href$="html" i] para casar apenas no fim do href.


Edit

Como sugerido fui buscar nas specs sobre uma padronização se o valor do seletor é case sensitive ou não.

Após uma boa passeada por várias versões e drafts acabei descobrindo que a flag i no seletor de atributos faz parte do draft do módulo de seletores, que por ser um trabalho em andamento, seu suporte ainda não é completo.

Porém, com exceção do Internet Explorer, Microsoft Edge e Opera Mini, os browser modernos já suportam esta feature, como mostrado no Can I Use.

Vendo a versão 3 dos seletores CSS temos:

Attribute values must be CSS identifiers or strings. The case-sensitivity of attribute names and values in selectors depends on the document language.

Que em tradução livre significa:

Valores de atributos devem ser identificadores CSS ou strings. O case-sensitivity dos nomes de atributos e dos valores nos seletores dependem da linguagem do documento.

Como nosso documento é HTML, na sessão de Case-Sensitivity e Comparação de Strings da versão 5.2 temos:

Except where otherwise stated, string comparisons must be performed in a case-sensitive manner.

Em tradução livre:

A menos que especificado o contrário, comparações de strings devem ser feitas de maneira case-sensitive.

E como não há especificação no spec atual, isso explicaria o porquê de ser case-sensitive por padrão nos navegadores.


Código funcionando:

a {
  display: block;
  padding: 10px;
  transition: all ease-out .2s;
  font-size: 1.5rem;
}

a:hover {
  transform: scale(1.2);
}

[href*="html" i] {
  color: green;
}
<a href="pagina.HTML">link terminando em .HTML</a>
<a href="pagina.html">link terminando em .html</a>
<a href="pagina.Html">link terminando em .Html</a>

Apenas com CSS não sei se é possível fazer, mas criei uma solução usando jquery. Não sei se é o que estas a buscar, é apenas uma ideia de como poderia ser feito.

Deixei o código todo comentado, caso tenha dúvidas, pergunte.

$('a').each(function(){ //para cada link
   var attr = $(this).attr('href'); //pega o atributo
   var lower = attr.toLowerCase(); // transforma todos em minusculo 
   var html = lower.indexOf('.html'); //pega todos link que contem .html
   
   if(html != -1) { // aplica a todos links que tiverem .html
      $(this).css('color', 'green')
   }   
});
a {
  display: block;
  padding: 10px;
  transition: all ease-out .2s;
  font-size: 1.5rem;
}

a:hover {
  transform: scale(1.2);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="pagina.HTML">link terminando em .HTML</a>
<a href="pagina.html">link terminando em .html</a>
<a href="pagina.Html">link terminando em .Html</a>
<a href="pagina.Htmlx">link terminando em .Htmlx</a>
<a href="pagina.xml">link terminando em .xml</a>

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *