Для якорей, которые действуют как кнопки (например, « Вопросы» , « Теги» , « Пользователи» и т. Д. В верхней части страницы «Переполнение стека») или вкладок, существует ли стандартный CSS-способ для отключения эффекта выделения, если пользователь случайно выбрал текст?
Я понимаю, что это можно сделать с помощью JavaScript, и небольшое прибегание к поиску принесло только Mozilla -moz-user-select
.
Существует ли совместимый со стандартами способ сделать это с помощью CSS, и если нет, то каков подход «наилучшей практики»?
css
cross-browser
highlight
textselection
Питер Мортенсен
источник
источник
::selection { background: transparent; } ::-moz-selection { background: transparent; }
postcss
иautoprefixer
и набор версии браузера, затемpostcss
сделать все круто.Ответы:
ОБНОВЛЕНИЕ январь 2017 года:
Согласно « Могу ли я использовать» , в
user-select
настоящее время поддерживается во всех браузерах, кроме Internet Explorer 9 и более ранних версий (но, к сожалению, все еще нужен префикс поставщика).Все правильные варианты CSS:
Обратите внимание, что
user-select
в процессе стандартизации (в настоящее время в рабочем проекте W3C ). Не гарантируется, что он будет работать везде, и в браузерах могут быть различия в реализации, и в будущем браузеры могут отказаться от его поддержки.Дополнительную информацию можно найти в документации Mozilla Developer Network .
источник
<div onselectstart="return false;">
свой основной div.standard-user-select
. тогда у нас не будет этих проблем. хотя для обратной совместимости мы должны включить и другие. так что теперь код становится-webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; standard-user-select: none;
. ах, намного лучшеВ большинстве браузеров это может быть достигнуто с помощью запатентованных вариантов
user-select
свойства CSS , первоначально предложенных, а затем заброшенных в CSS 3 и теперь предложенных в CSS UI Level 4 :Для Internet Explorer <10 и Opera <15 вам нужно будет использовать
unselectable
атрибут элемента, который вы не хотите выбирать. Вы можете установить это, используя атрибут в HTML:К сожалению, это свойство не наследуется, то есть вы должны поместить атрибут в начальный тег каждого элемента внутри
<div>
. Если это проблема, вы можете вместо этого использовать JavaScript, чтобы сделать это рекурсивно для потомков элемента:Обновление 30 апреля 2014 года : этот обход дерева нужно перезапускать всякий раз, когда в дерево добавляется новый элемент, но из комментария @Han видно, что этого можно избежать, добавив
mousedown
обработчик событий, который устанавливаетunselectable
цель событие. Смотрите http://jsbin.com/yagekiji/1 для деталей.Это все еще не охватывает все возможности. Хотя невозможно инициировать выборки в невыбираемых элементах, в некоторых браузерах (например, Internet Explorer и Firefox) все еще невозможно предотвратить выборки, которые начинаются до и заканчиваются после невыбираемого элемента, не делая весь документ недоступным для выбора.
источник
*.foo
и она.foo
точно эквивалентна (во втором случае*
подразумевается универсальный селектор ( )), поэтому, за исключением странностей браузера, я не вижу, что в том числе*
будет вред представление. Моя давняя привычка включать в нее то*
, что я изначально начал делать для удобства чтения: в нем прямо говорится, что автор намеревается сопоставить все элементы.Решение JavaScript для Internet Explorer:
источник
ondragstart
!body.onselectstart = function(e) { if (e.target.nodeName != "INPUT" && e.target.nodeName != "TEXTAREA") { e.preventDefault(); return false; } return true; }
input
элементах, даже если я используюuser-select: none
. мне нужно знать, как это предотвратитьПока свойство CSS 3 для выбора пользователя не станет доступным, браузеры на основе Gecko будут поддерживать
-moz-user-select
свойство, которое вы уже нашли. Браузеры на базе WebKit и Blink поддерживают-webkit-user-select
свойство.Это, конечно, не поддерживается в браузерах, которые не используют движок рендеринга Gecko.
Не существует простого и простого способа сделать это в соответствии со стандартами; использование JavaScript является опцией.
Реальный вопрос заключается в том, почему вы хотите, чтобы пользователи не могли выделять и, предположительно, копировать и вставлять определенные элементы? Я ни разу не сталкивался с тем, что хотел бы, чтобы пользователи не выделяли определенную часть моего сайта. Несколько моих друзей, потратив много часов на чтение и написание кода, будут использовать функцию выделения, чтобы помнить, где на странице они находились, или предоставлять маркер, чтобы их глаза знали, где искать дальше.
Единственное место, где я мог бы убедиться, что это полезно, - это если у вас есть кнопки для форм, которые не следует копировать и вставлять, если пользователь копирует и вставляет веб-сайт.
источник
Если вы хотите отключить выделение текста во всем, кроме
<p>
элементов, вы можете сделать это в CSS (обратите внимание на то,-moz-none
что позволяет переопределять субэлементы, что разрешено в других браузерах с помощьюnone
):источник
p, input { -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -o-user-select: text; user-select: text; }
-moz-none
иnone
то же самое.ul>* { -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: -moz-none; -o-user-select: none; user-select: none; }
[выделяет все в неупорядоченном списке и делает его невыбираемым, а не уничтожает все дерево представлений.] Спасибо за урок. Мой список кнопок выглядит великолепно и корректно реагирует на нажатие и нажатие экрана, а не на запуск IME (виджетов буфера обмена Android).В решениях из предыдущих ответов выбор остановлен, но пользователь все еще думает, что вы можете выбрать текст, потому что курсор все еще меняется. Чтобы он оставался статичным, вам нужно установить курсор CSS:
Это сделает ваш текст абсолютно плоским, как в настольном приложении.
источник
user-select: none;
, думая, что стандарт будет принят сейчас, но, к сожалению, это не так. Заставляет задуматься, о чем еще могут спорить люди в комитете по стандартам. «Нет, ребята ... Я действительно думаю, что так и должно быть,user-select: cant;
потому что это более информативно, понимаете?» «Мы уже прошли через это, Майк. Мы должны были бы опустить апостроф, и это дурной тон!» «Достаточно, все! Мы снова обсудим этот вопрос в следующем месяце. Заседание комитета по стандартам отложено!»Вы можете сделать это в Firefox и Safari (Chrome также?)
источник
Обходной путь для WebKit :
Я нашел это в примере CardFlip.
источник
transparent
вместо RGBA также работает в Chrome 42 на Android.Мне нравится гибридное решение CSS + jQuery.
Чтобы сделать все элементы внутри
<div class="draggable"></div>
невыбираемыми, используйте этот CSS:И затем, если вы используете jQuery, добавьте это внутри
$(document).ready()
блока:Я полагаю, что вы все еще хотите, чтобы любые входные элементы были интерактивными, отсюда и
:not()
псевдоселектор. Вы могли бы использовать'*'
вместо этого, если вам все равно.Предостережение: Internet Explorer 9 может не нуждаться в этой дополнительной части jQuery, поэтому вы можете добавить туда проверку версии.
источник
-moz-user-select: Normal;
jQuery.browser
устарела с версии 1.3 и удалена в версии 1.9 - api.jquery.com/jQuery.browserЭто не самый лучший способ.
источник
title
в качестве атрибута.user-select
не работают.Вы можете использовать CSS или JavaScript для этого.
JavaScript поддерживается в старых браузерах, например в старых версиях Internet Explorer, но если это не ваш случай, используйте способ CSS:
HTML / JavaScript:
HTML / CSS:
источник
Кроме того, для Internet Explorer необходимо добавить псевдокласс
focus
(.ClassName: focus) иoutline-style: none
.источник
className
классом. Смотрите этот JSBin .Попробуйте вставить эти строки в CSS и вызвать «disHighlight» в свойстве класса:
источник
Быстрое обновление Hack
Если вы используете значение
none
для всехuser-select
свойств CSS (включая его префиксы браузера), это может привести к возникновению проблемы.Как говорит CSS-Tricks , проблема заключается в следующем:
WebKit по- прежнему позволяет копировать текст, если вы выбираете элементы вокруг него.
Вы также можете использовать следующий, чтобы
enforce
выбрать весь элемент, что означает, что если вы щелкнете по элементу, будет выделен весь текст, заключенный в этот элемент. Для этого все, что вам нужно сделать, это изменить значениеnone
наall
.источник
Для тех, у кого проблемы с достижением того же в браузере Android с помощью сенсорного события, используйте:
источник
Если вы используете Less и Bootstrap, вы можете написать:
источник
источник
За работой
CSS:
Это должно работать, но это не будет работать для старых браузеров. Существует проблема совместимости браузера.
источник
This is because through our site compatibility work, we have experienced that many authors of (especially mobile) sites only use -webkit- prefixed CSS, thereby ignoring other vendor prefixes and not even including an unprefixed equivalent. This leads to a reduced user experience on Opera and Firefox, which don’t receive the same shiny effects such as transitions, gradients and the like, even if the browser supported those effects.
С SASS (синтаксис SCSS)
Вы можете сделать это с помощью mixin :
В теге HTML:
Попробуйте это в этом CodePen .
Если вы используете автоматический префикс, вы можете удалить другие префиксы.
Совместимость браузера здесь .
источник
Кроме свойства Mozilla, нет, нет способа отключить выделение текста только стандартным CSS (на данный момент).
Если вы заметили, переполнение стека не отключает выделение текста для их кнопок навигации, и я бы рекомендовал не делать этого в большинстве случаев, так как оно изменяет нормальное поведение выделения и противоречит ожиданиям пользователя.
источник
Это работает в некоторых браузерах:
Просто добавьте нужные элементы / идентификаторы перед селекторами, разделенными запятыми без пробелов, например:
Другие ответы лучше; это, вероятно, следует рассматривать как последнее средство / ловушку.
источник
Предположим, есть два типа
div
s:Установите курсор на значение по умолчанию, чтобы он давал пользователю ощущение, которое невозможно выбрать.
источник
Это будет полезно, если выбор цвета также не нужен:
... все другие исправления браузера. Это будет работать в Internet Explorer 9 или более поздней версии.
источник
color: inherit;
возможно.Добавьте это к первому div, в котором вы хотите отключить выделение для текста:
источник
НОТА:
Правильный ответ верен в том смысле, что он не позволяет вам выбрать текст. Однако это не мешает вам копировать текст, как я покажу на следующей паре снимков экрана (по состоянию на 7 ноября 2014 г.).
Как видите, мы не смогли выбрать номера, но мы смогли скопировать их.
Проверено на: Ubuntu , Google Chrome 38.0.2125.111.
источник
Чтобы получить нужный мне результат, я нашел , что я должен был использовать как
::selection
иuser-select
источник
Это легко сделать с помощью:
В качестве альтернативы:
Допустим, у вас есть
<h1 id="example">Hello, World!</h1>
. Вам придется удалить innerHTML этогоh1
, в данном случае Hello, World . Тогда вам придется перейти на CSS и сделать это:Теперь он просто думает, что это блок-элемент, а не текст.
источник
Это не CSS, но стоит упомянуть:
JQuery UI Отключить выбор :
источник
Проверьте мое решение без JavaScript:
jsFiddle
Всплывающее меню с применением моей техники: http://jsfiddle.net/y4Lac/2/
источник
Хотя этот псевдоэлемент находился в черновиках CSS-селекторов 3-го уровня, он был удален на этапе рекомендации кандидата, так как оказалось, что его поведение было недостаточно определенным, особенно с вложенными элементами, и совместимость не была достигнута.
Это обсуждается в How :: selection работает с вложенными элементами .
Несмотря на то, что это реализовано в браузерах, вы можете создать иллюзию того, что текст не будет выделен, используя тот же цвет и цвет фона при выделении, что и для дизайна вкладок (в вашем случае).
Нормальный дизайн CSS
На выбор
Запрет пользователям выбирать текст вызовет проблемы с юзабилити.
источник