.css dosyasını .less dosyasına aktar


228

.Css dosyalarını .less dosyalarına aktarabilir misiniz?

Daha azını çok iyi biliyorum ve bunu tüm gelişimim için kullanıyorum. Düzenli olarak şu şekilde bir yapı kullanıyorum:

@import "normalize";

//styles here

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

Tüm içe aktarmalar diğer .less dosyalarıdır ve olması gerektiği gibi çalışır.

Şu anki sorunum şu: .css dosyasında kullanılan biçemlere aşağıdaki gibi başvuran bir .css dosyasını .less dosyasına aktarmak istiyorum:

@import "../style.css";

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

.type.Css dosyası adlı bir sınıf içeriyor ancak .less dosyasını derlemeye çalıştığımda hatayı alıyorumNameError: .type is undefined

.Less dosyası .css dosyalarını içe aktarmayacak, sadece diğer .less dosyalarını içe aktarmayacak mı? Yoksa yanlış mı atıfta bulunuyorum ...?!


5
LESS CSS'ye geri döndü, bu yüzden style.css dosyasını style.less olarak yeniden adlandırabilmelisiniz, daha sonra her zamanki gibi içe aktarın ... tabii ki style.css'i yeniden adlandırmak bir seçenek değilse
jackwanders

3
evet, ne yazık ki .css dosyasını yeniden adlandırmak gerçekten mümkün değil.
Jonny Jonny

1
Aynı sorunu yaşayın. Lütfen github.com/cloudhead/less.js/issues/303
Yaroslav

5
.css dosyasına harici olarak başvurmanız gerekmiyorsa ve aynı zamanda .css dosyasını değiştirmemeniz (yeniden adlandırmamanız) gerekiyorsa, .lessuzantıya sahip olan sembolik bir bağlantı oluşturabilirsiniz . Sonra .lessdosya olarak başvurunuz . Sembolik bir bağlantı olduğundan, .css değişiklikleriniz içe aktarılan .less dosyasını hemen etkilediği için bunları senkronize etme yükünü kaldırır. Dezavantajı, sonraki değişikliklerden sonra son css yeniden derlemeniz gerektiğidir. Windows'da sembolik bağlantılar oluşturma hakkında bilgi için MKLINK /?, bir komut penceresi yazın
Ivaylo Slavov

@jackwanders, yeniden adlandırmak gerekli değildir, çünkü LESS CSS'ye geri döner (doğru şekilde işaret ettiğiniz gibi). .cssSatır içi (less)yönergeyi kullanarak dosyayı içe aktarabilir ve .csssözdiziminin geçerli bir .lesssözdizimi olmasından yararlanabilirsiniz
ira

Yanıtlar:


316

Bir seçenek belirleyerek bir dosyayı belirli bir tür olarak yorumlanmaya zorlayabilirsiniz, örneğin:

@import (css) "lib";

çıktı olacak

@import "lib";

ve

@import (less) "lib.css";

lib.cssdosyayı içe aktaracak ve daha az sayılacaktır. Bir dosyanın daha az olduğunu ve uzantı içermediğini belirtirseniz hiçbiri eklenmez.


1
Bu doğru cevap. Üçüncüsü, CSS kodunu daha az kod olarak içe aktarır ve derler ve yönergeyi olduğu gibi bırakmaz.
CMCDragonkai

1
Bence @import (include) "lib.css" kullanılmalı. Derleyiciye yalan söylemenin anlamını sevmiyorum. Kesinlikle dosyada LESS kodu olmadığını bildiğinizde.

16
Bu, foo.css için ek bir http isteği oluşturacaktır, bu nedenle (inline)yönerge (bkz. Stackoverflow.com/a/22594082/160968 ) artık tercih edilebilir
Urs

1
(inline)harici referansları fontlara veya diğer @import'ed css dosyalarına dönüştürmediği için çalışmaz . Sadece 404 HTTP isteği bir sürü neden daha büyük bir css dosyası ile sona ....
user3338098

Sadece yanlış olduğu ve Q'ya cevap vermediği için en son düzenlemeyi geri almak.
seven-phases-max

246

CSS'nizin işlenmeden çıktıya kopyalanmasını istiyorsanız, (inline)yönergeyi kullanabilirsiniz . Örneğin,

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

7
Mükemmel. Bu, bazı CSS dosyalarını (örneğin bir ie7.less'ta) birleştirmek istediğinizde, ancak bunları mutlaka işlemek istemediğinizde iyi çalışır (örneğin, bootstrap-ie7, LESS'in iyi işlemediği ifadeleri kullanır).
Joe

4
Çok yararlı. @import (css) "styles.css";benim için çalışmadı.
ivkremer

10
Her ikisi de farklı kullanım durumlarını ele alıyor. İle (css), @importyönerge olduğu gibi kalır ve sonuç olarak CSS dosyası tarayıcı tarafından çalışma zamanında yüklenir; ile (inline), CSS dosyasının içeriği aslında derlenmiş stil sayfasına aktarılır, bu dosya örneğin web kökünüzden çıkarsa ne istersiniz. @importBir .cssdosya hazırlarken varsayılan davranışın (css)bayrakla aynı olduğunu unutmayın - daha fazla bilgi için dokümanları okuyun :)
neemzy

css dosyanız @import"işleme" gerektirecek gibi yönergeler içeriyorsa, bu açıkça çalışmaz .
user3338098

'Satır içi' tüm ithalatın da satır içi olacağı anlamına mı geliyor? Yinelenen satır içi yapmanın bir yolu var mı?
sokak lambası

29

1.7.4 sürümü ile aşağıdakileri kullanmak zorunda kaldım

@import (less) "foo.css"

