Mã html chiều cao dòng

số. a value value (as 1, 1. 2, 2, 3. )

Chiều cao của dòng được xác định bằng số nhân với giá trị cỡ chữ

.my-height {
    font-size: 14px;    /* cỡ chữ 14px */
    line-height: 1.2;   /* chiều cao dòng = 1.2 * 14 = 16.8px */
}

Giá trịMô tảDemonormalChiều cao dòng bình thường. Đây là mặc địnhDemo ❯sốMột số sẽ được nhân với cỡ chữ hiện tại để đặt chiều cao dòngDemo ❯chiều dàiMột chiều cao dòng cố định theo px, pt, cm, v.v. Bản trình diễn ❯%Chiều cao dòng theo phần trăm của kích thước phông chữ hiện tại Bản trình diễn ❯initialĐặt thuộc tính này thành giá trị mặc định của nó. Đọc về khởi tạo Kế thừa thuộc tính này từ phần tử cha của nó. Đọc về thừa kế

Bài viết được dịch từ bài Deep Dive CSS. chỉ số phông chữ, chiều cao dòng và căn dọc của tác giả Vincent De Oliveira


p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
6 và
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
7 là các thuộc tính CSS đơn giản. Đơn giản đến nỗi hầu hết chúng ta ta đều bị thuyết phục rằng mình đã hoàn toàn hiểu cách chúng ta hoạt động và cách chúng ta sử dụng. Nhưng không phải như vậy. Thực tế chúng phức tạp, có thể là phức tạp nhất, do chúng đóng vai trò chính trong việc tạo thành một trong những tính năng ít được biết đến của CSS. bối cảnh định dạng nội tuyến

Ví dụ,

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 có thể nhận giá trị là một độ dài hoặc một giá trị không đơn vị, với giá trị mặc định là
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
9. Được rồi, vậy bình thường nghĩa là như thế nào? . Chúng ta biết rằng giá trị không đơn vị của
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 có tính tương phản với
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
3, nhưng vấn đề là
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
4 khác nhau đối với các họ phông chữ khác nhau, vậy thì
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 luôn luôn giống nhau hay khác nhau? . 2?

Tìm hiểu sâu về một cơ chế không-đơn-giản của CSS

Please say about
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
3 before

Vui lòng xem đoạn mã HTML đơn giản bên dưới, thẻ

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
9 chứa 3 thẻ
<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
0, mỗi thẻ sử dụng một thẻ
<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
1 khác nhau

<p>
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
p>
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }

Sử dụng cùng một

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
3 với các họ phông chữ khác nhau sẽ tạo ra các phần tử có chiều cao khác nhau

Mã html chiều cao dòng

Các họ phông chữ khác nhau, cùng cỡ chữ, sinh ra các chiều cao khác nhau

Tuy chúng ta đoán trước được việc đó, nhưng tại sao

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
4 không sinh ra các phần tử với chiều cao 100px? . Helvetica. Nhóm 115px. 97px và Catamaran. 164px

Mã html chiều cao dòng

Element section with font-size. 100px has height change from 97px to 164px

Dù có vẻ hơi kỳ lạ, nhưng điều này hoàn toàn nằm trong dự đoán. Lý do nằm ở bản thân các phông chữ. Dưới đây là cách các chữ cái hoạt động

  • Một phông chữ định nghĩa em-square (hoặc UPM, đơn vị mỗi em) của nó, một dạng ô chứa các ký tự được vẽ ra. Ô vuông này sử dụng các đơn vị tương thích và thông thường có giá trị 1000 đơn vị. Nhưng nó cũng có thể là 1024, 2048 hoặc các giá trị khác

  • Dựa trên đơn vị tương đối của nó, số chỉ của chữ chữ (số liệu phông chữ) sẽ được xác định (tăng dần, giảm dần, chiều cao chữ hoa, chiều cao x, v. v. ). Chú ý là một số giá trị có thể tràn ra bên ngoài em-square

  • Trên trình duyệt, các đơn vị tương ứng có thể được co giãn để phù hợp với cỡ chữ mong muốn

Vui lòng mở phông chữ Catamaran bằng FontForge để xem các số

  • em-square là 1000
  • tăng dần là 1100 và giảm dần là 540. Sau khi kiểm tra thử, xuất hiện trình duyệt sử dụng các giá trị HHead Ascent/Descent trên MacOS và Win Ascent/Descent trên Windows (các giá trị này có thể khác nhau. ). Chúng ta cũng lưu ý rằng Capital Height là 680 và X height là 485

Mã html chiều cao dòng

The only number of font when view on FontForge

Điều đó có nghĩa là phông chữ Catamaran sử dụng 1100 + 540 đơn vị trên 1000 đơn vị em-square, kết quả là 164px khi thiết lập giá trị

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
4. Chiều cao được tính toán (computed height) này định nghĩa vùng nội dung của một phần tử và tôi sẽ đề cập đến khái niệm này trong suốt phần còn lại của bài viết. Bạn có thể coi content-area là vùng thuộc tính
<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
5 được áp dụng (điều này cũng không hoàn toàn chính xác)

