Less.js: Consulta de mídia aninhada inválida mesclagem com condição "ou", quando uma variável é usada para consulta de submídia

Criado em 20 set. 2016  ·  5Comentários  ·  Fonte: less/less.js

A consulta de mídia inválida é compilada ao usar uma variável que contém uma definição de consulta de mídia com condições OU (com vírgula ou "ou" -palavra-chave). A consulta de mídia principal deve ser anexada a cada subconsulta.

Menos:

<strong i="7">@highdpi</strong>: ~"(-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx)";
.bg {
    <strong i="8">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        <strong i="9">@media</strong> <strong i="10">@highdpi</strong> {
            background: url([email protected]);
        }
    }
}

Saída:

<strong i="14">@media</strong> (max-width: 1000px) {
  .bg {
    background: url(bg-small.png);
  }
}
<strong i="15">@media</strong> (max-width: 1000px) and (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx) {
  .bg {
    background: url([email protected]);
  }
}

Saída esperada - "(largura máxima: 1000px) e" antes de cada parte separada por vírgulas:

[...]
<strong i="19">@media</strong> (max-width: 1000px) and (-webkit-min-device-pixel-ratio: 1.25), (max-width: 1000px) and (min-device-pixel-ratio: 1.25), (max-width: 1000px) and (min-resolution: 1.25dppx) {
[...]

_Por outro lado, ele compila bem, quando não está usando uma variável: _

.bg {
    <strong i="23">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        <strong i="24">@media</strong> (-webkit-min-device-pixel-ratio: 1.25), (min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx) {
            background: url([email protected]);
        }
    }
}
consider closing feature request needs decision stale

Comentários muito úteis

Isso é mais uma solicitação de recurso do que um bug. Menos não deve entender o que está dentro daqueles ~"" (em qualquer lugar , não apenas para consultas de mídia). Portanto, é esperado que Less nunca saiba sobre quaisquer vírgulas ou outros símbolos especiais ali.

Tecnicamente, o código como acima ("lista de consultas de mídia em uma string com escape") é mais como uma antiga solução alternativa de peculiaridades / sintaxe do que jamais considerado um código adequado (mais uma vez por causa do próprio ~"" ). No Less de hoje, o padrão adequado para obter as mesmas coisas seria usar conjuntos de regras / mixins anônimos / separados em vez de "a variável de valor mágico", por exemplo:

.highdpi(@rules) {
    <strong i="10">@media</strong> (-webkit-min-device-pixel-ratio: 1.25), 
           (min-device-pixel-ratio: 1.25), 
           (min-resolution: 1.25dppx) {
        @rules();
    }
}

.bg {
    <strong i="11">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        .highdpi({
            background: url([email protected]);
        });
    }
}

ou métodos semelhantes.

Relacionado ao nº 1421 e questões / solicitações semelhantes.


Observe que mesmo como uma solicitação de recurso (se proposto), este recurso terá que usar uma sintaxe diferente em vez de ~"" qualquer maneira, ou seja, o exemplo nunca deve funcionar como esperado acima - então não estou marcando isso como " solicitação de recurso "(já que o FR exigiria um pouco mais de percepção).

Mesclando com # 1421, talvez?

Todos 5 comentários

Isso é mais uma solicitação de recurso do que um bug. Menos não deve entender o que está dentro daqueles ~"" (em qualquer lugar , não apenas para consultas de mídia). Portanto, é esperado que Less nunca saiba sobre quaisquer vírgulas ou outros símbolos especiais ali.

Tecnicamente, o código como acima ("lista de consultas de mídia em uma string com escape") é mais como uma antiga solução alternativa de peculiaridades / sintaxe do que jamais considerado um código adequado (mais uma vez por causa do próprio ~"" ). No Less de hoje, o padrão adequado para obter as mesmas coisas seria usar conjuntos de regras / mixins anônimos / separados em vez de "a variável de valor mágico", por exemplo:

.highdpi(@rules) {
    <strong i="10">@media</strong> (-webkit-min-device-pixel-ratio: 1.25), 
           (min-device-pixel-ratio: 1.25), 
           (min-resolution: 1.25dppx) {
        @rules();
    }
}

.bg {
    <strong i="11">@media</strong> (max-width: 1000px) {
        background: url(bg-small.png);

        .highdpi({
            background: url([email protected]);
        });
    }
}

ou métodos semelhantes.

Relacionado ao nº 1421 e questões / solicitações semelhantes.


Observe que mesmo como uma solicitação de recurso (se proposto), este recurso terá que usar uma sintaxe diferente em vez de ~"" qualquer maneira, ou seja, o exemplo nunca deve funcionar como esperado acima - então não estou marcando isso como " solicitação de recurso "(já que o FR exigiria um pouco mais de percepção).

Mesclando com # 1421, talvez?

@ seven-phase-max, obrigado por esclarecer isso. Vou mudar meu mixin para utilizar outro mixin ".highdpi" em vez da variável com string de escape.

@ seven-phase-max Eu acho que há dois problemas / solicitações de recursos separados aqui, então não tenho certeza se devemos mesclar para # 1421 sem especificá-los.

  1. Permita que o analisador Less seja mais flexível com expressões e listas. Permitir que as listas sejam compostas por valores de consulta de mídia ou seletores, por exemplo. Portanto, esse escape de string não precisa ser um requisito quando se deseja transformar uma consulta de mídia em uma variável. (O que é uma necessidade comum.) Este é o # 1421, e o exemplo @media poderia ser apenas algo mais adicionado a esse problema.
  2. Mesclar listas de valores de consulta de mídia aninhados (depende de #1 , mas deve ter uma aprovação / reprovação separada de #1 . Apesar de ter feito isso #1 , #2 é uma próxima etapa lógica. Então, acho que podemos rastrear isso aqui no # 2964.

Referenciando # 3059 aqui, já que essencialmente é quase o mesmo problema. Ou seja, basicamente a questão é: "Podemos nos permitir uma nova análise completa de @media e @supports consultas, etc. etc, após as variáveis ​​serem substituídas por seus valores?" (Isso requer uma grande refatoração do próprio analisador para que ele possa ser usado em uma string arbitrária em um momento arbitrário, ou a duplicação do código de análise em cada nó específico e suas funções eval / css-gen).

Este problema foi marcado automaticamente como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

seven-phases-max picture seven-phases-max  ·  6Comentários

renoth picture renoth  ·  6Comentários

yggi49 picture yggi49  ·  7Comentários

bassjobsen picture bassjobsen  ·  6Comentários

rejas picture rejas  ·  6Comentários