nhập tệp .css vào tệp .less


228

Bạn có thể nhập tệp .css vào tệp .less ...?

Tôi khá quen thuộc với ít hơn và sử dụng nó cho tất cả sự phát triển của tôi. Tôi thường xuyên sử dụng một cấu trúc như sau:

@import "normalize";

//styles here

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

Tất cả các mục nhập là các tệp .less khác và tất cả đều hoạt động như bình thường.

Vấn đề hiện tại của tôi là: Tôi muốn nhập tệp .css vào .less mà các kiểu tham chiếu được sử dụng trong tệp .css như sau:

@import "../style.css";

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

Tệp .css chứa một lớp được gọi .typenhưng khi tôi cố gắng biên dịch tệp .less thì tôi gặp lỗiNameError: .type is undefined

Tệp .less sẽ không nhập tệp .css, chỉ các tệp .less khác ...? Hay là tôi nói nó sai ...?!


5
LESS quay trở lại CSS, vì vậy bạn sẽ có thể đổi tên style.css thành style.less, sau đó nhập nó như bình thường ... trừ khi tất nhiên đổi tên style.css không phải là một tùy chọn
jackwanders

3
vâng, không may đổi tên tệp .css là không thực sự có thể.
Ông Jonny Wood

1
Có cùng một vấn đề. Vui lòng hỗ trợ vấn đề github.com/cloudhead/less.js/issues/303
Yaroslav

5
nếu bạn không cần phải tham chiếu bên ngoài .css, đồng thời bạn không được sửa đổi (đổi tên) tệp .css, bạn có thể tạo một liên kết tượng trưng đến nó có .lessphần mở rộng. Sau đó tham chiếu nó như một .lesstập tin. Là một liên kết tượng trưng, ​​nó sẽ giảm gánh nặng để đồng bộ hóa chúng khi các thay đổi .css của bạn ngay lập tức ảnh hưởng đến tệp .less đang được nhập. Hạn chế là bạn nên biên dịch lại css cuối cùng sau những thay đổi tiếp theo. Để biết thông tin về cách tạo liên kết tượng trưng trong Windows, hãy nhập MKLINK /?vào cửa sổ lệnh
Ivaylo Slavov

@jackwanders, đổi tên là không cần thiết, vì LESS rơi trở lại CSS (như bạn đã chỉ ra một cách chính xác). Bạn có thể nhập .csstệp bằng (less)chỉ thị nội tuyến và tận dụng thực tế là .csscú pháp là một .lesscú pháp hợp lệ
ira

Câu trả lời:


316

Bạn có thể buộc một tệp được hiểu là một loại cụ thể bằng cách chỉ định một tùy chọn, ví dụ:

@import (css) "lib";

sẽ xuất

@import "lib";

@import (less) "lib.css";

sẽ nhập lib.csstệp và coi nó là ít hơn. Nếu bạn chỉ định một tệp ít hơn và không bao gồm phần mở rộng, sẽ không có phần mở rộng nào.


1
Đây là câu trả lời chính xác. Cái thứ ba sẽ nhập + biên dịch mã CSS dưới dạng ít mã hơn và sẽ không giữ nguyên lệnh.
CMCDragonkai

1
Tôi nghĩ @import (bao gồm) "lib.css" nên được sử dụng. Tôi không thích ngữ nghĩa của việc nói dối với trình biên dịch. Chắc chắn khi bạn biết không có bất kỳ mã LESS nào trong tệp.

16
Điều này sẽ tạo thêm một yêu cầu http cho foo.css, vì vậy lệnh (inline)này (xem stackoverflow.com/a/22594082/160968 ) hiện có thể sử dụng được
Urs

1
(inline)sẽ không hoạt động vì nó không chuyển đổi các tham chiếu bên ngoài sang phông chữ hoặc các @importtệp css ed khác . Bạn vừa kết thúc với một tệp css lớn hơn gây ra rất nhiều yêu cầu HTTP 404 ....
user3338098

