Architecture Decision Record

Active theme: Light

← Exemplos de registros de decisão

Registro de decisão de arquitetura: framework CSS

Sumário:

Resumo

Questão

Queremos usar um framework CSS para criar nossas aplicações web:

  • Queremos que a experiência do usuário seja rápida e confiável, em todos os navegadores populares e tamanhos de tela.

  • Queremos iteração rápida em design, layout, UI/UX etc.

  • Queremos aplicações responsivas, especialmente para telas menores, como em dispositivos móveis, telas maiores, como widescreens 4K, e telas dinâmicas, como monitores rotacionáveis.

Decisão

Decidido pelo Bulma.

Estado

Decidido pelo Bulma. Abertos a novas escolhas de frameworks CSS à medida que surgirem.

Detalhes

Premissas

Queremos criar apps web modernos, rápidos, confiáveis, responsivos etc.

Os apps web modernos típicos estão reduzindo/eliminando o uso do jQuery por vários motivos:

  • O JavaScript moderno está incorporando gradualmente muitas capacidades que o jQuery oferecia, então o jQuery é menos necessário, e há módulos melhores/mais rápidos/menores que fornecem implementações específicas

  • A abordagem ampla do jQuery é manipular o DOM diretamente, o que é um antipadrão para frameworks JavaScript modernos (p. ex., React, Vue, Svelte)

  • O jQuery interfere em si mesmo se for carregado duas vezes, etc.

Restrições

Se escolhermos um framework CSS que usa jQuery, ficaremos presos a importar o jQuery. Por exemplo, o Semantic UI usa jQuery, e o Tachyons não.

Se escolhermos um framework CSS mínimo, abrimos mão de componentes do framework que podemos querer agora ou em breve. Por exemplo, o Semantic UI fornece um carrossel de imagens, e o Tachyons não.

Posições

Consideramos não usar framework. Isso ainda parece viável, especialmente porque o CSS grid fornece grande parte do que precisamos para o nosso projeto.

Consideramos muitos frameworks CSS por meio de uma triagem rápida em lista curta: Bootstrap, Bulma, Foundation, Materialize, Semantic UI, Tachyons etc. Nossas duas seleções para uma revisão mais profunda são o Semantic UI (porque tem a abordagem mais semântica) e o Bulma (porque tem a abordagem mais leve que fornece os componentes que queremos agora).

Consideramos o Semantic UI. Ele fornece muitos componentes, incluindo os que queremos para o nosso projeto: abas, grades, botões etc. Fizemos um piloto com o Semantic UI de duas maneiras: usando arquivos CDN típicos e usando repositórios NPM. Tivemos sucesso com o Semantic UI em uma página HTML estática, mas não obtivemos sucesso dentro do nosso prazo para construir uma SPA em JavaScript (principalmente por problemas de carregamento do jQuery). Descobrimos que outros programadores vêm pedindo aos desenvolvedores do Semantic UI que criem uma versão sem jQuery, pelos mesmos motivos que nós. Outros programadores vêm pedindo uma versão sem jQuery há muitos anos, mas os desenvolvedores disseram não e declararam que qualquer versão sem jQuery seria difícil demais de escrever, p. ex. ~"o projeto Semantic UI tem mais de 22.000 pontos de contato que usam jQuery".

Exemplo com Semantic:

<div class="ui top attached tabular menu">
  <a class="item">Alpha</a>
  <a class="item">Bravo</a>
</div>

Consideramos o Bulma. O Bulma tem muitas capacidades semelhantes às do Semantic UI, embora não tantos componentes sofisticados. O Bulma é construído com técnicas modernas, como a ausência de jQuery. O Bulma tem alguns componentes de terceiros, dos quais podemos querer usar alguns.

Exemplo com Bulma:

<div class="tabs">
  <ul>
    <li><a>Alpha</a></li>
    <li><a>Bravo</a></li>
  </ul>
</div>

Argumento

Como acima.

Especificamente, o Semantic UI parece ter uma bandeira de cautela tanto em termos de tecnologia (ou seja, tantos pontos de contato com o jQuery) quanto em termos de liderança (ou seja, ficar sem jQuery foi um não categórico, em vez de tentar um roteiro, ou melhoria contínua, ou arrecadação de doações etc.).

Implicações

Se encontrarmos um bom framework CSS sem jQuery, isso geralmente é útil e bom no geral.

Relacionado

Decisões relacionadas

O framework CSS que escolhermos pode afetar a testabilidade.

Requisitos relacionados

Queremos lançar rapidamente um app puramente moderno.

Não queremos gastar tempo trabalhando em frameworks mais antigos (esp. Semantic UI) que usam dependências mais antigas (esp. jQuery).

Artefatos relacionados

Afeta todo o HTML típico que usará o CSS.

Princípios relacionados

Facilmente reversível.

Necessidade de velocidade.

Notas

Quaisquer notas aqui.