імпортувати .css файл у .less файл


228

Чи можете ви імпортувати .css файли у .less файли ...?

Я досить мало знайомий з меншим і використовую його для всього свого розвитку. Я регулярно використовую структуру так:

@import "normalize";

//styles here

@import "mixins";
@import "media-queries";
@import "print";

Увесь імпорт - це інші файли, що не містять файлів, і працює як слід.

Моя поточна проблема така: я хочу імпортувати .css файл у .less, що посилаються на стилі, що використовуються у файлі .css, наступним чином:

@import "../style.css";

.small {
    font-size:60%;
    .type;
}
// other styles here

Файл .css містить клас, який називається, .typeале коли я намагаюся скласти файл .less, я отримую помилкуNameError: .type is undefined

Чи не імпортує файл .less файли .css, лише інші файли .less ...? Або я неправильно посилаюсь на це ...?!


5
МЕНШЕ повертається до CSS, тому вам слід мати змогу просто перейменувати style.css на style.less, а потім імпортувати його як завжди ... якщо, звичайно, перейменування style.css не є варіантом
jackwanders

3
так, на жаль, перейменування файлу .css насправді неможливо.
Містер Джоні Вуд

1
Мають таку ж проблему. Будь ласка, підтримайте випуск github.com/cloudhead/less.js/isissue/303
Ярослав

5
якщо вам не потрібно посилатися на .css зовні, і в той же час ви не повинні змінювати (перейменувати) файл .css, ви можете створити символічне посилання на нього, яке має .lessрозширення. Потім посилайтеся на це як на .lessфайл. Будучи символічним посиланням, воно знімає тягар синхронізувати їх, оскільки ваші зміни .css негайно впливають на імпортований файл .less. Недолік полягає в тому, що слід перекомпілювати остаточний css після наступних змін. Для отримання інформації про створення символічних посилань у Windows введіть MKLINK /?у командному вікні
Івайло Славов

@jackwanders, перейменування не потрібно, оскільки LESS повертається до CSS (як ви правильно вказуєте). Ви можете імпортувати .cssфайл за допомогою вбудованої (less)директиви та скористатися тим, що .cssсинтаксис є дійсним .lessсинтаксисом
ira

Відповіді:


316

Ви можете змусити файл інтерпретувати як певний тип, вказавши параметр, наприклад:

@import (css) "lib";

виведе

@import "lib";

і

@import (less) "lib.css";

імпортує lib.cssфайл і вважатиме його меншим. Якщо ви вказали, що файл менше і не включає розширення, жоден не буде доданий.


1
Це правильна відповідь. Третій імпортує + компілює код CSS як менший код і не залишить директиву неушкодженою.
CMCDragonkai

1
Думаю, слід використовувати @import (включати) "lib.css". Мені не подобається семантика брехні компілятора. Безумовно, коли ви знаєте, що у файлі немає МІНШОГО коду.

16
Це створить додатковий http-запит на foo.css, тому (inline)директива (див. Stackoverflow.com/a/22594082/160968 ) тепер бажана
Urs

1
(inline)не працюватиме, оскільки не трансформує зовнішні посилання на шрифти чи інші @importфайли ed css. Ви просто закінчите більший файл css, який спричиняє багато 404 запитів HTTP ....
user3338098

Відкат останньої редакції, оскільки вона була просто некоректною і не відповіла на запитання
макс

246

Якщо ви хочете, щоб ваш CSS був скопійований у висновок без обробки, можете скористатися (inline)директивою . наприклад,

@import (inline) '../timepicker/jquery.ui.timepicker.css';

7
Ідеально. Це добре працює, коли ви хочете сформулювати деякі файли CSS (наприклад, у ie7.less), але не обов'язково їх обробляти (наприклад, bootstrap-ie7 використовує вирази, з якими LESS не справляється добре).
Джо

4
Дуже корисний. @import (css) "styles.css";не працювало для мене.
ivkremer

10
Вони обидва розглядають різні випадки використання. З (css), @importдиректива залишиться такою, якою є, і в результаті файл CSS завантажується браузером під час виконання; з (inline), вміст файлу CSS фактично імпортується в складений аркуш стилів, що саме ви хочете, якщо, наприклад, цей файл вийшов із вашого веб-кореня. Зауважте, що поведінка за замовчуванням під @importчас .cssфайлу збігається з (css)прапором - читайте документи для отримання додаткової інформації :)
neemzy

тож, очевидно, це не спрацює, якщо у вашому файлі css є @importдирективи, як це вимагало б "обробки".
користувач3338098

Чи означає "вбудований", що весь його імпорт також буде накреслений? Чи є спосіб рекурсивно вбудовувати?
ліхтарик

29

Мені довелося використовувати наступне з версією 1.7.4

@import (less) "foo.css"

Я знаю, що прийнята відповідь є, @import (css) "foo.css"але це не спрацювало. Якщо ви хочете повторно використовувати свій клас css в новому менш файлі, вам потрібно скористатися, (less)а не (css).

