2010-01-26 31 views
8

Có đơn vị đo lường trong CSS (đã được lên kế hoạch hoặc đã tồn tại) để thiết lập phần đệm và lề dựa trên chiều rộng của phông chữ đang được sử dụng không?CSS - Đặt khoảng đệm/lề dựa trên chiều rộng văn bản?

Tôi biết rằng em được coi là chiều cao của chữ hoa chữ thường M của phông chữ mà trình duyệt sử dụng, điều này thực sự tiện dụng để thêm khoảng trống kép. Nhưng đôi khi tôi muốn các bên lề của danh sách nội tuyến là chiều rộng của một không gian bình thường không phá vỡ, hoặc chiều rộng của một trường hợp trên A. Với một số phông chữ, sử dụng em là khác nhau không đáng tin cậy.

Trả lời

4

Vui nhộn, nhưng nó seems that nobody cares về chiều rộng của các phần tử chữ. Tất cả những gì được đo lường, là chiều cao:

alt text

Nếu đây là trường hợp trong "typography cổ điển", sau đó thậm chí còn ít hy vọng trong typography web mà là một lớp con của cựu.

EDIT: Trên thực tế có một số measurement named En đề cập đến "chiều rộng của chữ thường" n "." Tuy nhiên, tôi chưa thấy điều này được sử dụng trên web.

+0

Điều này đặc biệt kỳ lạ, tôi nghĩ rằng, kể từ khi sắp chữ dành rất nhiều thời gian về chủ đề lãnh đạo, kerning, word-spacing, letter-spacing, vv, tất cả dường như để đối phó với cách bố trí các chữ cái theo chiều dọc. Bạn sẽ nghĩ rằng ít nhất một trong số này sẽ phát triển một "khoảng cách của chiều rộng ký tự thực tế". – Anthony

+0

Tôi thấy trong bài viết Wikipedia bạn đề cập đến rằng ** vi ** được định nghĩa là một nửa của 1 em, có nghĩa là bạn có thể sử dụng '0,5em' thay vì' 1en' (tôi không nghĩ * en * được hỗ trợ như đơn vị trong css). Bài viết nói rằng * nó cũng theo chiều rộng của chữ thường "n" *. – awe

+0

Như một lưu ý: Lý do tại sao "không ai quan tâm" về chiều rộng của các phần tử chữ, là các ký tự có độ rộng khác nhau trong một phông chữ (trừ khi nó là một phông chữ monospace). Điều này có nghĩa rằng chiều rộng không phải là một thuộc tính phổ biến trên phông chữ, nhưng trên mỗi ký tự trong phông chữ. – awe

1

Tôi sợ không. CSS không cung cấp cách tham chiếu các thuộc tính phông chữ.

Nhưng bạn luôn có thể lấy đi bằng cách chèn   vào phần tử danh sách bổ sung đầu tiên và cuối cùng.

6

Các thông số kỹ thuật của W3C cho css3 định nghĩa một đơn vị đó là chiều rộng của "0" nhân vật của phông chữ:

đơn vị ch

Bằng các biện pháp trước sử dụng của "0" (ZERO, U + 0030) được tìm thấy trong phông chữ được sử dụng để hiển thị nó.

Xem css3-values.

0

Tôi đã đưa ra một thứ đơn giản giúp tôi giải quyết vấn đề về đệm dựa trên kích thước phông chữ. Tôi muốn bù đắp một <td> dựa trên một tiền tố chuỗi trong hàng ở trên. Cliff ghi chú phiên bản, tôi thêm văn bản đại diện cho bù đắp mong muốn trong một khoảng và làm cho nó vô hình và không thể chọn. Giải pháp của tôi là ở đây:

.hiddenOffset { 
opacity: 0; 
-webkit-touch-callout: none; 
-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
user-select: none; 
cursor: default; 
} 


<table> 
    <tr> 
    <td>NumElements</td> 
    </tr> 
    <tr> 
    <td><span class="hiddenOffset">Num</span>Offset Text</td> 
    </tr> 
</table> 

Điều này mang lại cho tôi khoảng trống hoàn hảo và tiền tố bị ẩn và không thể chọn. Trong mã thực tế của tôi, tôi sử dụng JavaScript thuần túy để chỉ định chuỗi tiền tố để nó không được mã hóa cứng và tôi sử dụng prefix.repeat(n) để đặt thụt lề lồng nhau.

function processRepeatingGroupInstance(indent, group) { 
    let prefix = 'No'; 
    let html = ''; 
    for (let i = 0; i < group.length; i++) { 
     let field = group[i]; 
     if (field.hasOwnProperty('msgvaluedesc')) 
      html += `<tr><td><span class="hiddenOffset">${prefix.repeat(indent)}</span>${field.name}</td><td class="num">${field.number}</td><td class="value tooltip">${field.msgvaluedesc}<span class="tooltiptext">${field.msgvalue}</span></td></tr>`; 
     else 
      html += `<tr><td><span class="hiddenOffset">${prefix.repeat(indent)}</span>${field.name}</td><td class="num">${field.number}</td><td class="value">${field.msgvalue}</td></tr>`; 
     if (field.hasOwnProperty('repeating_group')) { 
      for (let j = 0; j < field.repeating_group.length; j++) 
       html += processRepeatingGroupInstance(indent + 1, field.repeating_group[j]); 
     } 
    } 
    return html; 
} 

Results

+0

https://jsfiddle.net/XJ45G19/0vuer99s/ – shaz

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