Quay trở lại bản chỉnh sửa mới nhất vì đơn giản là nó không chính xác và không trả lời Q.
bảy giai đoạn-tối đa

246

Nếu bạn muốn CSS của bạn được sao chép vào đầu ra mà không được xử lý, bạn có thể sử dụng lệnh (inline)này . ví dụ,

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

7
Hoàn hảo. Điều này hoạt động tốt khi bạn muốn nối một số tệp CSS (ví dụ: trong eg7.less), nhưng không nhất thiết phải xử lý chúng (ví dụ bootstrap-eg7 sử dụng các biểu thức, LESS không xử lý tốt).
Joe

4
Rất hữu ích. @import (css) "styles.css";không làm việc cho tôi.
ivkremer

10
Cả hai đều giải quyết các trường hợp sử dụng khác nhau. Với (css), lệnh @importsẽ giữ nguyên trạng và kết quả là tệp CSS sẽ được trình duyệt tải vào lúc chạy; với (inline), nội dung của tệp CSS thực sự được nhập vào biểu định kiểu đã biên dịch, đây là những gì bạn muốn nếu tệp đó nằm ngoài root web của bạn chẳng hạn. Lưu ý rằng hành vi mặc định khi @importing một .csstập tin giống như với (css)cờ - đọc các tài liệu để biết thêm :)
neemzy

Vì vậy, điều này rõ ràng sẽ không hoạt động nếu tệp css của bạn có @importchỉ thị vì sẽ yêu cầu "xử lý".
dùng3338098

Liệu 'nội tuyến' có nghĩa là tất cả hàng nhập khẩu cũng sẽ được nội tuyến? Có cách nào để đệ quy nội tuyến?
đèn đường

29

Tôi đã phải sử dụng như sau với phiên bản 1.7.4

@import (less) "foo.css"

Tôi biết câu trả lời được chấp nhận là @import (css) "foo.css"nhưng nó không hoạt động. Nếu bạn muốn sử dụng lại lớp css của mình trong tệp mới ít hơn, bạn cần sử dụng (less)và không (css).

Kiểm tra tài liệu .


2
Câu trả lời được chấp nhận ban đầu có tùy chọn chính xác (có, (less)là tùy chọn duy nhất nếu bạn muốn sử dụng lại một số kiểu tệp css) nhưng vì lý do nào đó @Fractalf đã xóa phần chính xác bằng chỉnh sửa mới nhất của mình.
bảy giai đoạn-tối đa

1
Bạn có thể kết hợp "tham chiếu" và "ít hơn":@import (less, reference) "foo.css"
Skarllot

28

Thay đổi phần mở rộng tập tin của tập tin css của bạn thành .less. Bạn không cần phải viết bất kỳ BÀI HỌC nào trong đó; tất cả CSS là LESS hợp lệ (ngoại trừ nội dung MS mà bạn phải thoát, nhưng đó là một vấn đề khác.)

Câu trả lời của mỗi Fractalf này được sửa trong v1.4.0


4
Về mặt kỹ thuật, đó không phải là nhập tệp CSS.
nilskp

@nilskp bạn đúng rồi; nhưng nếu bạn muốn sử dụng các lớp trong một tệp khác, bạn cần một tệp LESS, không phải CSS.
Toán học

1
@nilskp bạn đang nói rằng việc thay đổi tiện ích mở rộng là quá nhiều để yêu cầu để tệp được phân tích cú pháp là ÍT?
Toán học

23
Vâng, tất nhiên nó được. Hãy thử nghĩ bên ngoài một số dự án nhà nhỏ nơi bạn sở hữu tất cả các tập tin. Hãy suy nghĩ các dự án lớn hơn, nhiều người, trong đó không phải ai cũng sử dụng LESS. Có hàng tấn trường hợp sử dụng mà việc thay đổi tên tệp không thể thực hiện được.
nilskp

