CSS นี้สร้างวงกลมได้อย่างไร


206

นี่คือ CSS:

div {
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}

มันสร้างวงกลมด้านล่างได้อย่างไร

ป้อนคำอธิบายภาพที่นี่

สมมติว่าถ้าความกว้างของรูปสี่เหลี่ยมผืนผ้าเท่ากับ 180 พิกเซลและความสูงเป็น 180 พิกเซลก็จะปรากฏดังนี้:

ป้อนคำอธิบายภาพที่นี่

หลังจากใช้รัศมีเส้นขอบ 30 พิกเซลมันจะปรากฏดังนี้:

ป้อนคำอธิบายภาพที่นี่

สี่เหลี่ยมเล็กลงนั่นคือเกือบจะหายไปถ้าขนาดรัศมีเพิ่มขึ้น

ดังนั้นเส้นขอบของพิกเซลที่ 180 ด้วยheight/width-> 0pxกลายเป็นวงกลมที่มีรัศมี 180 พิกเซลได้อย่างไร


14
มันเป็นวัตถุ 0x0 ที่มีเส้นขอบ 180 พิกเซลรอบ ๆซึ่งมีมุมโค้งมน ดังนั้นมุมโค้งมนจึงเป็นจตุภาคของวงกลม
Kaz

ฉันมีคำถามโง่ ๆ อยู่ในใจว่าทำไมคุณถึงอยากทำcircleชายแดน? เราสามารถทำcircleด้วยwidthและheightดังนั้นทำไมเราทำกับborder
ช่าง

7
FYI สำหรับการสร้างวงกลมให้ใช้ <code> รัศมีเส้นขอบ: 50% </code> - ทำให้ง่ายต่อการปรับเพียงความกว้าง / ความสูงเมื่อทำให้เค้าโครงของคุณถูกต้อง
David Gilbertson

ใช่ผู้หญิงมันเป็นคณิตศาสตร์
Medet Tleukabiluly

คำตอบ:


372

เส้นขอบของพิกเซลที่มีความสูง / ความกว้าง -> 0px กลายเป็นวงกลมที่มีรัศมี 180 พิกเซลได้อย่างไร

ลองปรับที่เป็นสองคำถาม:

ทำที่ไหนwidthและheightใช้จริง?

ลองมาดูที่พื้นที่ของกล่องทั่วไป (ที่มา ):

W3C: พื้นที่ของกล่องทั่วไป

กระบวนการheightและwidthนำไปใช้กับเนื้อหาเท่านั้นหากมีการใช้รูปแบบกล่องที่ถูกต้อง (ไม่มีโหมดแปลก ๆ ไม่มี Internet Explorer รุ่นเก่า)

สถานที่ที่ไม่border-radiusใช้?

border-radiusใช้บนขอบขอบ หากไม่มีช่องว่างภายในหรือเส้นขอบก็จะส่งผลกระทบต่อขอบเนื้อหาของคุณโดยตรงซึ่งส่งผลให้ตัวอย่างที่สามของคุณ

สิ่งนี้หมายความว่าสำหรับรัศมีเส้นขอบ / วงกลมของเรา?

ซึ่งหมายความว่ากฎ CSS ของคุณให้ผลลัพธ์ในกล่องที่ประกอบด้วยเส้นขอบเท่านั้น กฎของคุณระบุว่าเส้นขอบนี้ควรมีความกว้างสูงสุด 180 พิกเซลในทุกด้านในขณะที่ในอีกทางหนึ่งควรมีรัศมีสูงสุดที่มีขนาดเท่ากัน:

ภาพตัวอย่าง

ในรูปภาพเนื้อหาจริงขององค์ประกอบของคุณ (จุดสีดำเล็ก ๆ ) นั้นไม่มีอยู่จริง หากคุณไม่ได้สมัครเลยborder-radiusคุณก็จะได้กล่องสีเขียว border-radiusช่วยให้คุณมีวงกลมสีฟ้า

