Sorun
Tarayıcılar, satır yüksekliğini ve üstte ve altta çıkıntılar gibi yazı tipine özgü metrikleri hesaba katmak için metin karakterlerinin üstüne ve altına otomatik olarak fazladan boşluk ekler. Bu "hayalet boşluk", standart CSS kullanarak piksel düzeyinde mükemmel dikey hizalama elde etmeyi imkansız hale getirir.
Yaygın sorunlar şunlardır:
- Hizalanmamış Simgeler:
align-items: centerkullanıldığında bile metin, bitişik bir simgeden görsel olarak daha alçak veya daha yüksek görünür. - Hatalı Dolgu:
padding: 12pxiçeren bir düğmenin üst veya alt kısmında, yazı tipinin iç satır aralığı nedeniyle görsel olarak daha fazla boşluk var gibi görünüyor. - Hizalama: "Sihirli sayı" negatif kenar boşlukları kullanmadan büyük harfin üst kısmını bir kapsayıcının veya bitişik resmin üst kısmıyla tam olarak hizalayamazsınız.
Çözüm
text-box-trim ve text-box-edge özellikleri (kısaltma: text-box), bu dahili satır aralığını belirli yazı tipi metriklerine göre kırpmanıza olanak tanır. Metin kutusunu büyük harf yüksekliğine (büyük harflerin üst kısmı) ve alfabetik taban çizgisine (çoğu harfin alt kısmı) kırparak öğenin sınırlayıcı kutusunun görsel içeriğiyle eşleşmesini sağlayabilirsiniz.
Uygulama Stratejisi
- ZORUNLU: Metni içeren öğeye
text-box-trim: trim-both(veyatext-boxkısaltmasını) uygulayın. - ZORUNLU:
text-box-edgeile kırpma için hangi metriklerin kullanılacağını belirtin. Kullanıcı arayüzü hizalaması için genelliklecap alphabetickullanılır. - DO Flex veya grid kapsayıcılarında görsel olarak dikey ortalama için bu özelliği kullanın.
- CSS
paddingdeğerlerinizin, metin ile kapsayıcı kenarı arasındaki görsel boşlukla eşleştiğinden emin olmak için KULLANIN. - Okunabilirlik için geleneksel satır aralığının gerekli olduğu uzun gövde metinlerinde KULLANMAYIN. Başlıklar, düğmeler ve kullanıcı arayüzü etiketleri için en uygun seçenektir.
Uygulama Kılavuzu
1. kullanım alanı: Rozetler için iç satır aralığını kırpma
Farklı yazı tiplerinde, metnin üstünde ve altında farklı miktarlarda yerleşik boşluk bulunur. Bu durum, bir tasarımı eşleştirirken veya metni rozette görsel olarak ortalarken zorluklara neden olabilir. Bir kapsayıcının dolgusunun metni tam olarak sarmasını istediğinizde text-box: trim-both cap alphabetic kullanın. Bu, özellikle rozetler veya etiketler gibi yoğun kullanıcı arayüzü bileşenleri için kullanışlıdır. Bu sayede dolgu, her tarafta metin kenarından başlar.
.badge {
padding: 10px;
background: hotpink;
border-radius: 10px;
/*
Trims the top to the cap-height and
the bottom to the alphabetic baseline.
*/
text-box: trim-both cap alphabetic;
}
2. kullanım alanı: Simgelerle metni ortalama
Metin ve simgeleri hizalamak için Flexbox kullanıldığında "hayalet boşluk" genellikle metnin biraz merkez dışı görünmesine neden olur. Kutunun kırpılması, düzen motorunun hizalama için gerçek görünür harf yüksekliğini kullanmasını sağlar.
.button {
display: inline-flex;
align-items: center;
gap: 8px;
}
/*
text-box does NOT inherit, and must be applied directly to the text element.
*/
.button-text{
/*
The flex container now centers against the
visible letters, not the invisible font box.
*/
text-box: trim-both cap alphabetic;
}
3. kullanım alanı: Metni üst kenarlarla hizalama
Bir başlığı bitişik bir resmin veya dekoratif öğenin üst kısmıyla mükemmel şekilde hizalamak için trim-start cap alphabetic kullanın. Bitiş kırpılmayacak olsa bile bitiş kenarı tanımlanmalıdır.
.hero {
display: flex;
align-items: flex-start;
}
h1 {
/* MANDATORY: The bottom edge must also be defined, even though only the top is trimmed. */
text-box: trim-start cap alphabetic;
}
En İyi Uygulamalar
- DO use the
text-boxshorthand for conciseness:text-box: <trim-direction> <edges>. - Yalnızca bir kenar kırpılıyor olsa bile her zaman her iki kenarı da belirtin (varsayılan
textkenarı kullanılmıyorsa). - Kontrollü boşluk için
line-heightile BİRLEŞTİRİN. Kırpma işlemi, metnin ilk ve son satırından önceki satır aralığını kaldırır ancakline-height, çok satırlı metindeki satırlar arasındaki mesafeyi etkilemeye devam eder. - Her öğeye UYGULAMAYIN. Yalnızca hassas hizalama gerektiğinde kullanın.
Yedek stratejiler
text-box, progresif bir geliştirmedir. Bu özelliği desteklemeyen tarayıcılarda metin, varsayılan satır aralığıyla oluşturulur. Düzeniniz çalışmaya devam eder ancak biraz daha az hassas olur. Özellikler eski tarayıcılar tarafından güvenli bir şekilde yoksayıldığından özel bir yedek kod gerekmez.
Dikkat edilmesi gereken diğer noktalar
- Yazı tipi metrikleri: Farklı yazı tiplerinin farklı dahili metrikleri vardır.
cap alphabeticgüvenilir bir varsayılan değerdir ancak bazı yazı tipleri veya kullanım alanları, küçük harflerin daha iyi hizalanması içinex(x yüksekliği) gerektirebilir. - Çok satırlı metin: Kırpma, bloğun ilk ve son satırına uygulanır. Dahili hatlar etkilenmez.