เป็นไปไม่ได้ด้วย Pure CSS ที่มีข้อจำกัด
ดูเหมือนว่าสิ่งที่คุณถามโดยส่วนใหญ่แล้วเป็นไปไม่ได้ในทางคณิตศาสตร์ (ยกเว้นข้อความที่มีความยาวเท่ากัน) โดยมีเพียง css เนื่องจากข้อจำกัดของคุณ
พิจารณาตัวอย่างเพียงสองแท็บและข้อกำหนดเฉพาะสี่รายการ (และขัดแย้งกัน) ต่อไปนี้ของคุณ (สมมติว่า 500px
คอนเทนเนอร์ที่มีความกว้างคงที่ มีการจัดลำดับข้อกำหนดใหม่เพื่อให้เห็นภาพ):
(1) แต่ละแท็บมีความกว้างที่ไม่รู้จัก (ขึ้นอยู่กับข้อความที่อยู่ภายใน)
สมมติว่า Tab2 มีข้อความยาวเป็นสองเท่าของ Tab1 ดังนั้นสำหรับภาพประกอบ Tab1 = 10px
, Tab2 = 20px
จากนั้น...
(2) แท็บทั้งหมดควรใช้ช่องว่างภายในเดียวกัน (ช่องว่างจากตัวอักษรส่วนใหญ่ด้านนอกถึงขอบด้านในของแท็บควรเหมือนกัน โดยแสดงด้วย ".." ด้านบน) ช่องว่างภายในนี้ไม่จำเป็นต้องได้รับการแก้ไข แต่ควรเหมือนกันในแท็บต่างๆ
และ...
(3) ไม่มีการคำนวณ ทั้งหมดควรใช้งานได้โดยไม่ต้องแก้ไข css หากมีการเพิ่มหรือลบแท็บอย่างน้อยหนึ่งแท็บ
อธิบายตนเองเพียงพอ แต่...
(4) แท็บไม่ควรขยายเกิน div นั้น แต่ ควรกรอกข้อมูล
นี่หมายถึงอย่างใดอย่างหนึ่งต่อไปนี้:
ก. แต่ละแท็บจะมีความกว้าง 50% และความกว้างของข้อความยังคงไม่เปลี่ยนแปลง ดังนั้น Tab1 = 120px 10px 120px
, Tab2 = 115px 20px 115px
ซึ่งไม่ตรงตาม (1) เนื่องจากขนาดโดยรวมของทั้งสองจะมีความกว้างเท่ากัน หรือ (2) เนื่องจากช่องว่างภายในจะมีความกว้างแตกต่างกันไปตามภาพประกอบ แต่อาจเป็นไปตาม (3) และ (4) นี่ไม่ใช่ ไม่ใช่ สิ่งที่คุณต้องการ
ข. แต่ละแท็บจะมีความกว้าง 50% แต่ความกว้างของข้อความจะต้อง ยืด สำหรับ Tab1 หรือ บีบอัด สำหรับ Tab2 เพื่อให้ความกว้างของข้อความเท่ากัน . ในทางเทคนิคแล้วสิ่งนี้ยังคงล้มเหลวในการตอบสนอง (1) แต่เป็นไปตาม (2) และ (4) เนื่องจากทั้งคู่ถูกตั้งค่าเป็น 120px 10px 120px
หรือ 115px 20px 115px
เนื่องจากข้อความบิดเบี้ยวในทางใดทางหนึ่งเพื่อให้ "พอดี" พื้นที่ สิ่งนี้จะเป็นไปได้โดยไม่ทำ (3) หรือไม่นั้นยังเป็นที่น่าสงสัย แต่อาจไม่เกี่ยวข้อง เนื่องจากฉันแน่ใจว่านี่คือ ไม่ สิ่งที่คุณต้องการ
ค. แต่ละแท็บจะถูกตั้งค่าตามที่คุณต้องการสำหรับ (1) และ (2) โดยมี (2) ในปริมาณคงที่ (เช่น 10px) ซึ่งจะเว้นช่องว่างระหว่างหรือรอบๆ แท็บ บางอย่างเช่น 10px 10px 10px
ช่องว่างของ 430px
จากนั้น 10px 20px 10px
สิ่งนี้อาจจะสามารถตอบสนอง (3) แต่ไม่เป็นไปตาม (4) เนื่องจากจะไม่ "เติม" พื้นที่ของคอนเทนเนอร์แบบตายตัวจริงๆ - จะมี "ช่องว่าง" อยู่ที่ไหนสักแห่ง นี่ไม่ใช่สิ่งที่คุณต้องการ
ง. สิ่งที่คุณระบุในท้ายที่สุดว่าคุณต้องการให้แต่ละแท็บมีระยะห่างจากขอบให้เท่ากัน ซึ่งสามารถทำได้ตาม (1) และ (2) แต่ไม่ใช่กับข้อจำกัดของคุณ (3) , เนื่องจากจำเป็นต้องมีการคำนวณ ในตัวอย่าง มันคือ (500px - 30px) / 4 = 117.5px
ซึ่งจะทำให้แท็บ 117.5px 10px 117.5px
และ 117.5px 20px 117.5px
แต่อย่างที่คุณเห็น เนื่องจากข้อความมีความกว้างที่ยืดหยุ่นได้ จึงต้องดำเนินการแบบไดนามิก โดยใช้สูตรโดยประมาณ:
(containerWidth - totalTextWidths) / (2 x numTabs) = padding
หากคุณต้องการช่องว่างเล็กๆ ระหว่างแท็บต่างๆ จะต้องเพิ่มลงในสูตร (ในที่นี้ถือว่ามีช่องว่าง 2px ดังนั้น gapWidths = ((numTabs - 1) x 2px)
):
(containerWidth - totalTextWidths - gapWidths) / (2 x numTabs) = padding
ดังนั้น ข้อจำกัดที่คุณให้ไว้ทำให้วิธีแก้ปัญหาเป็นไปไม่ได้ จะต้องอนุญาตให้มีการคำนวณ หรือคุณต้องคิดใหม่ว่าคุณต้องการให้แท็บแสดงอย่างไร
person
ScottS
schedule
11.11.2013