2016-04-06 12 views
5

Mam aplikację, która używa znacznika <mark> do interaktywnego zaznaczania tekstu. Gdy użytkownik przeciąga mysz, zawija i rozpakowuje węzły tekstowe w dokumencie, aby pokazać użytkownikowi wybór. Gdy wybrany zakres kończy się w środku słowa, znaczek otacza tylko część słowa. Jeśli granica jest pomiędzy kernedami, kerning jest wyłączony.Kontynuuj kerning na granicach znaczników

Oto przykład:

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

W akapicie pierwszym < znak> tag kończy się pomiędzy dwiema cyframi "1". Drugi akapit ma ten sam tekst, bez znaku <>. Rozmiar czcionki, margines i odstępy między wierszami są dostosowywane, aby zbliżyć akapity do siebie, aby różnice były bardziej widoczne.

Jest więcej miejsca między 1s a znacznikiem <> niż bez. Ponieważ dzieje się to interaktywnie w aplikacji, ponieważ użytkownik przeciąga myszą ponad 1, następny tekst przesuwa się w prawo, gdy są pomiędzy 1 a powrotem, gdy minie kolejną postać. "Jiggling" tekstu może być denerwujący.

Czy istnieje sposób, aby powiedzieć przeglądarce , a nie, aby traktować znaczniki jako granicę kerningu? Może ustawienie czcionek?

Odpowiedz

2

dobrze, można wyłączyć kerning całkowicie ... Myślę, że to najbliżej masz zamiar dostać się do nie widząc efekt, ponieważ kerningu granica zawsze będzie na granicy znacznika.

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

Podejrzewam, że masz rację, że to będzie najlepsze, co mogę zrobić. Miałem nadzieję, że może będzie jedna z tych mniej znanych właściwości CSS (takich jak font-feature-setting, która ma trochę skomplikowane opcje), która nakazuje przeglądarce zignorować granicę dla celów kerningu. Oczywiste jest, że przeglądarka może to zrobić, ponieważ robi to samo podświetlenie przeglądarki (użyj myszki, aby wybrać ten sam obszar, który jest zaznaczony w przykładzie, bez zmian w kerningu), więc pomyślałem, że sięgnę. – scottb

0

Szukałem w kółko "poprawek" poprawek, ale udało mi się znaleźć tylko jedną metodę z właściwością margin.

Check this out

mark { margin: 0 -1pt; } 

Nadzieja pomaga

+1

nie jest to co kerningu środki. Kerning odnosi się do określonych par znaków. –

+0

Uczyłeś mnie czegoś, nie znałem własności 'font-kerning'! –

1

rozważyć użycie Pseudoelement ::selection kontrolować podświetlenie zaznaczonego tekstu.

Jeśli chcesz wstawić swoje tagi mark, możesz to zrobić po zakończeniu procesu selekcji. W tym momencie stracisz kerning na granicach znaczników, ale przynajmniej nie zobaczysz poruszenia, jak wybierze użytkownik.

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

+0

To nie zadziała w tym przypadku. Nie ma zaznaczonego tekstu (w tym sensie), więc pseudoelement :: selection nie odnosi się do niczego w moim przypadku. – scottb

+0

Jestem zdezorientowany. Kiedy użytkownik przeciągnie mysz, tekst jest rzeczywiście wybrany, a pseudoelement ':: selection' rzeczywiście odwołuje się do tego zaznaczonego tekstu. Czy możesz mi powiedzieć, czego mi brakuje? –

+0

Pracuję w środowisku mobilnym - w szczególności w iOS. Wybór nie działa w ten sposób - użytkownik musi dotknąć i przytrzymać, a następnie przenieść wynikowe "uchwyty". Potrzebuję prostszej interakcji do zaznaczania tekstu, więc ją buduję. – scottb