ทำความเข้าใจได้ง่ายขึ้นถ้าคุณใช้border-radius มุมทั้งสอง :

#silly-circle{
    width:0; height:0;
    border: 180px solid red;
    border-top-left-radius: 180px;
    border-top-right-radius: 180px;
}

เส้นขอบนำไปใช้กับสองมุมเท่านั้น

เนื่องจากในตัวอย่างของคุณขนาดและรัศมีของทุกมุม / เส้นขอบเท่ากันคุณจะได้วงกลม

แหล่งข้อมูลเพิ่มเติม

อ้างอิง

การสาธิต

  • โปรดเปิดการสาธิตด้านล่างซึ่งแสดงให้เห็นว่าborder-radiusมีผลกระทบต่อเส้นขอบอย่างไร (คิดว่ากล่องสีฟ้าด้านในเป็นกล่องเนื้อหาขอบสีดำด้านในเป็นขอบแพ็ดดิ้งพื้นที่ว่างเป็นช่องว่างภายในและขอบสีแดงขนาดยักษ์เช่นกัน ชายแดน). การแยกระหว่างกล่องด้านในและขอบสีแดงมักจะส่งผลกระทบต่อขอบเนื้อหา


ฉันไม่คิดว่า css3-background ทำการอ้างอิงใด ๆ กับ css3-box (css3-box กำลังรอการเขียนใหม่)
BoltClock

@BoltClock: ผมคิดว่า CSS3 กล่องจะกำหนดขอบ มีเพียงการอ้างอิงถึง css2.1-box ในการแนะนำ (ไม่ใช่แบบเชิงบรรทัดฐาน) และรูปภาพที่กำหนดยังมีดังนั้น css3-box ไม่จำเป็นต้องเข้าใจจริงๆborder-radius(การเปลี่ยนแปลงที่คาดหวังในการเขียนของ css3- กล่อง?).
ซีตา

@ ซีตาฉันมีคำถามงี่เง่าในใจของฉันทำไมคุณต้องการที่จะทำcircleกับชายแดน ??? เราสามารถทำcircleด้วยwidthและheightดังนั้นทำไมเราทำกับborder
ช่าง

1
@Sarfaraz: ดูคำถามของ OP: "ดังนั้น 180px ที่มีheight/width-> 0pxวงกลายเป็นวงกลมที่มีรัศมี 180px ได้อย่างไร" . ฉันแค่ตอบคำถาม มีวิธีอื่นในการสร้างแวดวง แต่ OP มีความสนใจเฉพาะวิธีการทำงานเฉพาะนี้
ซีตา

@ ซีตา: ฉันไม่แน่ใจว่าสิ่งที่จะเปลี่ยนแปลง แต่จาก WD ที่ไม่ได้รับการปรับปรุงใน 6 ปีฉันสงสัยว่ามันจะเป็นจำนวนมาก ฉันรู้ว่าส่วนที่ 11 ( overflowตระกูลของคุณสมบัติ) ตอนนี้อาศัยอยู่ในโมดูลของตัวเอง css-overflow-3 แต่นั่นยังไม่ได้รับการสะท้อนใน ED คุณจะเห็นปัญหามากมายใน ED แต่ฉันคิดว่ามันไม่ใช่รายการที่ครบถ้วนสมบูรณ์: dev.w3.org/csswg/css3-box
BoltClock

94

การสาธิต

ลองตรวจสอบคำถามในอีกทางหนึ่งด้วยการสาธิตภาพนี้:

มาดูกันก่อนว่ารัศมีของขอบผลิตได้อย่างไร

ในการสร้างรัศมีมันใช้เวลาสองด้านของชายแดน หากคุณตั้งค่ารัศมีเส้นขอบเป็น 50 พิกเซลจะใช้เวลา 25 พิกเซลจากด้านหนึ่งและ 25 พิกเซลจากอีกด้านหนึ่ง

