Двойной URL с LESS CSS

У меня есть простая таблица стилей LESS для фоновых изображений сетчатки, но в итоге происходит добавление моего доменного имени к URL-адресу и не удается отобразить изображение.

Пример: это изменит URL на http://mydomain.com/'_img/background@2x.jpg', а затем он не отображается, потому что там есть "там". Как я могу предотвратить это от такого?

.at2x(@path, @w: auto, @h: auto) {
    background-image: url(@path);
    @at2x_path: ~`"@{path}".split('.').slice(0, "@{path}".split('.').length - 1).join(".") +     "@2x" + "." + "@{path}".split('.')["@{path}".split('.').length - 1]`;

    @media all and (-webkit-min-device-pixel-ratio : 1.5) {
        background-image: url("at2x_path);
        background-size: @w @h;
    }
}

html {
    .at2x('_img/background.jpg', 1440px, 900px);
}

1 ответ

Я полагаю, что в коде, который вы разместили, есть опечатка... Я верю во второй строке фонового изображения " должен быть @,

В любом случае, он мог бы решить вашу проблему, сделав это следующим образом (без кавычек вокруг @{path} в части javascript), а затем используя интерполяцию строк. '@{at2x_path}' чтобы получить кавычки вокруг выходного URL.

в МЕНЬШЕ:

.at2x(@path, @w: auto, @h: auto) {
    background-image: url(@path);
    @at2x_path: ~`@{path}.split('.').slice(0, @{path}.split('.').length - 1).join('.') +  '@2x.' + @{path}.split('.')[@{path}.split('.').length - 1]`;

    @media all and (-webkit-min-device-pixel-ratio : 1.5) {
        background-image: url('@{at2x_path}');
        background-size: @w @h;
    }
}

html {
    .at2x('_img/background.jpg', 1440px, 900px);
}

Я протестировал это в 1.3.3 и 1.4 бета, оба раза это дало следующее

CSS-вывод:

html {
  background-image: url('http://mydomain.com/_img/background.jpg');
}
@media all and (-webkit-min-device-pixel-ratio: 1.5) {
  html {
    background-image: url('http://mydomain.com/_img/background@2x.jpg');
    background-size: 1440px 900px;
  }
}

Изменить: так как это использует JavaScript, Андре заметил в комментарии ниже, что он вызывает ошибку синтаксического анализа в lessphp. Итак, вот способ, которым вы могли бы сделать это только с LESS без javascript, передавая mixin в файл, заканчивающийся отдельным аргументом:

.at2x(@path, @sfx, @w: auto, @h: auto) {
    background-image: url('@{path}.@{sfx}');
    @media all and (-webkit-min-device-pixel-ratio : 1.5) {
        background-image: url('@{path}@2x.@{sfx}');
        background-size: @w @h;
    }
}

html {
    .at2x('_img/background', 'jpg', 1440px, 900px);
}

Это решение должно дать тот же результат и не требует JavaScript. Однако теперь вам нужно убедиться, что вы отправляете имя файла, разделенное на два аргумента.

Другие вопросы по тегам