Перевірте документацію .


2
Спочатку прийнята відповідь мала правильну опцію (так, (less)це єдиний варіант, якщо ви хочете повторно використовувати деякі стилі файлу css), але чомусь @Fractalf видалив правильну частину своїм останнім редагуванням.
семифази-макс

1
Можна поєднати "посилання" та "менше":@import (less, reference) "foo.css"
Skarllot

28

Змініть розширення файлу CSS на .less. Вам не потрібно писати в цьому МЕНШЕ; всі CSS дійсні МЕНШЕ (за винятком речей MS, які вам доведеться уникати, але це інша проблема.)

За відповіддю Фракталфа це зафіксовано в версії 1.4


4
Технічно це не імпорт файлу CSS.
nilskp

@nilskp ви праві; але якщо ви хочете використовувати класи в іншому файлі, вам потрібен МЕНШИЙ файл, а не CSS.
Математика

1
@nilskp Ви кажете, що змінити розширення - це занадто багато запитань для того, щоб файл розібрався як МЕНШЕ?
Математика

23
Так, звичайно. Спробуйте думати за межами якогось маленького домашнього проекту, де ви володієте всіма файлами. Подумайте про масштабніші проекти для багатьох людей, де не всі використовують менше. Є багато випадків використання, коли зміна імен файлів неможлива.
nilskp

1
Вам слід подбати, чи ваш css містить щось на кшталт: calc (100% - 45px); і ви хочете це в браузері. Якщо менше обробляє файл як менше, кінцевим результатом буде: calc (55%); тому що менше обчислюється.
Крістоф Ендерл

8

З сайту МЕНШЕ :

Якщо ви хочете імпортувати файл CSS, і не хочете, щоб НЕ МОЖЛО обробляти його, просто скористайтеся розширенням .css:

@import "lib.css"; Директива просто залишиться такою, якою є, і залишиться у висновку CSS.

Як вказує jitbit у коментарях нижче, це дійсно корисно лише для цілей розвитку, оскільки ви не хочете, щоб у вас було зайве @importспоживання дорогоцінної пропускної здатності.


14
Це не імпортуватиме файл, воно залишить директиву @import недоторканою. Він все одно працюватиме, але вам слід уникати css-import - подивіться це на developers.google.com/speed/docs/best-practices/…
Alex

5
Дякуємо за інформацію @jitbit. Особисто мені легше використовувати @importпід час розробки, а потім комбінувати та мінімізувати імпортовані файли в єдину таблицю стилів під час переходу до виробництва.
webdevkit

1
Якщо ви уважно прочитаєте питання (а не лише рядок заголовка), то побачите, що ОП хоче посилатись на клас у файлі css як на змішання, що неможливо, якщо його просто проаналізують як простий імпорт css.
трепет

7

Спробуйте це :

@import "lib.css";

З офіційної документації:

Ви можете імпортувати як файли css, так і менше. Обробляється лише менше заяв про імпорт файлів, а файли css - файли імпорту зберігаються як є. Якщо ви хочете імпортувати файл CSS, і не хочете, щоб НЕ МОЖЛО обробляти його, просто скористайтеся розширенням .css:


Джерело: http://lesscss.org/


2
Якщо ви уважно прочитаєте питання (а не лише рядок заголовка), то побачите, що ОП хоче посилатись на клас у файлі css як на змішання, що неможливо, якщо його просто проаналізують як простий імпорт css.
трепет

6

Якщо ви просто хочете імпортувати CSS-файл як довідник (наприклад, використовувати класи в Mixins), але не включати весь файл CSS в результат, який ви можете використовувати@import (less,reference) "reference.css"; :

мій

 @import (less,reference) "reference.css";
 .my-class{
     background-color:black;
     .reference-class;
     color:blue;
 }

reference.css

.reference-class{
    border: 1px solid red;
}

* Результат (my.css) з lessc my.less out/my.css*

.my-class {
  background-color: black;
  border: 1px solid red;
  color: blue;
}

Я використовую lessc 2.5.3


Це було те, що мені було потрібно. Тим НЕ менше, я повинен був використовувати подовжувати синтаксис: &:extend(.reference-class all);. Безпосереднє посилання на клас призвело до помилки компіляції.
Єнс Нойбауер

4

Якщо ви хочете імпортувати файл css, який слід мати як менший, використовуйте цей рядок:

.ie {
  @import (less) 'ie.css';
}

3

оскільки 1.5.0 u може використовувати ключове слово "inline".

Приклад: @import (inline) "не менш сумісний.css";

Ви будете використовувати це, якщо файл CSS може бути менш сумісним; це тому, що хоча Менше підтримує більшість відомих стандартів CSS, він не підтримує коментарів у деяких місцях і не підтримує всі відомі хаки CSS, не змінюючи CSS. Таким чином, ви можете використовувати це, щоб включити файл у висновок, щоб усі CSS знаходилися в одному файлі.

(джерело: http://lesscss.org/features/#import-directives-feature )

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.