Chúng ta có thể dự đoán rằng độ cao của chữ cái trong hoa là 68px (680 đơn vị) và chữ cái trong thường (x-height) là 49px (485 đơn vị). Kết quả là

<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
6 = 49px và
<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
7 = 100px, không phải 164px (may mắn thay,
<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
8 là giá trị dựa trên
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
3, không phải là chiều cao được tính toán)

Mã html chiều cao dòng

Phông chữ Catamaran. UPM - Units Per Em - và lượng pixel tương ứng khi sử dụng font-size. 100px

Trước khi tìm hiểu kỹ hơn, hay xem những thứ trên có ý nghĩa gì. Khi một phần tử

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
9 được hiển thị trên màn hình, nó có thể được tạo bởi nhiều dòng, dựa trên độ rộng của nó. Mỗi dòng được tạo bởi một hoặc nhiều phần tử nội tuyến (thẻ HTML hoặc các phần tử nội tuyến vô danh như văn bản) và mỗi dòng này được gọi là một hộp dòng. Chiều cao của một hộp dòng dựa trên chiều cao của các phần tử con của nó. Do đó, trình duyệt sẽ tính toán chiều cao của mỗi phần tử nội tuyến, từ đó tính toán chiều cao của hộp dòng (từ điểm cao nhất đến điểm thấp nhất của các phần tử con). Kết quả là một line-box luôn đủ cao để có thể chứa tất cả các phần tử của nó (mặc định là như vậy)

Mỗi phần tử HTML thực sự là một back-box của các dòng. Nếu bạn biết chiều cao của mỗi hộp dòng, bạn sẽ biết chiều cao của phần tử đó

Nếu chúng ta chỉnh sửa mã HTML ở trên thành thế này

<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>

nó sẽ sinh ra 3 line-box

  • hộp đầu tiên và hộp cuối cùng chứa một phần tử vô danh nội tuyến (văn bản)
  • line-box thứ 2 chứa 2 phần tử inline vô danh và 3 thẻ
    <p>
        Good design will be better.
        <span class="a">Baspan>
        <span class="b">Baspan>
        <span class="c">Baspan>
        We get to make a consequence.
    p>
    
    0

Mã html chiều cao dòng

Một thẻ

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
9 (đường viền đen) được tạo thành từ các hộp dòng (đường viền trắng) bao gồm các phần tử nội tuyến (đường viền trơn) và các phần tử nội tuyến vô danh (đường viền trang nhã)

Chúng ta biết rằng line-box thứ 2 cao hơn các line-box khác, làm nội dung của các phần tử con của nó, và chính xác hơn là phần tử sử dụng phông chữ Catamaran

Phần khó khăn trong việc tạo thành line-box là chúng ta không thực sự nhìn thấy hay kiểm soát được nó bằng CSS. Ngay cả việc áp dụng thuộc tính nền vào

<p>
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
p>
3 cũng không cho chúng ta một dấu hiệu trực tiếp quan trọng về chiều cao của line-box đầu tiên

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8. các vấn đề và hơn thế nữa

Tới giờ, tôi đã giới thiệu cho các bạn 2 khái niệm. khu vực nội dung và hộp dòng. Nếu bạn nhớ, tôi đã nói rằng chiều cao của một line-box được tính toán dựa trên chiều cao của các phần tử con của nó chứ không nói rằng nó được tính toán dựa trên chiều cao của khu vực nội dung của các phần tử con . Điều này tạo ra một sự khác biệt lớn

Nghe có vẻ lạ, nhưng một phần tử nội tuyến có 2 chiều cao khác nhau. high content-area và high virtual-area (tôi đã tạo ra khái niệm virtual-area để đại diện cho chiều cao mà chúng ta nhìn thấy được, bạn sẽ không thấy trong đặc tả đâu)

  • khu vực nội dung cao được xác định bởi số lượng phông chữ duy nhất (như đã nói ở trên)
  • the high-virtual-area is
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    8, and it is the high height used totính toán chiều cao của line-box

Mã html chiều cao dòng

Inline section inline có 2 chiều khác nhau

Như vậy, điều này đã phá vỡ quan niệm thông thường rằng

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 là khoảng cách giữa các đường cơ sở. Trong CSS thì không như vậy

Mã html chiều cao dòng

Trong CSS, line-height không phải là khoảng cách giữa các đường cơ sở

Chiều cao khác nhau giữa khu vực ảo và khu vực nội dung được gọi là dẫn đầu. Một nửa dẫn đầu được cộng thêm vào phía trên của khu vực nội dung, nửa còn lại được cộng thêm vào phía dưới. Do khu vực nội dung đó luôn ở giữa khu vực ảo

