Executando verificação de segurança...
11
cyp
2 min de leitura ·

[PITCH] Cascadium - fiz o meu próprio pré-processador CSS

Boa noite à todos!

Gostaria de apresentar (mais um) projeto que estive trabalhando recentemente, chamado Cascadium (anteriormente SimpleCSSCompiler). Ele surgiu a partir de uma vontade de compilar arquivos CSS com nesting diretamente do .NET, sem ter que instalar o LESS ou SCSS na máquina.

Então eu comecei a escrever o meu próprio parser e transpilador que compilava CSS com nesting para CSS "plano".

Com o tempo fui aperfeiçoando ele, incluindo mais recursos, como escape de variáveis, combinadores, conversores, rewriters, etc.

Um breve exemplo do Cascadium, você consegue transpilar:

:root {
    --my-color: red;
}

div {
    color: --my-color; // não precisa usar var() aqui
    font-family: Arial;

    > .card {
        background-color: gainsboro;
    }

    @media mobile {
        border: none;
    }
}

div {
    position: relative;
}

div > .card {
    color: black;
}

@media mobile {
    div {
        outline-offset: 2px;
    }
}

É compilado para:

:root {
    --my-color: red;
}

div {
    color: var(--my-color);
    font-family: Arial;
    position: relative;
}

div > .card {
    background-color: gainsboro;
    color: black;
}

@media (max-width: 712px) {
    div {
        border: none;
        outline-offset: 2px;
    }
}

Além de minificar e comprimir o CSS, ele "combina" seletores e regras @ que sejam idênticas. Por exemplo, se você tiver vários arquivos com button {...}, a saída irá gerar apenas um button {} contendo todo o conteúdo dos arquivos anteriores.

É possível usar ele com .NET nativamente ou baixar os binários e testar em sua máquina em qualquer projeto. Você consegue iniciar ele como um watcher que monitora edições nos seus arquivos .xcss.

Atualmente o Cascadium está em fase alfa, então pode ser que bastantes bugs apareçam. Estou cuidando dele sozinho, então é difícil testar todas as possíveis situações.

E aí? O que achou do Cascadium? Daria uma chance para ele? Conte o que acha relevante do projeto.

Carregando publicação patrocinada...
1

Aparenta ser algo interessante! Porém me parece que ele ainda não tem suporte para lists, maps, loops e etc, né? Bom, é um projeto com somente 2 meses de vida, então acho que dá para relevar...
Em todo caso, parece promissor. Tentarei testar ele depois caso eu me veja com tempo livre. No momento, minhas únicas ressalvas são relacionadas ao nome, que eu acho que possa ser confundido com o "Cascading" do CSS a depender do contexto, e à extensão que você parece ter adotado, pois acredito que XCSS já seja utilizado em alguma outra tecnologia. No entanto, essas questões não parecem ser problemas significativos.

4

Mudar de nome agora é complicado. Já publiquei o pacote na nuget como Cascadium.Compiler. Mas admito que deveria ter pensado mais.

De qualquer forma, gosto do Cascadium, acho ele curto e memorável.

Sendo sincero, não pretendo expandir ele para ter lists, maps, loops e etc. Quero fazer que ele seja o mais próximo possível do CSS, de fato para não fugir muito do escopo dele. Não fiz para competir com o SCSS, mas como uma alternativa para quem não precisa de 90% dos recursos que maioria dos outros pré-processadores oferecem.

O objetivo dele é simplicidade, manter a sintaxe mais similar possível ao CSS, aplicando e implementando boas propostas que foram recusadas pelo comitê web, como Nesting.

De qualquer forma, agradeço o feedback!

1

O engraçado é que você traduz mobile para max width. Você não usa o conceito de mobile first no exemplo, o que torna a construção do css responsivo mais difícil.

Eu usaria desktop tablet ou desktop com min width.

1

Esse foi apenas um exemplo de como você pode usar o at-rules-rewrites.

@media mobile você define. O exemplo apenas mostra que você pode criar rewrites para suas próprias regras at-rules.

Então se você tem:

{
    "atRulesRewrites": {
        "abcdef": "media (max-width: 1000px)"
    }
}

Quando escrever @abcdef, ele irá reescrever para @media (max-width: 1000px). Não funciona como um text-replace, é um pouco mais complexo que isso, pode ver no código fonte como ele faz essa busca.

De qualquer forma, não há nada de "mobile first" aí. Não tem conceito nenhum, você escreve do jeito que quiser. Se quiser fazer 10x regras para cada breakpoint diferente, tudo bem, o compilador irá reescrever conforme aparecerão.

Você pode escrever o seu @media desktop, @media lg, @media tablet, e etc...

0