Feliz Potter e a Ordem do CSS


Então, primeiro de tudo - essa não é uma batalha comum. Não se trata de CSS versus CSS-in-JS , nem de atomic CSS versus BEM , nem de LESS vs SASS . Esta batalha é sobre a ordem.


Esta batalha é entre ORDER e CHAOS. E entre ORDEM e ... outra ORDEM. Em resumo - sobre uma maneira melhor de classificar propriedades CSS. Nem mais nem menos.


Em resumo - existem três maneiras de fazer isso:


  • não faça isso. Escreva qualquer CSS possível. Esta é a maneira mais popular
  • agrupe propriedades por sentido. Basta colocar algumas coisas juntas. Esta é uma maneira bastante popular.
  • ordenar todas as propriedades em ordem alfabética. A maneira mais fácil, mas menos popular.

A partir de agora, vamos esquecer o primeiro caminho. Não é o caminho.

2012


Houve uma boa enquete do css-tricks , e aqui estão os resultados:



Já é 2019, o que mudou?


A diferença entre alpha sort , ABCSS como é conhecida, e um grouping é bastante sólida, mas é melhor deixar claro


Estado inicial


Vamos começar com um CHAOS ideal a partir desta edição mais bonita


 .wrapper { top: 20px; /* is it absolute? fixed? You begin searching downwards */ margin-left: 20px; /* Any other margins applied? */ display: flex; /* How is this flexed? searching for justify / align / flex rules */ position: absolute; /* ah absolute */ height: 100%; /* and width? */ margin-bottom: 20px; border-radius: 5px; /* Is there even a border? */ color: red; justify-content: center; margin-left: 2px; left: 0px; width: 100%; /* and height? */ border: 1px solid red; } 

Linda? É assim que o CSS comum se parece depois de alguns anos sem nenhum controle.


ABCSS


Classifique em ordem alfabética


 .wrapper { border: 1px solid red; border-radius: 5px; color: red; display: flex; height: 100%; justify-content: center; left: 0px; margin-bottom: 20px; margin-left: 20px; margin-left: 2px; /* ouch? */ position: absolute; top: 20px; width: 100%; } 

Apenas ajudou a perceber que tínhamos duas margin-lefts . Seria mais fácil adicionar uma nova propriedade na próxima vez, especialmente se toda a classificação for feita automaticamente no nível da stylelint .


A principal vantagem da classificação alfabética - localização fácil da propriedade. Você está apenas digitalizando tabela, como um glossário, e sim, aqui está a propriedade que estou procurando.

A principal desvantagem - a height vai antes da width , a left vai antes do top e há alguma distância entre elas. A classificação alfabética está misturando o contexto .


Eu usei alguma ferramenta online para fazer isso. A grande quantidade de ferramentas on-line, plug-ins para IDEs e ferramentas CLI oferece suporte à classificação alfa imediatamente. - fácil de usar.


Grupos


Classifique-o em grupos


 .wrapper{ position: absolute; top: 20px; left: 0; display: flex; justify-content: center; width: 100%; height: 100%; margin-bottom: 20px; margin-left: 20px; margin-left: 2px; color: red; border: 1px solid red; border-radius: 5px; } 

Desta vez, trata-se mais da separation of concerns - todas as propriedades são agrupadas (agrupadas) em baldes de certa forma. O princípio de pedido é conhecido como "Entrada externa"


  • Propriedades do layout (posição, flutuação, limpeza, exibição)
  • Propriedades do modelo de caixa (largura, altura, margem, preenchimento)
  • Propriedades visuais (cor, plano de fundo, borda, sombra da caixa)
  • Propriedades da tipografia (tamanho da fonte, família da fonte, alinhamento do texto, transformação do texto)
  • Propriedades diversas (cursor, estouro, índice z)

E o problema - há mais de um padrão em torno dele. Para ser mais concreto - mais de cinco. E isso é um problema. Ou não?

E, mais uma vez - a classificação é feita por uma ferramenta, o CSSCOMB desta vez.


A principal vantagem - todas as propriedades são agrupadas pelo senso comum. Todas as propriedades flexíveis - juntas. Todas as posições, esquerda, direita, superior, inferior - juntas.


  • Se você precisar adicionar algo - adicione em algum lugar e deixe uma ferramenta fazer o trabalho.
  • Se você precisar encontrar algo - procure um grupo e, em seguida, procure dentro de um grupo. A propósito - isso é MUITO MAIS rápido que uma pesquisa linear em um caso anterior.

