Helpex - Trao đổi & giúp đỡ Đăng nhập
43

Vì vậy, câu hỏi này nói rằng font-sizexác định chiều cao của một hộp để tất cả các chữ cái (với dấu thăng và giảm dần) có thể phù hợp.

Nhưng tại sao có một spanvới 40px font-sizeline-heightmột kích thước thực tế là 45px? Nếu tôi hiểu đúng câu hỏi được liên kết thì "X" phải nhỏ hơn 40px nhưng chiều cao tổng thể phải chính xác là 40px. Tôi nghĩ rằng có thể nó đang tạo ra một số phòng thừa phía trên / bên dưới các bậc lên / xuống nhưng hình ảnh cho thấy các bộ tăng / bậc xuống chiếm hết không gian nên không thể có nhiều chỗ hơn:

font-size so với line-height so với chiều cao thực tế

Khi tôi quấn một div(màu xanh lá cây) xung quanh thì cái spanđó divcó chiều cao là 40px. Tại sao việc divsử dụng con font-sizecủa nó cho chiều cao của nó nhưng bản thân đứa trẻ thì không ?:

font-size so với line-height so với chiều cao thực tế

Bây giờ khi tôi đặt span's line-heightthành 15px (nhỏ hơn font-size) thì divchiều cao của' sẽ thay đổi thành 26px. Giá trị này được tính như thế nào? Điều này có liên quan gì đến đường cơ sở không ?:

font-size so với line-height so với chiều cao thực tế

Khi tôi đặt span's line-heightthành 65px (nhiều hơn so với font-size) thì divchiều cao của' là chiều cao của line-height. Tôi đã mong đợi divchiều cao của nó giống như (65px - 45px) + 45px.:

font-size so với line-height so với chiều cao thực tế

Vì vậy, làm thế nào để làm font-sizeline-heightảnh hưởng đến chiều cao thực tế của các phần tử? Tôi đã đọc một số câu hỏi liên quan đến thông số kỹ thuật nhưng tôi không thể làm được nhiều điều đó. Có quy tắc nào dễ hiểu không?

Fiddler

43 hữu ích 1 bình luận 32k xem chia sẻ
41

Trước tiên, tôi khuyên bạn nên đọc câu trả lời của mình trong phần tử Nội tuyến và chiều cao dòng . Tóm lại, có nhiều độ cao khác nhau liên quan đến các hộp nội tuyến:

  • Chiều cao của hộp nội tuyến, được cung cấp bởi line-height
  • Chiều cao của hộp dòng, trong trường hợp đơn giản cũng được đưa ra line-height, nhưng không phải ở đây.
  • Chiều cao của vùng nội dung của hộp nội tuyến, phụ thuộc vào việc triển khai. Đây là khu vực được sơn bởi nền màu đỏ.

Chiều cao khác trong trường hợp của bạn là chiều cao của div cha. Điều này được xác định bởi §10.6.3 . Trong trường hợp này, vì hộp thiết lập ngữ cảnh định dạng nội tuyến với một dòng,

Chiều cao của phần tử là khoảng cách từ cạnh nội dung trên cùng của nó đến [...] cạnh dưới cùng của hộp dòng cuối cùng

Vì vậy, chiều cao của khối cha được cho bởi chiều cao của hộp dòng.

Điều xảy ra ở đây là chiều cao của hộp dòng không phải là chiều cao của hộp line-heightnội tuyến của bạn. Và đó là bởi vì line-heightkhối mẹ cũng được tính đến :

Trên phần tử vùng chứa khối có nội dung bao gồm các phần tử cấp nội tuyến , 'line-height' chỉ định chiều cao tối thiểu của các hộp dòng trong phần tử.

Chiều cao tối thiểu bao gồm chiều cao tối thiểu phía trên đường cơ sở và chiều sâu tối thiểu bên dưới nó, chính xác như thể mỗi hộp dòng bắt đầu bằng một hộp nội tuyến chiều rộng bằng không với các thuộc tính phông chữ và chiều cao dòng của phần tử.

Chúng tôi gọi chiếc hộp tưởng tượng đó là "thanh chống".

Nếu bạn đặt của cha mẹ line-heightthành 0, và của con cái vertical-alignthành vd top, thì chiều cao của cha mẹ sẽ chính xác là line-heightcon.

Hiển thị đoạn mã

Nếu bạn không đặt a line-heightcho cha mẹ, nó sẽ như vậy normal.

Yêu cầu tác nhân người dùng đặt giá trị đã sử dụng thành giá trị "hợp lý" dựa trên phông chữ của phần tử [...]. Chúng tôi đề xuất một giá trị được sử dụng cho 'bình thường' từ 1.0đến 1.2.

Điều đó có nghĩa là sẽ có chiều cao tối thiểu cho giá trị gốc font-size(mà bạn không chỉ định và giá trị mặc định là phụ thuộc vào triển khai) nhân với hệ số đó (phụ thuộc vào triển khai).

Bạn cũng nên xem xét vertical-alignkhoảng cách. Theo mặc định, nó baselineđiều đó có thể tạo ra một khoảng trống bên dưới . Hình ảnh trong câu trả lời của web-tiki đặc biệt hữu ích:

