Подтвердить что ты не робот

Почему Google Chrome всегда добавляет пространство после выделенного текста?

Почему Google Chrome всегда добавляет пробел в конце строки при выборе текста с тремя щелчками мыши?

Как вы думаете, мы можем что-то сделать с помощью CSS или JavaScript, чтобы удалить его? (Плохая идея, но, просто пытаясь избежать этой вещи)

Блок:

введите описание изображения здесь

Когда я нажимаю 3 раза по тексту:

введите описание изображения здесь

Пример gif:

введите описание изображения здесь

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is established to be used for illustrative examples in documents. You may use this
    domain in examples without prior coordination or asking for permission.</p>
    <p><a href="#" onclick="location.href='http://www.iana.org/domains/example'; return false;">More information...</a></p>
</div>
</body>
4b9b3361

Ответ 1

Я провел много тестов между Chrome и Firefox, чтобы выяснить общий шаблон для их методов отображения, выбора и копирования.

Google Chrome

Google Chrome игнорирует все символы пробела внутреннего и внешнего элементов в HTML, за исключением случаев, когда они находятся внутри текста. Все пробельные символы между текстами отображаются как символ особого пространства, но фактическое значение символа сохраняется. Это для обоих элементов, которые имеют встроенные или стили отображения блоков.

Каждый отдельный элемент, за исключением последнего элемента элемента body, отображает пробел в конце, когда он выбирается с помощью выбора тройного щелчка или перетаскивания. Это пространство отличается от стиля отображения элементов.

Элемент отображения блока приводит к добавлению к нему двух символов CRLF, когда текст копируется, а встроенный элемент отображения только когда-либо приводит к 1 CRLF. Символы пробела сохраняются между копией и вставкой, но ограничиваются только одним символом.

Firefox

Firefox игнорирует пробел внешнего элемента, но имеет интересные результаты с символами пробела внутреннего элемента. Все пробельные символы преобразуются в пробелы, за исключением начального символа с пределом пробела между каждым символом без пробела. Отображаются и выбираются только последние пробелы.

Выбор трехмерного щелчка и копирование текста приводит к различным значениям в зависимости от стиля отображения этого элемента.

Встроенный дисплей

Всегда есть пробел до и после текста, который копируется независимо от того, что содержит эти элементы. Каждый символ пробела удаляется.

Блок-дисплей

Пропущенные символы перед текстом сохраняются как-есть, а конечный символ пробела преобразуется в пробел.


Итак, чтобы ответить на ваш вопрос, все это основано на том, как браузеры реализуют методы отображения, выбора и копирования. Это будет отличаться от браузеров, и я бы не рекомендовал добавлять CSS, JS и HTML-хаки. Из тестов я считаю, что выбор не имеет ничего общего с новой строкой между элементами, поскольку удаление новой строки не устраняет лишний выбор пространства.

Ответ 2

Как было предложено @brendan, его из-за символов newLine.

Попробуйте создать фиктивную HTML-страницу со следующим html и попробуйте,

<html>
  <body>
    <h1>Hello world</h1>
  </body>
</html>

Ответ 3

Возможно, вы уже видели эту группу Google, но в противном случае она может помочь:

Как дважды щелкнуть слово и не выделять или выделять лишний пробел после слова

Это на самом деле не для той же проблемы, но кажется, что есть разница в поведении между различными ОС.

Я не могу проверить это сейчас, но, возможно, у тебя такое же поведение.

Ответ 4

Разрешить в Chrome с версии 69.0.3497.81