Entendo que o CSS suporta apenas comentários de várias linhas como essas
/* foobar */
Por que não há suporte para comentários de linha única.
// foobar
Eles são tão comuns na programação e parecem particularmente úteis para uma linguagem como CSS, em que cada regra está na sua própria linha.
Se não havia uma razão histórica específica para essa decisão, o que impediu que os navegadores passassem a apoiá-la?
Respostas:
Compatibilidade com versões anteriores
A introdução de comentários de linha única na sintaxe CSS pode alterar o significado dos arquivos que atualmente usam o token
//
. Os fornecedores de navegadores são muito relutantes em introduzir alterações que podem quebrar potencialmente as páginas existentes.O CSS é definido com regras de análise "tolerantes a erros" muito precisas, o que significa que, mesmo se você escrever algo sintaticamente ilegal, existem regras precisas sobre como a análise deve ocorrer. Se uma sequência ilegal de caracteres (como
//
) for detectada dentro de uma declaração, a declaração atual será descartada e tudo até o próximo ponto e vírgula ser ignorado.O CSS foi projetado assim para permitir a introdução de nova sintaxe sem interromper os navegadores antigos. Navegadores antigos apenas ignoram as declarações que contêm sintaxe não suportada e continuam depois.
Mas essa lógica assume que a "unidade" a ser processada ou ignorada é a declaração. Se comentários de linha única forem introduzidos, isso significa que a análise posterior
//
deve pular até a próxima quebra de linha em vez de até o próximo ponto e vírgula, que altera quais regras são analisadas e quais são ignoradas. Isso pode potencialmente alterar o significado dos arquivos CSS existentes de maneiras surpreendentes.Um exemplo:
Aqui, por engano, dobrei a barra. A conseqüência é que a declaração da fonte é ignorada, mas todo o resto funciona bem. Se o suporte para
//
comentários fosse introduzido, de repente a chave de fechamento seria comentada, potencialmente quebrando todo o resto da folha de estilos.Agora você pode dizer que é minha culpa desde que cometi um erro, mas isso não muda, pois um número desconhecido de páginas na Internet pode quebrar ou renderizar estranhamente por motivos obscuros.
Qualquer alteração que interrompa a compatibilidade com versões anteriores deve ser considerada com muito cuidado, e os comentários de linha única provavelmente não são suficientemente atraentes para o risco, pois o único benefício é que você economiza algumas teclas.
Portanto, se o CSS deveria ter comentários em uma única linha, provavelmente deveria ter sido introduzido desde o início. Mas o CSS começou como uma linguagem muito simples e ter duas sintaxes de comentários diferentes seria vista como uma complexidade desnecessária na época. (Mesmo o ANSI C não tinha comentários de linha única.)
fonte
//
, será analisado em dois "tokens delim" e, por sua vez, não é permitido em nenhum lugar da gramática. Consulte w3.org/TR/css-syntax-3/#tokenization para obter detalhes./**/
, mas aceitar este porque também aborda o motivo de não ter sido alterado.O suporte a outro elemento de sintaxe não é tão fácil: existem muitas ferramentas que devem ser capazes de lidar com ainda mais estilos de comentários. Na verdade, não ficaria surpreso ao ver que a maioria dos tokenizadores / analisadores simplesmente ignora novas linhas, provavelmente substituindo-as por
;
.Se seria essencial para a linguagem, ou seja, tornar a vida dos desenvolvedores muito mais fácil, isso poderia ser feito. Por exemplo, não ter nenhum tipo de comentário em CSS seria uma porcaria, e valeria a pena o esforço de adicionar elementos de sintaxe específicos que delimitam comentários.
//
comentários de estilo, por outro lado? ... Não vejo o ponto. Veja/* Hello, World! */
: um comentário de uma linha.Na verdade, você provavelmente espera
//
comentários no estilo porque está acostumado a eles em C ++ ou linguagens semelhantes. No entanto, o CSS não herda do C ++, portanto, esperar recursos de sintaxe semelhantes é bastante estranho.Da mesma forma, um programador Python alegaria que o CSS também deveria ter
#
comentários no estilo; então agora, precisamos suportar os dois estilos? Então um cara do mundo Haskell pedia para incluir--
e{- -}
também, e você se pergunta por que não reconhece mais o código CSS.O pequeno benefício
//
disso é que você não precisa digitar mais três caracteres no final do seu comentário de linha única (na verdade, se começarmos a contar caracteres, o CSS deve usar comentários no estilo Python). No entanto, se você usar um editor de texto decente, comente / descomente o texto simplesmente pressionando um atalho de qualquer maneira.Como expliquei, eles são apenas um pouco úteis para um pequeno subconjunto de programadores, usando um pequeno subconjunto de editores de texto. Quanto à sua observação sobre cada regra em sua própria linha (discordo da sua observação, a propósito), isso me fez pensar em outro ponto: como os comentários são realmente usados.
Aqui está o uso dos comentários CSS que consigo pensar:
Nos três primeiros casos, você usará comentários de várias linhas de qualquer maneira. Isso é óbvio para o cabeçalho do arquivo e a explicação de um hack (a maioria dos hacks requer pelo menos uma frase e um hiperlink para o StackOverflow ou um artigo de blog); quanto aos delimitadores:
O comentário no estilo C é muito mais visível do que:
enterrado no texto.
fonte
//
comentários de linha única .//
é muito comum em muitas línguas e o conceito por trás disso é que é mais do que sintaxe, mas também funciona de maneira diferente. Dito isto, esta é a resposta mais profunda ainda.O problema é que a maioria das linguagens com comentários (por exemplo, C #, Java) são linguagens compiladas e o compilador retira TODOS os comentários antes de apresentar o conteúdo ao consumidor (a CPU). CSS não é compilado; geralmente o arquivo é enviado inalterado conforme o designer o desenvolveu, portanto não há oportunidade de remover os comentários. O comentário de estilo // requer o símbolo // E um avanço de linha para manter a correção sintática.
Sim, existem minificadores e, sim, o javascript permite esse tipo de comentário. Javascript também permite eval (), então não acho que queremos tomá-lo como modelo.
fonte
/* */
comentários?//
comentários quando pode remover/* */
?