font-size so với line-height so với chiều cao thực tế

Đó là bởi vì vertical-alignxác định nhịp sẽ được căn chỉnh như thế nào với thanh chống, và với baselinesự liên kết có thể phụ thuộc font-sizevà cuối cùng làm tăng chiều cao của hộp dòng. Chiều cao hộp dòng là khoảng cách giữa phần trên cùng của ô trên cùng và phần dưới cùng của các ô dưới cùng trong dòng.

Nếu bạn không muốn chiều cao của div cha mẹ được tăng lên bằng cách đó, bạn cần một số khác vertical-align, như top, middlehoặc bottom. Khi đó font-sizekhoảng cách sẽ không ảnh hưởng đến chiều cao của div.

Tóm lại, chiều cao của div phụ thuộc vào

  • Nó là line-height
    • ... theo mặc định phụ thuộc vào div font-size
  • Span's line-height
    • ... theo mặc định phụ thuộc vào span's font-size
  • Có thể là khoảng thời gian font-size, tùy thuộc vào khoảng thời gianvertical-align
  • Và rõ ràng height, min-height, max-heightvv
41 hữu ích 5 bình luận chia sẻ
5

Giới thiệu

Câu hỏi hay,

Tôi học được hầu hết những điều này thông qua kinh nghiệm cá nhân.

Trong trường hợp này, chiều cao DIV được đặt thành tự động. Nó sẽ phát hiện chiều cao của nội dung của chính nó và đánh giá chiều cao mới của nó từ đó.

Rõ ràng, DIV chỉ tính đến chiều cao dòng của. Điều này có thể là do số lượng phông chữ đa dạng. Chiều cao dòng cung cấp cho chúng tôi khả năng thích ứng mà chúng tôi cần đối với các loại phông chữ khác nhau.

Nói ngắn gọn

cỡ chữ

Kích thước phông chữ chỉ thay đổi phông chữ thực tế chứ không thay đổi các phần tử div xung quanh nó

chiều cao giữa các dòng

Chiều cao dòng là chiều cao của dòng thực và sẽ thay đổi các phần tử div xung quanh nó

Đợi một chút...

Nếu chúng ta có một cái gì đó như thế này:

div {
  background: green;
  margin-top: 50px;
}
.test-one {
  font-size: 20px
}
.test-two {
  font-size: 40px
}
<div>
  <span class="test-one"> test one </span>
</div>

<div>
  <span class="test-two"> test one </span>
</div>
Mở rộng đoạn mã

Rõ ràng kích thước của DIV (height: auto;) thay đổi theo kích thước phông chữ. Đó là bởi vì độ cao dòng sẽ tự động điều chỉnh cho phù hợp nếu nó không được đặt theo cách thủ công.

Một ngoại lệ

Khi kiểm tra thêm, tôi nhận thấy rằng DIV không phải lúc nào cũng khớp với chiều cao dòng. Điều này xảy ra nếu chiều cao dòng rất nhỏ và phông chữ vượt quá nó một khoảng cách.

Ví dụ bạn đã đưa ra -

.outer {
  margin-top: 50px;
  background-color: green;
  width: 150px;
  font-family: "Times New Roman"
}
.letter-span-1 {
  background-color: red;
  line-height: 40px;
  font-size: 40px;
}
.letter-span-2 {
  background-color: red;
  line-height: 15px;
  font-size: 40px;
}
.letter-span-3 {
  background-color: red;
  line-height: 65px;
  font-size: 40px;
}
<span class="letter-span-1">XxÀg</span>

<div class="outer">
  <span class="letter-span-1">XxÀg</span>
</div>

<div class="outer">
  <span class="letter-span-2">XxÀg</span>
</div>

<div class="outer">
  <span class="letter-span-3">XxÀg</span>
</div>
Mở rộng đoạn mã

Nếu bạn nhìn kỹ,

letter-span-1 và letter-span-3 đều dẫn đến DIV bằng chiều cao dòng.

Tuy nhiên, letter-span-2 thì không.

-------------- Chiều cao dòng - Chiều cao thực tế

letter-span-1: 40px - 40px

letter-span-2: 15px - 25px

letter-span-3: 65px - 65px

Chú ý rằng letter-span-2 là nhỏ nhất. Nó quá nhỏ, nó thực sự sẽ giới hạn chiều cao của div. Bạn có thể kiểm tra điều này bằng cách thay đổi kích thước phông chữ.

Tại sao?"

Tại sao lại có hai cài đặt khác nhau và không chỉ thay đổi chiều cao bình thường?

Thành thật mà nói, tôi không chắc lắm, nhưng tôi suy đoán rằng đó là do phông chữ không chuẩn. Nếu máy tính đọc sai một phông chữ cụ thể, nó có thể đánh giá sai chiều cao dòng.

Chưa kể đến vô số "Thủ thuật CSS" mà bạn có thể làm với chiều cao dòng. Nó là tuyệt vời để thêm không gian cho các thiết kế mở.

Phần kết luận

Chiều cao dòng xác định chiều cao div, trừ khi chiều cao dòng rất nhỏ, trong trường hợp đó, kích thước phông chữ sẽ xác định kích thước.

5 hữu ích 5 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ css , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading