2016-04-06 17 views
5

Tôi đã có một ứng dụng sử dụng thẻ <mark> để đánh dấu tương tác văn bản. Khi người dùng kéo chuột, nó kết thúc tốt đẹp và unwraps các nút văn bản trong tài liệu để hiển thị cho người dùng lựa chọn. Khi phạm vi được chọn kết thúc ở giữa một từ, dấu bao quanh chỉ là một phần của từ đó. Nếu ranh giới nằm giữa cặp kerned, kerning bị vô hiệu hóa.Tiếp tục kerning tại ranh giới thẻ

Dưới đây là một ví dụ:

p { font-size: 30pt; margin: 0; line-height: 26pt; }
<p>There <mark>are 1</mark>1 entries.</p> 
 
<p>There are 11 entries.</p>

Trong đoạn đầu tiên, < mark> tag kết thúc giữa hai "1" chữ số. Đoạn thứ hai có cùng văn bản, không có dấu <>. Kích thước phông chữ, lề và khoảng cách dòng được điều chỉnh để đưa các đoạn gần nhau hơn để tạo sự khác biệt rõ hơn.

Có nhiều khoảng trống hơn giữa các số 1 với dấu <> không có. Vì điều này xảy ra tương tác trong ứng dụng, khi người dùng kéo chuột qua 1s, văn bản tiếp theo sẽ dịch sang phải khi chúng nằm trong khoảng từ 1 giây và sau đó quay lại khi chúng vượt qua ký tự tiếp theo. Các "jiggling" của văn bản có thể gây phiền nhiễu.

Có cách nào để thông báo cho trình duyệt không để coi thẻ đánh dấu là ranh giới kerning không? Có thể cài đặt phông chữ-tính năng?

Trả lời

2

Vâng, bạn có thể tắt hoàn toàn kerning ... Tôi nghĩ đó là gần nhất bạn sẽ nhận được để không nhìn thấy những ảnh hưởng, kể từ khi kerning ranh giới sẽ luôn nằm ở ranh giới thẻ.

p { font-size: 30pt; margin: 0; line-height: 26pt; font-kerning: none; } 
 
mark { margin: 0; font-kerning: none; }
<p>There <mark>are 1</mark>1 entries.</p> 
 
<p>There are 11 entries.</p>

+0

Tôi nghi ngờ bạn đúng rằng đây sẽ là điều tốt nhất tôi có thể làm. Tôi đã hy vọng rằng có lẽ sẽ có một trong những thuộc tính CSS ít nổi tiếng hơn (như font-feature-setting, có một vài tùy chọn phức tạp nhỏ) sẽ cho trình duyệt bỏ qua ranh giới cho mục đích của kerning. Rõ ràng trình duyệt có thể _do_ điều này, vì đánh dấu của riêng trình duyệt hiện nó (sử dụng chuột để chọn cùng một khu vực được đánh dấu trong ví dụ, không thay đổi trong kerning), vì vậy tôi figured tôi muốn tiếp cận. – scottb

0

Tôi đã tìm kiếm nhiều lần để sửa lỗi "dọn dẹp" nhưng tôi chỉ tìm ra một cách với thuộc tính margin.

Check this out

mark { margin: 0 -1pt; } 

Hy vọng nó giúp

+1

Đây không phải là những gì phương tiện kerning. Kerning liên quan đến các cặp ký tự cụ thể. –

+0

Bạn học tôi điều gì đó, tôi không biết tài sản 'font-kerning'! –

1

Xem xét sử dụng các yếu tố giả ::selection để kiểm soát nổi bật của văn bản đã chọn.

Nếu bạn muốn sau đó chèn các thẻ mark của mình, bạn có thể thực hiện việc đó sau khi quá trình lựa chọn hoàn tất. Tại thời điểm đó, bạn sẽ mất kerning tại ranh giới thẻ, nhưng ít nhất bạn sẽ không nhìn thấy các jiggle khi người dùng lựa chọn.

::selection { 
 
    background-color: yellow; 
 
}
There are 11 entries.<br/> 
 
There are 11 entries.

+0

Điều đó sẽ không hoạt động trong trường hợp này. Không có văn bản nào được chọn (theo nghĩa đó), do đó, phần tử giả chọn :: không đề cập đến bất kỳ điều gì trong trường hợp của tôi. – scottb

+0

Tôi đang bối rối. Khi người dùng kéo chuột, văn bản thực sự được chọn, và phần tử giả ':: selection' thực sự tham chiếu đến văn bản đã chọn đó. Bạn có thể cho tôi biết những gì tôi đang thiếu? –

+0

Tôi đang làm việc trên môi trường di động - đặc biệt là iOS. Các lựa chọn không hoạt động theo cách đó - người dùng phải chạm và giữ, sau đó di chuyển kết quả "xử lý". Tôi cần một tương tác đơn giản hơn để chọn văn bản, vì vậy tôi đang xây dựng một văn bản. – scottb

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