Об'єднайте рядки менше


129

Я думаю, що це неможливо, але я подумав, що прошу, якщо є спосіб. Ідея полягає в тому, що у мене є змінна для шляху до папки веб-ресурсів:

@root: "../img/";
@file: "test.css";
@url: @root@file;

.px {
    background-image: url(@url);
}

Я отримую це в результаті:

.px { background-image: url("../img/" "test.css"); }

Але я хочу, щоб рядки поєднувалися в один рядок, як це:

.px { background-image: url("../img/test.css"); }

Чи можливо об'єднати рядки разом у Менше?

Відповіді:


225

Використовувати змінну інтерполяцію :

@url: "@{root}@{file}";

Повний код:

@root: "../img/";
@file: "test.css";

@url: "@{root}@{file}";

.px{ background-image: url(@url); }

Дякую за відповідь! Це прекрасно. Тепер я можу переконатися, що навіть якщо зміниться контекстний шлях, не виникне кошмар, що перетворюється.
juminoz

Дякую, я просто зіткнувся з тією ж проблемою і пропустив цю програму в документах.
Девід

Дякую @Paulpro! У мене виникли проблеми з надбудовою VS Web Compiler, де вона змінювала мій URL-адресу фонового зображення, і я не був надто впевнений, як зробити конкатенацію :)
hatsrumandcode

6
Просто примітка для людей, які можуть скористатися цією відповіддю, але намагаються використати її, наприклад, щоб поєднати числову змінну з рядком типу pxабо %: Ви можете скасувати цитування рядка, попередньо ~width: ~"@{w}px";
відклавши його з тильдом

29

Як видно з документації , ви можете використовувати рядкову інтерполяцію також зі змінними та простими рядками разом:

@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");

12

Я шукав той самий трюк для обробки зображень. Я використовував міксин, щоб відповісти на це:

.bg-img(@img-name,@color:"black"){
    @base-path:~"./images/@{color}/";
    background-image: url("@{base-path}@{img-name}");
}

Тоді ви можете використовувати:

.px{
    .bg-img("dot.png");
}

або

.px{
    .bg-img("dot.png","red");
}

Привіт і ласкаво просимо! чому ви вважаєте, що прийнята відповідь більше не є дійсною? це застаріло? чи відбулося вдосконалення технологій? Це неправильно? чому ваше краще?
STT LCU

9

Для таких струнних одиничних значень, як 45degу transform: rotate(45deg)використанні unit(value, suffix)функції. Приклад:

// Mixin
.rotate(@deg) {
  @rotation: unit(@deg, deg);
  -ms-transform: rotate(@rotation);
  transform: rotate(@rotation);
}

// Usage
.rotate(45);

// Output
-ms-transform: rotate(45deg);
transform: rotate(45deg);

1
Технічно не відповідає на питання, але все ж корисна хитрість.
trysis

7

Не знаєте, чи використовуєте ви менше.js або lessphp (наприклад, у плагіні WP-Менше для WordPress), але за допомогою меншphp ви можете "скасувати котирування" рядків за допомогою ~: http://leafo.net/lessphp/docs/#string_unquoting


1
Це працює і з регулярними МЕНШИМИ. Я не знаю, чи було це у 2012 році, коли була написана ця відповідь.
трис

-7

Використання Drupal 7. Я використав звичайний знак плюс і працює:

@images_path+'bg.png'

5
Якщо він не охоче вивчить Drupal лише для лаконічних рядків, щоб використовувати його в меншій мірі / CSS, я вважаю, що ваша пропозиція нічим не потрібна. Без образи, я просто кажу.
озанмуї
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.