Kabul edilen cevabın olduğunu biliyorum @import (css) "foo.css"ama işe yaramadı. Eğer yeni az dosyasında css sınıfını yeniden kullanmak istiyorsanız, kullanmak gerek (less)değil(css) .

Dokümanları kontrol edin .


2
Kabul cevabı (evet, başlangıçta doğru seçeneği vardı (less)ise sadece bir css dosyasının bazı stilleri yeniden kullanmak istiyorsanız opsiyon) ama nedense @Fractalf yaptığı son düzenleme ile doğru parçasını kaldırıldı.
yedi aşamalı-max

1
"Referans" ve "daha az" birleştirebilirsiniz: @import (less, reference) "foo.css"
Skarllot

28

Css dosyanızın dosya uzantısını olarak değiştirin .less. İçine DAHA AZ yazmanıza gerek yok; tüm CSS geçerli DAHA AZ (kaçmak zorunda MS şeyler hariç, ama bu başka bir sorun.)

Fractalf'ın cevabı başına bu v1.4.0'da düzeltildi


4
Teknik olarak, bu bir CSS dosyasını içe aktarmıyor.
nilskp

@nilskp haklısın; ancak sınıfları başka bir dosyada kullanmak istiyorsanız, CSS yerine LESS dosyasına ihtiyacınız vardır.
Matematik

1
@nilskp, dosyanın LESS olarak ayrıştırılması için uzantıyı değiştirmenin sorulmayacak kadar fazla olduğunu mu söylüyorsunuz?
Matematik

23
Evet, tabi ki öyle. Tüm dosyalara sahip olduğunuz küçük bir ev projesinin dışında düşünmeye çalışın. Herkesin LESS kullanmadığı daha büyük, çok kişili projeleri düşünün. Dosya adlarının değiştirilmesinin mümkün olmadığı tonlarca kullanım durumu vardır.
nilskp

1
Css'nizin şöyle bir şey içerip içermediğine dikkat etmelisiniz: calc (100% - 45px); ve bunu tarayıcıda istiyorsunuz. Daha az dosya daha az işlenirse, son çıktı: calc (% 55); çünkü kireç daha az.
Christof Aenderl

8

Gönderen AZ web :

Bir CSS dosyasını almak istiyorsanız ve LESS'in işlemesini istemiyorsanız, sadece .css uzantısını kullanın:

@import "lib.css"; Yönerge olduğu gibi bırakılacak ve CSS çıktısına eklenecektir.

Aşağıdaki yorumlarda jitbit'in işaret ettiği gibi, gereksiz geliştirme @importtüketen değerli bant genişliğine sahip olmak istemeyeceğiniz için bu sadece geliştirme amaçlı olarak yararlıdır .


14
Bu dosya İTHALAT olmayacak, @import yönergesini olduğu gibi bırakacaktır. Yine de işe yarayacak, ancak css-import'dan kaçınmalısınız - şu geliştiricilere
Alex

5
Bilgi için teşekkürler @jitbit. Şahsen, @importgeliştirme sırasında kullanımını daha kolay buluyorum , daha sonra üretime geçerken içe aktarılan dosyaları tek bir stil sayfasında birleştirip küçültüyorum.
webdevkit

1
Soruyu dikkatlice okursanız (ve yalnızca başlık satırını değil), OP'nin css dosyasındaki bir sınıfa mixin olarak başvurmak istediğini göreceksiniz, bu basit bir css içe aktarma olarak ayrıştırılması mümkün değildir.
korku

7

Bunu dene :

@import "lib.css";

Resmi Belgelerden:

Hem css hem de daha az dosyayı içe aktarabilirsiniz. Yalnızca daha az dosya içe aktarma ifadesi işlenir, css dosyası içe aktarma ifadeleri oldukları gibi tutulur. Bir CSS dosyasını almak istiyorsanız ve LESS'in işlemesini istemiyorsanız, sadece .css uzantısını kullanın:


Kaynak: http://lesscss.org/


2
Soruyu dikkatli bir şekilde okursanız (ve yalnızca başlık satırını değil), OP'nin css dosyasındaki bir sınıfa mixin olarak başvurmak istediğini göreceksiniz;
korku

6

Eğer sadece bir referans olarak CSS-Dosya aktarmak istiyorsanız (örneğin Mixins sınıfları kullanmak için) ama değil kullanabilirsiniz sonucu bütün CSS dosyasını dahil@import (less,reference) "reference.css"; :

my.less

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

reference.css

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

* İle sonuç (my.css) lessc my.less out/my.css*

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

kullanıyorum lessc 2.5.3


İhtiyacım olan buydu. Ancak, sözdizimi uzatmak kullanmak zorunda kaldı: &:extend(.reference-class all);. Doğrudan sınıfa başvurulması derleme hatasıyla sonuçlandı.
Jens Neubauer

4

Daha az işlenmesi gereken bir css dosyasını içe aktarmak istiyorsanız bu satırı kullanın:

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

3

1.5.0'dan beri u 'satır içi' anahtar kelimesini kullanabilirsiniz.

Örnek: @import (satır içi) "daha az uyumlu olmayan .css";

Bir CSS dosyası Daha az uyumlu olmayabilir; bunun nedeni, Less'in bilinen CSS standartlarının çoğunu desteklemesine rağmen, bazı yerlerde yorumları desteklememesi ve CSS'yi değiştirmeden bilinen tüm CSS saldırılarını desteklememesidir. Böylece, tüm CSS'lerin tek bir dosyada olması için dosyayı çıktıya dahil etmek için bunu kullanabilirsiniz.

(kaynak: http://lesscss.org/features/#import-directives-feature )

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.