ค่าของหน่วย css 'ex' คืออะไร?


87

(เพื่อไม่ให้สับสนกับXunitซึ่งเป็นไลบรารีการทดสอบหน่วย. Net ยอดนิยม)

วันนี้ด้วยความเบื่อหน่ายฉันเริ่มตรวจสอบ Gmails DOM (ใช่ฉันเบื่อมาก)

ทุกอย่างดูตรงไปตรงมาจนกระทั่งฉันสังเกตเห็นข้อกำหนดที่น่าสนใจเกี่ยวกับความกว้างขององค์ประกอบบางอย่าง Googlites ที่มีชื่อเสียงได้ระบุจำนวนตาราง Cols โดยใช้หน่วย 'ex' ที่หายาก

width: 22ex;

ตอนแรกฉันนิ่งงัน ("อะไรคือ 'แฟนเก่า'? จากข้อมูลจำเพาะ CSS3 :

[ หน่วยอดีตคือ] เท่ากับที่ใช้ x ความสูงของตัวอักษรที่มีอยู่ครั้งแรก x-height ถูกเรียกเช่นนี้เพราะมักจะเท่ากับความสูงของตัวพิมพ์เล็ก "x" อย่างไรก็ตามมีการกำหนด "ex" ไว้สำหรับแบบอักษรที่ไม่มี "x"

ดีและดี แต่ฉันไม่เคยเห็นมันใช้มาก่อน (ใช้น้อยกว่ามาก) ฉันใช้ ems ค่อนข้างบ่อยและเห็นคุณค่าของมัน แต่ทำไม "อดีต"? ดูเหมือนมาตรฐานการวัดน้อยกว่า em มากและมีประโยชน์น้อยกว่ามาก

หนึ่งในไม่กี่หน้าผมพบว่าการอภิปรายหัวข้อนี้เป็นสตีเฟ่น Poley ของhttp://www.xs4all.nl/~sbpoley/webmatters/emex.html Stephen ให้ประเด็นที่ดีอย่างไรก็ตามการสนทนาของเขาดูเหมือนจะสรุปไม่ได้สำหรับฉัน

คำถามของฉันคือ: หน่วย 'ex' ให้คุณค่าอะไรกับการออกแบบเว็บ?

(คำถามนี้สามารถติดแท็กอัตนัยได้ แต่ฉันจะทิ้งการตัดสินใจนั้นให้ SO'ers ที่มีประสบการณ์มากกว่าตัวฉันเอง)

คำตอบ:


126

จะมีประโยชน์เมื่อคุณต้องการปรับขนาดบางอย่างให้สัมพันธ์กับความสูงของตัวอักษรพิมพ์เล็กในข้อความของคุณ ตัวอย่างเช่นลองจินตนาการถึงการออกแบบในลักษณะนี้:

ข้อความแสดงแทน


ในมิติการออกแบบการพิมพ์ความสูงของตัวอักษรมีความสัมพันธ์เชิงพื้นที่ที่สำคัญกับส่วนที่เหลือขององค์ประกอบ เส้นในภาพต้นฉบับด้านบนมีจุดมุ่งหมายเพื่อช่วยชี้ให้เห็นถึงความสูง x ของข้อความ แต่ยังแสดงว่าแนวทางจะเป็นอย่างไรหากออกแบบรอบข้อความนั้น

ดังที่โจนาธานชี้ให้เห็นในความคิดเห็น ex เป็นเพียงเวอร์ชันความสูงของ em (ความกว้าง)


31
เพียงแค่เพิ่มความสูงเทียบเท่ากับการใช้หน่วย 'em' สำหรับความกว้าง
Jonathan Fingland

3
@ Joel อัตราส่วนระหว่างความกว้างของ m และความสูง x สำหรับแบบอักษรที่กำหนดคืออะไร? แม้ว่าจะได้รับการแก้ไข แต่ก็อาจคำนวณได้ยากมากเนื่องจากแบบอักษรทุกตัวมีอัตราส่วนระหว่าง m และ x ที่แตกต่างกันโดยพลการ ดังนั้นเมื่อออกแบบองค์ประกอบที่ควรสัมพันธ์กับประเภทแทนที่จะต้องกำหนดอัตราส่วนด้วยตัวเองคุณสามารถใช้ x-height เพื่อให้สิ่งต่างๆเป็นสัดส่วนได้
Rex M

2
อีกจุดที่ค่อนข้างลึกลับคือตามที่ Mozilla Gecko สามารถปรับขนาดรายการโดยใช้ exes ได้แม่นยำกว่าที่ใช้ ems ขนาด "ไม่ใช่สไตล์" เริ่มต้นของ em คือ 10.06667px ในขณะที่ขนาดของอดีตคือ 6px ซึ่งหมายความว่าเมื่อปรับขนาด ems Firefox จะต้องปัดเศษพิกเซลบางส่วนบ่อยกว่าการปรับขนาด exes
benrifkah

1
แม้ว่าจะไม่ถูกต้องโดยทั่วไป แต่ก็สามารถจินตนาการได้ว่า 2ex มีขนาดใกล้เคียงกับ 1em (แม้ว่าโดยทั่วไปความสูงของตัวพิมพ์ใหญ่จะค่อนข้างน้อยกว่า 1em) ข้อมูลจำเพาะ CSS ยังระบุ "ในกรณีที่เป็นไปไม่ได้หรือไม่สามารถกำหนดค่า x-height ได้ต้องถือว่าค่า 0.5em"
natevw

20
@JonathanFingland @RexM ซึ่งแตกต่างจากในการพิมพ์ตัวอักษรใน CSS emหน่วยไม่ได้วัดความกว้างแต่จะวัดความสูงของแบบอักษร 1 emคือการคำนวณfont-sizeค่าและระบุ“ความสูงที่ต้องการของร่ายมนตร์”font-size ทั้งสองอย่างemและexวัดความสูง ( chอย่างไรก็ตามวัดความกว้าง)
Rory O'Kane

20

ในการตอบคำถามให้ใช้ตัวยกและตัวห้อย ตัวอย่าง:

sup {
    font-size: 75%;
    height: 0;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
    bottom: 1ex;
}

1
ฉันไม่คิดว่านั่นจะช่วยอธิบายได้จริงๆว่า "แฟนเก่า" คืออะไร
duskwuff -inactive-

12
คำถามคือ "หน่วย" อดีต "ให้ยืมไปใช้กับการออกแบบเว็บได้อย่างไร" ไม่ใช่ "ยูนิตเก่าคืออะไร" โจเอลทำงานได้ดีมากในการกำหนดหน่วยอดีตในคำถามเดิม ฉันกำลังให้ตัวอย่างที่ใช้ได้จริงว่าคุณจะใช้มันเพื่อวางตำแหน่งตัวยกได้อย่างไร
jbs

1
ตัวอย่างการปฏิบัติที่ดีที่ตอบคำถามโดยตรง ทำได้ดี.
Basil Bourque

2

สิ่งที่ควรพิจารณาอีกประการหนึ่งคือการปรับขนาดหน้าเว็บของคุณเมื่อผู้ใช้อัพหรือดาวน์ขนาดตัวอักษร (อาจใช้ ctrl + mouse wheel (windows))

ฉันใช้ em กับ .. padding-left: 2 em; padding-right: 2 em;

และ ex พร้อม padding-bottom: 2 ex; padding-top: 2 เช่น;

ดังนั้นจึงใช้หน่วยวัดแนวตั้งสำหรับคุณสมบัติมาตราส่วนในแนวตั้งและหน่วยวัดแนวนอนสำหรับคุณสมบัติมาตราส่วนแนวนอน


5
ทั้ง em และ ex เป็นหน่วยแนวตั้งเนื่องจากถูกกำหนดให้เป็นความสูงของตัวพิมพ์ใหญ่ "M" และตัวพิมพ์เล็ก "x" ตามลำดับ สามารถใช้ได้ทั้งความยาวแนวตั้งและแนวนอน
JacquesB

ในการเพิ่มสิ่งนี้chคือหน่วยแนวนอนที่วัดความกว้างของตัวเลขศูนย์ ("0")
Matt F.

1

ค่าของการมีอยู่ในข้อมูลจำเพาะของ CSSหากเป็นสิ่งที่คุณต้องการจริงๆจะเหมือนกับค่าของการมีหน่วย em

ช่วยให้คุณสามารถตั้งค่าแบบอักษรเป็นขนาดที่สัมพันธ์กันได้

คุณไม่รู้ว่าขนาดตัวอักษรพื้นฐานของฉันคืออะไร ดังนั้นกลยุทธ์ที่ดีอย่างหนึ่งสำหรับการออกแบบเว็บคือการกำหนดขนาดตัวอักษรที่สัมพันธ์กันแทนที่จะเป็นแบบสัมบูรณ์ เทียบเท่ากับ "สองเท่าของขนาดปกติ" หรือ "เล็กกว่าขนาดปกติเล็กน้อย" แทนที่จะเป็นขนาดคงที่เช่น "สิบพิกเซล"


ฉันเห็นด้วยกับเรื่องนี้ แต่ข้อมูลจำเพาะไม่เพียงพอสำหรับสิ่งนี้และเชื่อถือได้มากกว่านี้หรือไม่?
Joel

@JoelPotter ใช่ แต่เท่านั้นสำหรับความกว้าง; สำหรับความสูงexดูเหมือนว่าจะเทียบเท่ากัน
ANeves คิดว่า SE เป็นคนชั่ว

5
@ANeves ไม่ถูกต้อง ใน CSS em เป็นความสูงของตัวอักษร (โดยประมาณ) ไม่กว้าง Mในการพิมพ์การพิมพ์ความคิดของเอ็มมาจากความกว้างของตัวพิมพ์ใหญ่ แต่ CSS emกลั่น ดูวิกิพีเดีย
Basil Bourque

2
หากคุณต้องการความกว้างให้ใช้chหน่วยตามที่ระบุไว้ในคำตอบอื่น
Basil Bourque

1

ทราบว่าคำเช่น "เดี่ยว / คู่สายระยะห่าง" จริงหมายถึงชดเชยระหว่างสองสายที่อยู่ติดกันโดยวัดจากอีเอ็ม ดังนั้น "สองบรรทัดระยะห่าง" หมายความว่าแต่ละบรรทัดมีความสูง 2 em

ดังนั้นหากคุณต้องการระบุระยะทางแนวตั้งที่เป็นสัดส่วนกับ "เส้น" ให้ใช้ em ใช้เฉพาะในกรณีที่คุณต้องการความสูงจริงของตัวอักษรพิมพ์เล็กซึ่งผมกล้าพูดได้ว่าเป็นตัวอย่างที่หายากกว่ามาก

อัปเดต: มาตรฐานเว็บอนุญาตให้เบราว์เซอร์ใช้ 0.5em เป็น ex หรือมาจากฟอนต์

อย่างไรก็ตามไม่มีวิธีใดที่จะฝังข้อมูล "x-height" ในฟอนต์ได้อย่างน่าเชื่อถือ (OpenType หรือ webfont)

ดังนั้นความเป็นไปได้ในอดีตทำให้อดีตหน่วยงานซ้ำซ้อนและหลังขาดวิธีการที่เชื่อถือได้ที่จะเกิดขึ้น และความจริงที่ว่าอย่างใดอย่างหนึ่งเป็นไปได้ทำให้ความน่าเชื่อถือน้อยลง

ดังนั้นฉันจึงโต้แย้งเรื่องการขาดมูลค่าของหน่วยอดีต


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