ป้อนคำอธิบายภาพที่นี่

และการใช้ 25 พิกเซลจากแต่ละด้านมันจะสร้างดังนี้

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 50px 0 0;
}

ป้อนคำอธิบายภาพที่นี่

ทีนี้ลองดูว่าใช้สี่เหลี่ยมจัตุรัสมากเท่าใดในการใช้กับมุมใดมุมหนึ่ง

สามารถรับได้สูงสุด 180 พิกเซลจากด้านบนและด้านขวา 180 พิกเซล จากนั้นมันจะสร้างสิ่งนี้:

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 0 0;
}

ป้อนคำอธิบายภาพที่นี่

และดูสิ่งนี้มันเกิดขึ้นได้อย่างไรถ้าเราตั้งค่ารัศมีที่ไม่เท่ากัน?

สมมติว่าถ้าคุณใช้รัศมีชายแดนกับมุมทั้งสองไม่เท่ากัน:

  • มุมบนขวาถึง 180 พิกเซล

  • มุมล่างขวาถึง 100 พิกเซล

จากนั้นก็จะพา

  • ด้านบนขวา: 90 พิกเซลจากด้านบนและ 90 พิกเซลจากด้านขวา

  • ล่างขวา: 50 พิกเซลจากด้านขวาและ 50 พิกเซลจากด้านล่าง

จากนั้นมันจะผลิตเช่นนี้

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 100px 0;
}

ป้อนคำอธิบายภาพที่นี่

ต้องใช้เส้นขอบสูงสุดเท่าไรในการใช้กับทุกด้าน และดูว่ามันสร้างวงกลมได้อย่างไร

อาจใช้เวลาถึงครึ่งหนึ่งของขนาดเส้นขอบนั่นคือ 180 พิกเซล / 2 = 90 พิกเซล จากนั้นมันก็จะสร้างวงกลมแบบนี้

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 180px;
}

ป้อนคำอธิบายภาพที่นี่

เหตุใดจึงต้องใช้เพียงครึ่งหนึ่งของสี่เหลี่ยมจัตุรัสเพื่อใช้กับทุกด้าน

เพราะทุกมุมต้องตั้งค่ารัศมีของพวกเขาเท่า ๆ กัน

รับส่วนเท่า ๆ กันของเส้นขอบมันสร้างวงกลม


7
ที่จริงแล้วคำตอบนี้เวอร์ชันปัจจุบันใช้เวลานานไปหน่อย คำถามก็คือ "CSS นี้สร้างวงกลมได้อย่างไร" ไม่ใช่ "รัศมีของเส้นขอบทำงานโดยทั่วไปอย่างไร" ดังนั้นในขณะที่ในทางเทคนิคแล้วมันถูกต้องมากไปหน่อย นอกจากนี้คุณสามารถฟอร์แมตคำถามและใส่รหัสจริงลงในสภาพแวดล้อมของรหัส
ซีตา

3

เส้นขอบเป็นกล่องด้านนอกของเนื้อหาใด ๆ และถ้าคุณใช้รัศมีบนมันก็จะสร้างขอบวงกลม


3

ฉันคิดว่าตอนแรกมันสร้างสี่เหลี่ยมผืนผ้าด้วยheight and width = 180pxแล้วทำโค้งด้วยรัศมีที่กำหนดเช่นเดียว30pxกับแต่ละมุม ดังนั้นมันชุดกับที่กำหนดborderradius


1

ทั้งสอง.aและ.bจะให้ผลลัพธ์ที่เหมือนกัน

Q. ทำไมผมใช้width: 360px; height: 360px;?

A. border: 180px solid red;ในการทำงานเช่น.aborder-width: 180px 180px 180px 180px; /* Top Right Bottom Left */

หวังว่าซอนี้จะช่วยให้คุณเข้าใจแนวคิด

.a{
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}
.b{
    background:red;
    width: 360px;
    height: 360px;
    border-radius: 180px;
}

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