ค่าตัวแปรเชิงลบ Sass?


108

ฉันมีตัวเลือก scss สองตัวที่ฉันใช้จำนวนบวกและลบเท่ากันดังใน:

padding: 0 15px 15px;
margin: 0 -15px 20px -15px;

ฉันต้องการใช้ตัวแปรสำหรับจำนวน 15px ทั้งหมด แต่ไม่ได้ผล:

$pad: 15px;
padding: 0 $pad $pad;
margin: 0 -$pad 20px -$pad;

จำนวนมาร์จิ้นจะแปลงเป็นจำนวนบวก ฉันพลาดอะไรไปรึเปล่า?

คำตอบ:


215

ลองเป็นแบบนี้

margin: 0 (-$pad) 20px (-$pad);

1
ลองใช้วิธีนี้โดยอัตโนมัติ - ดูเหมือนว่าจะไม่ทำงานเมื่อใช้ในฟังก์ชัน Calc แก้ไข: ดูเหมือนว่าคุณไม่จำเป็นต้องใช้วงเล็บเมื่อใช้ calc แต่คุณจำเป็นต้องแก้ไขstackoverflow.com/questions/17982111/…
Kevin

27

วิธีแก้ปัญหาที่มีเหตุผลมากขึ้นตามแนวทาง sass คือinterpolateตัวแปรเช่นตัวอย่างต่อไปนี้:

margin: 0 -#{$pad} 20px -#{$pad};

ตัวอย่าง: https://www.sassmeister.com/gist/c9c0208ada0eb1fdd63ae47830917293


@Green คุณสามารถตรวจสอบลิงค์ตัวอย่างได้ตลอดเวลา: sassmeister.com/gist/c9c0208ada0eb1fdd63ae47830917293
Vangel Tzo

2

ฉันกำลังเพิ่มสองเพนเน ธ ของฉันหลังจากพิจารณาสองคำตอบก่อนหน้านี้ แต่จากนั้นอ่านสิ่งนี้ (ของฉันเน้น)

คุณควรโดยเฉพาะอย่างยิ่งหลีกเลี่ยงการใช้การแก้ไขเช่น #{$number}pxนี่ไม่ได้สร้างตัวเลขจริงๆ! สร้างสตริงที่ไม่มีเครื่องหมายคำพูดที่ดูเหมือนตัวเลข แต่จะไม่ทำงานกับการดำเนินการหรือฟังก์ชันตัวเลขใด ๆ พยายามที่จะทำให้หน่วยทำความสะอาดเพื่อให้คณิตศาสตร์ของคุณ$numberแล้วมีหน่วยหรือเขียนpx$number * 1px

ที่มา

ดังนั้นฉันเชื่อว่าวิธีที่ถูกต้องจะเป็นดังนี้ซึ่งจะรักษาความสามารถทางคณิตศาสตร์ของ SASS / SCSS:

$pad: 15px;
padding: 0 $pad $pad;
margin: 0 $pad*-1 20px $pad*-1;

เมื่อมองแวบแรกดูเหมือนว่าจะเป็นการเลือกไนท์ (คำตอบของคุณ) แต่ในแวบที่สองมันเป็นคำตอบที่ดีกว่าจริงๆ ท้ายที่สุดหากตัวแปรกลายเป็นตัวแปรเชิงลบคำตอบจะกลายเป็นบวก! $ pad: -2rem; ... ระยะขอบ: 0 - # {$ pad}; // กลายเป็น margin: 0 --2rem; ขอบ: 0 $ pad * -1; // กลายเป็น margin: 0 2rem;
Fnordius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.