การคำนวณความกว้างจากเปอร์เซ็นต์ถึงพิกเซลแล้วลบด้วยพิกเซลใน LESS CSS


101

ฉันจะคำนวณความกว้างในองค์ประกอบจากร้อยละพิกเซลดังนั้นฉันจะลบ -10px ผ่านการใช้น้อยลงและขจัดตะกรัน () มันเป็นไปได้?

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

ฉันใช้ CSS3 calc()ดังนั้นจึงไม่ทำงาน:calc(100% - 10px)

ตัวอย่าง:ถ้า 100% = 500px ดังนั้น width = 490px (500-10);

ฉันทำการสาธิตสำหรับการทดสอบ: http://jsfiddle.net/4DujZ/55/

ดังนั้นช่องว่างภายในจะพูดว่า: 5 (10px / 2) ตลอดเวลาเมื่อฉันปรับขนาด

ฉันสามารถทำได้ในLESSหรือไม่? ฉันรู้วิธีทำใน jQuery และ CSS ง่ายๆเช่นการเว้นระยะขอบหรืออื่น ๆ ... แต่ฉันจะพยายามทำงานในLESSด้วยcalc()


1
ในฐานะที่เป็นกฎทั่วไปทำเตอร์ไม่ใช่สไตล์ที่ไม่มีความหมายเหมือนหรือdiv span
Pavlo

1
นี่คือมิกซ์เบราว์เซอร์ข้ามที่ฉันเขียนขึ้นเพื่อใช้ calc ในคุณสมบัติ css ใด ๆ : stackoverflow.com/a/24790931/916734
Patrick Berkeley

คำตอบ:


247

คุณสามารถหลีกเลี่ยงcalcอาร์กิวเมนต์เพื่อป้องกันไม่ให้ประเมินจากการคอมไพล์

จากตัวอย่างของคุณคุณก็จะล้อมรอบอาร์กิวเมนต์ดังนี้:

calc(~'100% - 10px')

การสาธิต: http://jsfiddle.net/c5aq20b6/


ฉันพบว่าฉันใช้สิ่งนี้ด้วยหนึ่งในสามวิธีต่อไปนี้:

การหลบหนีขั้นพื้นฐาน

ทุกสิ่งภายในcalcอาร์กิวเมนต์ถูกกำหนดเป็นสตริงและเป็นแบบคงที่ทั้งหมดจนกว่าจะได้รับการประเมินโดยไคลเอนต์:

อินพุตน้อย

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

เอาต์พุต CSS

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

การแก้ไขตัวแปร

คุณสามารถแทรกตัวแปร LESS ลงในสตริง:

อินพุตน้อย

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

เอาต์พุต CSS

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

การผสมค่าที่หลบหนีและรวบรวม

คุณอาจต้องการหลีกเลี่ยงค่าเปอร์เซ็นต์ แต่ลองประเมินบางอย่างในการรวบรวม:

อินพุตน้อย

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

เอาต์พุต CSS

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

ที่มา: http://lesscss.org/functions/#string-functions-escape


2
คุณร็อคเพื่อน! ขอบคุณสำหรับตัวอย่างและคำอธิบายเหล่านั้น คุณรู้ไหมว่าฉันจะแบ่งความกว้างที่ไม่รู้จักของคอนเทนเนอร์ได้อย่างไร (ขอเรียกว่า div.categories) ออกเป็น 4 ส่วนเท่า ๆ กันโดยใช้ LESS?
Shawn Spencer

5
@ShawnSpencer: ระหว่างบรรทัดมีความสับสนมากมาย คุณสามารถสร้าง JSFiddle ที่แสดงถึงสิ่งที่คุณกำลังพยายามแก้ไขได้หรือไม่? ฉันสามารถลองเดากรณีการใช้งานได้ แต่ฉันถูกยับยั้งโดยไม่รู้รายละเอียดทั้งหมดและฉันแน่ใจว่าคุณรู้ว่าจะเป็นอย่างไร - การยับยั้งที่เลวร้ายที่สุดของคุณมักจะทำให้คุณรู้สึกแย่ในที่สุด
natchiketa

2
ฉันไม่อยากลาออกจนครบกำหนด เนื่องจากฉันกำลังมองหาโซลูชัน CSS ที่ตรงไปตรงมาและเนื่องจากฉันสามารถทำให้สิ่งต่างๆใช้งานได้โดยใช้คำตอบข้อใดข้อหนึ่งตอนนี้ฉันก็ทำได้ดี ขอบคุณที่เสนอให้ดูตัวอย่าง JSFiddle ชื่นชมมาก
Shawn Spencer

0

ฉันคิดว่าwidth: -moz-calc(25% - 1em);เป็นสิ่งที่คุณกำลังมองหา และคุณอาจต้องการให้ลิงก์นี้ดูเพื่อขอความช่วยเหลือเพิ่มเติม


-3

หรือคุณสามารถใช้แอตทริบิวต์ margin ดังนี้:

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

3
OP ต้องการความกว้าง 10px น้อยกว่าความกว้าง 100% CSS ของคุณไม่ทำเช่นนั้น มันจะทำให้กว้างขึ้นกว่า 100%
Andrew Barber

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.