1
Bạn nên quan tâm nếu css của bạn có chứa một cái gì đó như: calc (100% - 45px); và bạn muốn điều đó trong trình duyệt. Nếu ít xử lý tệp càng ít, đầu ra cuối cùng sẽ là: calc (55%); bởi vì ít calc.
Christof Aenderl

8

Từ trang web LESS :

Nếu bạn muốn nhập tệp CSS và không muốn LESS xử lý tệp đó, chỉ cần sử dụng tiện ích mở rộng .css:

@import "lib.css"; Lệnh sẽ chỉ còn lại và kết thúc ở đầu ra CSS.

Như jitbit chỉ ra trong các bình luận bên dưới, điều này thực sự chỉ hữu ích cho mục đích phát triển, vì bạn sẽ không muốn có @importbăng thông quý giá không cần thiết .


14
Điều này sẽ không NHẬP các tệp, nó sẽ giữ nguyên lệnh @import. Nó vẫn sẽ hoạt động, nhưng bạn nên tránh nhập css - hãy xem nhà phát triển
Alex

5
Cảm ơn thông tin @jitbit. Cá nhân, tôi thấy nó dễ sử dụng hơn @importtrong quá trình phát triển, sau đó kết hợp và thu nhỏ các tệp đã nhập thành một biểu định kiểu duy nhất khi chuyển sang sản xuất.
webdevkit

1
Nếu bạn đọc kỹ câu hỏi (và không chỉ dòng tiêu đề), bạn sẽ thấy OP muốn tham chiếu một lớp trong tệp css dưới dạng mixin, điều này là không thể nếu nó chỉ được phân tích cú pháp dưới dạng nhập css đơn giản.
kinh ngạc

7

Thử cái này :

@import "lib.css";

Từ Tài liệu chính thức:

Bạn có thể nhập cả css và ít tập tin hơn. Chỉ có ít câu lệnh nhập tệp được xử lý, câu lệnh nhập tệp css được giữ nguyên. Nếu bạn muốn nhập tệp CSS và không muốn LESS xử lý tệp đó, chỉ cần sử dụng tiện ích mở rộng .css:


Nguồn: http://lesscss.org/


2
Nếu bạn đọc kỹ câu hỏi (và không chỉ dòng tiêu đề), bạn sẽ thấy OP muốn tham chiếu một lớp trong tệp css dưới dạng mixin, điều này là không thể nếu nó chỉ được phân tích cú pháp dưới dạng nhập css đơn giản.
kinh ngạc

6

Nếu bạn chỉ muốn nhập Tệp CSS làm Tài liệu tham khảo (ví dụ: để sử dụng các lớp trong Mixins) nhưng không bao gồm toàn bộ tệp CSS trong kết quả bạn có thể sử dụng @import (less,reference) "reference.css";:

của tôi

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

tài liệu tham khảo.css

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

* Kết quả (my.css) với lessc my.less out/my.css*

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

Tôi đang sử dụng lessc 2.5.3


Đây là những gì tôi cần. Tuy nhiên, tôi đã phải sử dụng cú pháp mở rộng : &:extend(.reference-class all);. Tham chiếu trực tiếp lớp dẫn đến lỗi biên dịch.
Jens Neubauer

4

Nếu bạn muốn nhập một tệp css nên được sử dụng vì ít sử dụng dòng này:

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

3

vì 1.5.0 u có thể sử dụng từ khóa 'nội tuyến'.

Ví dụ: @import (nội tuyến) "không tương thích.css";

Bạn sẽ sử dụng điều này khi một tệp CSS có thể không tương thích; điều này là do mặc dù Ít hỗ trợ hầu hết các tiêu chuẩn CSS được biết đến, nhưng nó không hỗ trợ nhận xét ở một số nơi và không hỗ trợ tất cả các bản hack CSS đã biết mà không sửa đổi CSS. Vì vậy, bạn có thể sử dụng điều này để bao gồm tệp trong đầu ra để tất cả CSS sẽ nằm trong một tệp.

(nguồn: http://lesscss.org/features/#import-directives-feature )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.