Isso requer alguns esclarecimentos:
  • com classificação alfabética - você está procurando o início da linha, apontando o início e o fim da "sua" primeira letra. Então você vai pensar neste sub-bloco e pronto. Isso é basicamente O (n). Após algum treinamento - O (n / 2), desde que você saiba "onde" procure um suporte.
  • com a classificação do grupo - você sabe "onde" procurar um suporte - os grupos têm uma posição constante e depois passam por um pequeno subconjunto, e pronto. Isso é basicamente - O (3), não "n".

A principal desvantagem - você tem que aprender a separar preocupações. 99% dos entrevistados disseram que este é um grande problema - escrever CSS agrupado , mas é um trabalho de ferramenta, não seu. E sim, existe mais de um padrão, mas não há problema em fazer o pedido por uma ferramenta.


A enquete



Então, eu fiz algumas pesquisas em torno deste problema.


  • 2012y, os css-truques relataram que 45% dos desenvolvedores usam grupos, 14 - tipo alfa, 39 não usam nada
  • pesquisa criada hoje (e ainda não concluída) - 50% para grupos, 25% para alfa, 25% não usam nada

Melhores motivos para usar grupos:


  • Grupos é a maneira mais natural de juntar as coisas: é assim que você as escreve. Imagine se você tivesse que escrever palavras em uma frase em ordem alfabética. As partes superior, direita, inferior e esquerda naturalmente se juntam, logo após a posição: absoluto ( twitter ).
  • Uma boa razão para os grupos serem CSS atômico - o átomo / utilitário geralmente está vinculado a um "grupo", é um caminho natural para estruturas funcionais. Portanto, CSS "normal" pode parecer átomos combinados - ou seja, agrupados ( twitter ).
  • Equipes menores podem preferir agrupar propriedades relacionadas (por exemplo, posicionamento e modelo de caixa) juntas idiomática-css .
  • Existem prós e contras nos dois sentidos. Por um lado, a ordem alfabética é universal (pelo menos para idiomas que usam o alfabeto latino), portanto não há argumento sobre a classificação de uma propriedade antes da outra. No entanto, parece-me extremamente estranho ver propriedades como inferior e superior não muito próximas uma da outra. Por que as animações devem aparecer antes do tipo de exibição? Existem muitas esquisitices com a ordem alfabética. Por outro lado, ordenar propriedades por tipo faz todo sentido. Todas as declarações relacionadas a fontes são reunidas, as partes superior e inferior são reunidas e a leitura de um conjunto de regras é como ler uma história curta. Guia SASS .
  • os arquivos classificados em grupos são menores em 2% após o gzip. Magia Este artigo apresenta 5 maneiras diferentes de solicitar adereços css. estudar

Algumas razões para não usar


  • "Grupos" é ótimo se isso significa o mesmo para todos. Geralmente não. Provavelmente, você pode automatizar a imposição de agrupamentos e, em seguida, está certo. twitter
  • Equipes maiores podem preferir a simplicidade e a facilidade de manutenção fornecidas com a ordem alfabética. novamente idiomática-css

Razões para usar alfabético:


  • Eu costumava fazer por "grupo", mas é muito subjetivo. Além disso, existem muitos complementos para o alpha ordenar um conjunto de linhas. O estilo calculado das ferramentas de desenvolvimento do Chrome também é alfa.
  • alfabeticamente. qualquer outra coisa significa que qualquer pessoa que participe do projeto também precisa aprender seu padrão.
  • minha própria empresa está usando a classificação alfa (isso foi uma surpresa para mim).
  • O Google CSS Guide recomenda ABCSS, sem explicação.

Então, TLDR


  • a maioria de nós (e eu geralmente incluído) não está nem aí para encomendar adereços CSS. A maioria de nós também não está nem aí para o CSS.
  • O CSS-in-JS também não incentiva as melhores práticas.
  • As melhores práticas, como CSS atômico, são besties com grupos (por design), enquanto o BEM, infelizmente, não tem nada a ver com ordenação de propriedades :(

Na verdade, é um pouco inesperado, que essa coisa opinativa não esteja bem estabelecida e definida, e eu tenho que escrever este artigo.


Curiosidade - grupos e ordem alfabética podem ser melhores, por exemplo, para impedir a importação de seus módulos, como eslint-plugin-import
Existem grupos primeiro, e a ordem alfabética é usada apenas dentro de um grupo.


Até agora, ouvi argumentos bastante razoáveis ​​a favor do grouping , mas não um único (razoável para mim) a favor do tipo alfa.


Veja também:



Escolha seu lado e explique sua posição. Tenho pipoca para compartilhar.

Source: https://habr.com/ru/post/pt445202/


All Articles