LESS CSS'de genişliği yüzdeden piksele, sonra eksi piksele göre hesaplama


101

Bazı elemanlarda genişliği yüzde ile piksel arasında hesaplayacağım, böylece LESS ve calc () kullanarak eksi -10px yapacağım . Mümkün?

div {
    span {
        width:calc(100% - 10px);
    }
}

CSS3 kullanıyorum, calc()bu yüzden çalışmıyor:calc(100% - 10px)

Örnek: eğer% 100 = 500px ise genişlik = 490px (500-10);

Test için bir demo yaptım: http://jsfiddle.net/4DujZ/55/

bu nedenle , yeniden boyutlandırdığımda doldurma şunu söyleyecektir: 5 (10px / 2).

Bunu DAHA AZ olarak yapabilir miyim ? JQuery'de ve kenar boşluğu dolgusu gibi basit CSS'de nasıl yapılacağını biliyorum ... ancak LESS ile işlevsellik yapmaya çalışacağımcalc()


1
Genel bir kural olarak, veya gibi semantiği olmayan seçicilere stil uygulamayın . divspan
Pavlo

1
Calc'ı herhangi bir css özelliğinde kullanmak için yazdığım bir çapraz tarayıcı karışımı: stackoverflow.com/a/24790931/916734
Patrick Berkeley

Yanıtlar:


247

calcDerlemede değerlendirilmelerini önlemek için argümanlardan kaçabilirsiniz .

Örneğinizi kullanarak, argümanları şöyle çevrelersiniz:

calc(~'100% - 10px')

Demo: http://jsfiddle.net/c5aq20b6/


Bunu aşağıdaki üç yoldan biriyle kullandığımı görüyorum:

Temel Kaçış

Bağımsız calcdeğişkenlerin içindeki her şey bir dizge olarak tanımlanır ve istemci tarafından değerlendirilene kadar tamamen statiktir:

DAHA AZ Giriş

div {
    > span {
        width: calc(~'100% - 10px');
    }
}

CSS Çıktısı

div > span {
  width: calc(100% - 10px);
}

Değişkenlerin Enterpolasyonu

Dizeye LESS değişken ekleyebilirsiniz:

DAHA AZ Giriş

div {
    > span {
        @pad: 10px;
        width: calc(~'100% - @{pad}');
    }
}

CSS Çıktısı

div > span {
  width: calc(100% - 10px);
}

Kaçan ve Derlenen Değerleri Karıştırma

Yüzde değerinden kaçınmak isteyebilirsiniz, ancak devam edin ve derleme üzerinde bir şeyler değerlendirin:

DAHA AZ Giriş

@btnWidth: 40px;
div {
    > span {
        @pad: 10px;
        width: calc(~'(100% - @{pad})' - (@btnWidth * 2));
    }
}

CSS Çıktısı

div > span {
  width: calc((100% - 10px) - 80px);
}

Kaynak: http://lesscss.org/functions/#string-functions-escape .


2
Harikasın ahbap! Bu örnekler ve açıklamalar için teşekkür ederim. Bir kabın bilinmeyen genişliğini (buna div.categories diyelim) LESS kullanarak 4 eşit parçaya nasıl bölebileceğimi biliyor musunuz?
Shawn Spencer

5
@ShawnSpencer: Satırların arasında çok fazla belirsizlik var. Çözmeye çalıştığınız şeyi gösteren bir JSFiddle oluşturabilir misiniz? Kullanım durumunu tahmin etmeye çalışabilirim, ancak tüm ayrıntıları bilmediğim için engellenmiş durumdayım ve eminim bunun nasıl gideceğini biliyorsunuzdur - en kötü engellemeleriniz sonunda sizi sinirlendirmeye meyillidir.
natchiketa

2
Olgunluğa istifa etmeye meyilli değilim. Basit bir CSS çözümüne gittiğim için ve cevaplardan birini kullanarak işleri yürütebildiğim için şimdilik iyiyim. Yine de bir JSFiddle örneğine bakmayı teklif ettiğiniz için teşekkür ederiz. Çok minnettarım.
Shawn Spencer


-3

Veya margin özelliğini şu şekilde kullanabilirsiniz:

    {
    background:#222;
    width:100%;
    height:100px;
    margin-left: 10px;
    margin-right: 10px;
    display:block;
    }

3
OP, 10px genişliğinin% 100'den daha az olmasını istiyor. CSS'niz bunu yapmaz. % 100'den daha geniş hale getirecek .
Andrew Barber

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.