2009-10-12 19 views
9

quy tắc CSS cơ bản của tôi cho font-sizeline-height là khá đơn giản:Làm thế nào để đạt được đúng CSS line-height quán

body { 
    font-family: Arial, Helvetica, sans-serif; 
    font-size: 16px; 
    line-height: 24px; 
} 

Khi tôi tạo ra một đoạn văn có chứa một <em> hoặc một <strong> (hoặc thậm chí một số <code> trong đó sử dụng khác nhau font-size so với <body>), tôi nhận thấy rằng các yếu tố này làm tăng chiều cao dòng lên một hoặc hai pixel.

Điều này khiến tôi tin rằng hầu hết các trình duyệt đều lấy phần tử nội tuyến lớn nhất để hiển thị line-height. Có đúng không?

Mục tiêu của tôi là làm cho line-height nhất quán, bất kể yếu tố nào là nội tuyến.

Cách duy nhất tôi đã tìm thấy để làm cho line-height phù hợp là xác định:

em, strong, code, etc { 
    line-height: 100%; 
} 

Đây có phải là cách đúng đắn để đi về điều này? Hay tôi có quá nhiều người cầu toàn?

Sửa 1:

này cũng dường như làm việc:

em, strong, code, etc { 
    line-height: 1; 
} 

Chỉnh sửa 2:

Sau khi chơi với điều này trong một vài ngày, nó không xuất hiện mà có một giải pháp đáng tin cậy để giữ một số line-height nhất quán. Nếu bất cứ ai có bất kỳ ý tưởng nào, tôi chắc chắn sẽ thích nghe chúng.

Sửa 3:

Để tham khảo trong tương lai của riêng tôi và từ nghiên cứu của riêng tôi, các thẻ cần được xem xét với line-height: 1 miễn là chúng được hiển thị inline cùng với văn bản cơ thể tiêu chuẩn khác:

abbr, acronym, b, big, cite, code, del, dfn, em, i, ins, kbd, q, 
samp, small, strong, sub, sup, tt, var 

Những yếu tố này đáng ngờ:

a, bdo, img, span 

Trả lời

5

Các spec khẳng định những gì bạn nghĩ, mà các trình duyệt mất phông chữ lớn nhất để tính line-height. Điều đó có nghĩa là tùy chọn duy nhất của bạn (và tùy chọn đề cập cụ thể) là đặt chiều cao dòng cho TẤT CẢ các hộp nội tuyến trên các dòng mà bạn quan tâm.Có thể bạn sẽ không hài lòng với kết quả lựa chọn body * và đặt kích thước phông chữ. Vì vậy, thêm một số Divs với cùng lớp xung quanh bất cứ khối văn bản bạn muốn nhìn thống nhất, và có bạn đi:

div.uniformlines * { 
    line-height: 100%; 
    font-size: 16px; 
} 
+0

Thông tin tuyệt vời! Điều gì về 'p * {line-height: 0; } ', hoặc tốt hơn nhưng có lẽ 'p a, p code, p lớn {line-height: 0; } '? Bây giờ chúng ta đang đi đâu đó. ';)' – Jeff

+0

Theo dõi nhận xét cuối cùng của tôi. Hãy cẩn thận với mã của tôi ở trên. Ví dụ: nếu bạn có, '

foo

', chiều cao dòng sẽ tính bằng 0, có thể không phải là thứ bạn muốn. – Jeff

0

tôi nghĩ đó là một n khá ăn ý tưởng.

Tuy nhiên, đừng quên rằng nếu văn bản in đậm/in nghiêng quá lớn thì bạn có thể làm giảm khả năng đọc bằng cách làm cho tất cả các dòng thực sự cao khi chỉ cần một. Bạn cũng có thể muốn một cái gì đó để đối phó với superscript và subscript, nếu ví dụ của bạn đã không chăm sóc nó.

+0

Ooooo vâng, đang làm việc phụ và ủng hộ, nhưng sẵn sàng từ bỏ. Lol – Jeff

+0

Hmm, vừa quay lại điều này và tôi không nghĩ những gì tôi đăng là đúng. Đặt chiều cao dòng thành 100% không giữ cho nó phù hợp - dòng có văn bản lớn hơn lớn hơn, nhưng các dòng tiếp theo sẽ trở lại bình thường. Ví dụ của bạn về việc thiết lập chiều cao dòng là 0 giữ tất cả các dòng đến chiều cao ban đầu của chúng - trong trường hợp này bạn cần đảm bảo rằng văn bản lớn hơn không chồng lên các dòng khác. – DisgruntledGoat

0

Tôi không thấy hành vi này, nhưng tôi đang sử dụng WebKit. Vấn đề có xảy ra với bạn không nếu bạn ném một số thẻ đậm vào ví dụ này?

http://www.w3schools.com/css/tryit.asp?filename=trycss_line-height

+0

Đúng, chắc chắn là vậy (FF 3.0.x). Tôi đang làm việc về vấn đề này bây giờ và nó không có vẻ như có một giải pháp thân thiện. – Jeff

2

Có vẻ như tốt nhất và linh hoạt nhất để xác định body {line-height: 0} sau đó xác định các line-height cho các khu vực nội dung chính với line-height: 1 hoặc 1.5 hoặc bất kỳ thứ gì. Điều đó cho phép bạn kiểm soát các yếu tố khác tự động hơn và nhất quán.

Ví dụ: chiều cao dòng có thể thực sự có vấn đề với hình ảnh hoặc các lưới khác muốn được căn chỉnh với nhau, như kiểu thư viện. Điều này thường xảy ra nhất khi hình ảnh có thẻ neo, kế thừa dòng chiều cao của cha mẹ. Thông số cho phép giá trị "bình thường", nhưng điều đó có vẻ là một tiêu chuẩn khác nhau cho mỗi trình duyệt. 1 hoặc 100% cũng là tùy chọn, nhưng "0" dường như về cơ bản làm cho tất cả các trình duyệt buộc phải có cùng một tiêu chuẩn, giống như một thiết lập lại CSS tốt. Tất nhiên tất cả các văn bản được xếp thành một dòng với "0", đó là lý do tại sao thiết lập chiều cao dòng tại các khu vực nội dung là cần thiết.

Here's a codepen I put together to illustrate the point

0

chủ đề này đã được tuổi và những thứ có thể thay đổi trong khi chờ đợi, nhưng sau (mà tôi phát hiện lại trên http://webdesignandsuch.com/how-to-fix-sup-sub-line-height-problem-with-css/) làm việc cho tôi:

* { 
    vertical-align: bottom; } 

Nó khá ngạc nhiên vì vertical-align như vậy có vẻ không liên quan đến line-height; sau đó một lần nữa, đây là CSS để bạn không bao giờ biết. Trang web được trích dẫn ở trên thực tế cho thấy

sub { 
    height: 0; 
    line-height: 1; 
    vertical-align: baseline; 
    _vertical-align: bottom; 
    position: relative; } 

trông giống như một hack với tôi.

Các vấn đề liên quan