dựa trên các giá trị được tính toán,

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 (khu vực ảo) có thể bằng, cao hơn hoặc thấp hơn khu vực nội dung. Trong trường hợp khu vực ảo thấp hơn, hàng đầu sẽ âm thanh và một hộp dòng trông sẽ thấp hơn các phần tử của nó

Còn có các loại phần tử nội tuyến khác

  • các phần tử nội tuyến thay thế (
    <p>
        <span class="a">Baspan>
        <span class="b">Baspan>
        <span class="c">Baspan>
    p>
    
    8,
    <p>
        <span class="a">Baspan>
        <span class="b">Baspan>
        <span class="c">Baspan>
    p>
    
    9,
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    0, v. v. )
  • p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    1 và tất cả các phần tử
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    2
  • Các phần tử nội tuyến xuất hiện trong một định dạng cảnh báo riêng biệt (ví dụ như trong một phần tử flexbox, tất cả các mục linh hoạt đều được khối hóa)

Với các phần tử nội tuyến riêng biệt này, chiều cao được tính dựa trên các thuộc tính

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
3,
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
4 và
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
5 của chúng. If
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
3 is
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
7, thì
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 used and content-area will equal with
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8

Mã html chiều cao dòng

Các phần tử nội tuyến thay thế, inline-block/inline-* và blocksified có vùng nội dung bằng với chiều cao, hoặc chiều cao dòng, của chúng

Tuy nhiên, vấn đề của chúng tôi là giá trị của

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
9 của
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 là bao nhiêu?

Do đó, hãy quay lại với FontForge. em-square của Catamaran là 1000, nhưng chúng ta thấy nhiều giá trị tăng/giảm khác nhau

  • Ascent/Descent information. tăng dần là 770 và giảm dần là 230. Được sử dụng để vẽ ký tự (bảng "OS/2")
  • The only number Ascent/Descent. tăng dần là 1100 và giảm dần là 540. Có thể sử dụng để tính chiều cao vùng nội dung (bảng "hhea" và bảng "OS/2")
  • only number Khoảng cách dòng. Được sử dụng cho
    <p>
        Good design will be better.
        <span class="a">Baspan>
        <span class="b">Baspan>
        <span class="c">Baspan>
        We get to make a consequence.
    p>
    
    2, bằng cách cộng thêm giá trị này vào các số Ascent/Descent duy nhất (bảng "hhea")

Trong trường hợp của chúng tôi, phông chữ Catamaran định nghĩa khoảng cách dòng với giá trị là 0, nên

<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
2 sẽ bằng với khu vực nội dung, tức là 1640 đơn vị, hay 1. 64

Để so sánh, phông chữ Arial định nghĩa em-square với giá trị 2048 đơn vị, Ascender = 1854, Descender = 434 và line gap = 67. Nghĩa là với

p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
4 thì content-area sẽ là 112px (1117 đơn vị) (Người dịch. (1854 + 434) * 1000 / 2048 = 1117,1875) và
<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
2 là 115px (1150 đơn vị hay 1. 15). Tất cả các số này đều là của phông chữ riêng và được thiết lập bởi người thiết kế phông chữ

Làm vậy, hiển nhiên việc đặt

<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
6 là một cách làm xấu. Tôi xin nhắc lại rằng các giá trị không đơn vị có tính tương phản với
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
3, không tương thích với khu vực nội dung và trường hợp khu vực ảo thấp hơn khu vực nội dung là nguồn gốc của rất nhiều vấn đề

Mã html chiều cao dòng

Use line-height. 1 could create a line-box thấp hơn content-area

Nhưng không chỉ có mỗi

<p>
    Good design will be better.
    <span class="a">Baspan>
    <span class="b">Baspan>
    <span class="c">Baspan>
    We get to make a consequence.
p>
6. Trong số 1117 phông chữ được cài đặt trên máy của tôi (phải, tôi cài đặt tất cả các phông chữ của Google Web Fonts), 1059 phông chữ, khoảng 95%, có
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 lớn hơn 1.
p  { font-size: 100px }
.a { font-family: Helvetica }
.b { font-family: Gruppo    }
.c { font-family: Catamaran }
8 of all fonts that dao động từ 0. 618 tới 3. 378. You just read true rồi đấy, 3. 378

Một chút chi tiết nữa về công việc line-box tính toán

  • with inline inline section,

    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    61 và
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    5 làm tăng vùng nền, nhưng không làm tăng chiều cao của vùng nội dung (cũng như chiều cao của hộp dòng). Khu vực nội dung đó không phải lúc nào cũng là thứ bạn nhìn thấy trên màn hình.
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    63 và
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    64 không có tác dụng

  • Với các phần tử nội tuyến thay thế,

    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    1 và được chặn.
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    61,
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    4 và
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    5 tăng tốc
    p  { font-size: 100px }
    .a { font-family: Helvetica }
    .b { font-family: Gruppo    }
    .c { font-family: Catamaran }
    
    3 nên tăng chiều cao cho khu vực nội dung và hộp thư