Как отключить выделение выделения текста

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

Я понимаю, что это можно сделать с помощью JavaScript, и небольшой поиск в Google дал вариант -moz-user-select только для Mozilla.

Есть ли стандартный способ добиться этого с помощью CSS, а если нет, то каков наилучший подход?


person Community    schedule 05.05.2009    source источник
comment
Могут ли элементы внутри элемента отключено выделение, включить выделение в CSS в атрибуте стиля или класса? или другими словами, есть ли другие значения для -webkit-user-select и т. д. кроме просто ни одного?   -  person    schedule 15.03.2011
comment
По теме: stackoverflow.com/questions/16600479/ = как разрешить выбор только некоторых дочерних элементов   -  person JK.    schedule 17.05.2013
comment
В некоторых браузерах есть ошибка, при которой выполнение Select All (CTRL + A и CMD + A) по-прежнему выбирает элементы. С этим можно бороться с помощью прозрачного цвета выделения: ::selection { background: transparent; } ::-moz-selection { background: transparent; }   -  person DaAwesomeP    schedule 12.12.2014
comment
Могу я просто сказать: пожалуйста, не делай этого. По моему опыту, я чаще всего на самом деле хочу выделить текст, который также служит кнопкой, чтобы скопировать и вставить его в другое место. Было бы невообразимо раздражать, если бы я не смог этого сделать, потому что какой-то веб-разработчик изо всех сил старался отключить эту функцию для меня. Поэтому, пожалуйста, не делайте этого, если у вас нет очень, очень уважительной причины.   -  person kajacx    schedule 30.08.2016
comment
@ cram2208 Я согласен, за исключением того, что другой связанный вопрос является дубликатом. Этот вопрос старше, и на него есть больше / лучше ответов.   -  person www139    schedule 15.12.2016
comment
В 2017 году лучше использовать postcss и autoprefixer и установить версию браузера, а затем postcss сделать все круто.   -  person AmerllicA    schedule 06.12.2017
comment
Пользовательский интерфейс изменился. В 2019 году все три упомянутых предмета теперь находятся в гамбургер-меню в верхнем левом углу. Здесь есть Теги и Пользователи, и теперь "Вопросы" называется "Переполнение стека" (со значком впереди).   -  person Peter Mortensen    schedule 24.11.2019


Ответы (49)


ОБНОВЛЕНИЕ Январь 2017 г .:

Согласно Могу ли я использовать, user-select в настоящее время поддерживается во всех браузерах, кроме Internet Explorer 9. и его более ранние версии (но, к сожалению, все еще нуждается в префиксе поставщика).


Это все доступные правильные варианты CSS:

.noselect {
  -webkit-touch-callout: none; /* iOS Safari */
    -webkit-user-select: none; /* Safari */
     -khtml-user-select: none; /* Konqueror HTML */
       -moz-user-select: none; /* Old versions of Firefox */
        -ms-user-select: none; /* Internet Explorer/Edge */
            user-select: none; /* Non-prefixed version, currently
                                  supported by Chrome, Edge, Opera and Firefox */
}
<p>
  Selectable text.
</p>
<p class="noselect">
  Unselectable text.
</p>


Обратите внимание, что user-select находится в процессе стандартизации (в настоящее время находится в рабочем проекте W3C ). Не гарантируется, что он будет работать везде, и в разных браузерах могут быть различия в реализации. Кроме того, браузеры могут отказаться от его поддержки в будущем.


Дополнительную информацию можно найти в документации Mozilla Developer Network.

Значения этого атрибута: none, text, toggle, element, elements, all и inherit.

person Community    schedule 10.12.2010
comment
хороший код molokoloco: D, хотя я лично не стал бы его использовать, так как иногда вам могут понадобиться разные значения для разных браузеров, и он полагается на JavaScript. Создание класса и добавление его к вашему элементу или применение CSS к вашему типу элемента в вашей таблице стилей - довольно пуленепробиваемое доказательство. - person Blowsie; 14.01.2011
comment
'user-select' - Значения: нет | текст | переключить | элемент | элементы | все | наследование - w3.org/TR/2000/WD-css3-userint- 20000216 - person Blowsie; 21.03.2011
comment
это смешно! так много разных способов сделать одно и то же. давайте создадим новый стандарт для выбора пользователей. мы назовем это 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;. ах, намного лучше. - person Claudiu; 04.09.2012
comment
По словам caniuse, эти префиксы ему больше не нужны. - person aderchox; 16.07.2021

В большинстве браузеров это может быть достигнуто с помощью проприетарных вариаций свойства CSS user-select, первоначально предложено, а затем от него отказались в CSS 3, а теперь предлагается в CSS UI уровня 4:

*.unselectable {
   -moz-user-select: none;
   -khtml-user-select: none;
   -webkit-user-select: none;

   /*
     Introduced in Internet Explorer 10.
     See http://ie.microsoft.com/testdrive/HTML5/msUserSelect/
   */
   -ms-user-select: none;
   user-select: none;
}

Для Internet Explorer ‹10 и Opera‹ 15 вам нужно будет использовать unselectable атрибут элемента, который вы не хотите выбирать. Вы можете установить это с помощью атрибута в HTML:

<div id="foo" unselectable="on" class="unselectable">...</div>

К сожалению, это свойство не наследуется, а это означает, что вам нужно поместить атрибут в начальный тег каждого элемента внутри <div>. Если это проблема, вы можете вместо этого использовать JavaScript, чтобы сделать это рекурсивно для потомков элемента:

function makeUnselectable(node) {
    if (node.nodeType == 1) {
        node.setAttribute("unselectable", "on");
    }
    var child = node.firstChild;
    while (child) {
        makeUnselectable(child);
        child = child.nextSibling;
    }
}

makeUnselectable(document.getElementById("foo"));

Обновление от 30 апреля 2014 г.: этот обход дерева необходимо запускать повторно всякий раз, когда в дерево добавляется новый элемент, но из комментария @Han видно, что этого можно избежать, добавив событие mousedown. обработчик, который устанавливает unselectable для цели события. Подробнее см. http://jsbin.com/yagekiji/1.


Это все еще не охватывает все возможности. Хотя невозможно инициировать выбор в невыбираемых элементах, в некоторых браузерах (например, Internet Explorer и Firefox) по-прежнему невозможно предотвратить выбор, который начинается до и заканчивается после невыбираемого элемента, не делая весь документ невыбираемым.

person Tim Down    schedule 05.12.2010
comment
вам следует удалить селектор * из своего примера, он действительно неэффективен, и на самом деле нет необходимости использовать его в вашем примере? - person Blowsie; 14.01.2011
comment
@Blowsie: Я так не думаю: спецификация CSS 2 утверждает, что *.foo и .foo в точности эквивалентны (во втором случае подразумевается универсальный селектор (*)), поэтому, если не считать причуд браузера, я не вижу этого, включая * нанесет вред производительности. У меня есть давняя привычка включать *, что я изначально начал делать для удобочитаемости: он прямо заявляет, что автор намеревается сопоставить все элементы. - person Tim Down; 14.01.2011
comment
oooh после некоторого дальнейшего чтения кажется, что * неэффективен только при использовании его в качестве ключа (самого правого селектора), то есть .unselectable *. Дополнительная информация здесь: code.google.com/speed/page-speed / docs / - person Blowsie; 14.01.2011
comment
Вместо использования class = unselectable просто используйте селектор атрибутов [unselectable = on] {…} - person Chris Calo; 26.01.2012

Пока не станет доступно свойство CSS 3 user-select , браузеры на основе Gecko поддерживают уже найденное вами свойство -moz-user-select. Браузеры на основе WebKit и Blink поддерживают свойство -webkit-user-select.

Это, конечно, не поддерживается в браузерах, которые не используют движок рендеринга Gecko.

Не существует простого и быстрого способа сделать это, совместимого со стандартами; использование JavaScript - это вариант.

Настоящий вопрос заключается в том, почему вы хотите, чтобы пользователи не могли выделять и предположительно копировать и вставлять определенные элементы? Я не встречал ни одного случая, чтобы я не позволял пользователям выделять определенную часть моего веб-сайта. Некоторые из моих друзей, проведя много часов за чтением и написанием кода, будут использовать функцию выделения, чтобы запомнить, где они были на странице, или предоставить маркер, чтобы их глаза знали, куда смотреть дальше.

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

person X-Istence    schedule 05.05.2009
comment
Кнопки были бы моей мотивацией. - person Kriem; 06.05.2009
comment
Это может быть необходимо для встроенных устройств. то есть устройство, на котором для рендеринга пользовательского интерфейса используется браузер. - person Tim Kersten; 04.11.2009
comment
Еще одна причина, по которой это необходимо, - это нажатие клавиши Shift для выбора нескольких строк в сетке или таблице. Вы не хотите выделять текст, вы хотите, чтобы он выделял строки. - person Gordon Tucker; 06.01.2010
comment
Высокоинтерактивное веб-приложение с большим количеством операций перетаскивания ... случайное выделение - большая проблема юзабилити. - person Marc Hughes; 04.06.2014

Решение JavaScript для Internet Explorer:

onselectstart="return false;"
person Pekka    schedule 13.11.2009
comment
Не забывайте о ondragstart! - person Mathias Bynens; 26.05.2010

Если вы хотите отключить выделение текста для всего, кроме элементов <p>, вы можете сделать это в CSS (обратите внимание на -moz-none, который позволяет переопределить вложенные элементы, что разрешено в других браузерах с none):

* {
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: -moz-none;
    -o-user-select: none;
    user-select: none;
}

p {
    -webkit-user-select: text;
    -khtml-user-select: text;
    -moz-user-select: text;
    -o-user-select: text;
    user-select: text;
}
person Benjamin Crouzier    schedule 24.05.2011
comment
Убедитесь, что вы также сделали поля ввода доступными для выбора: p, input { -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -o-user-select: text; user-select: text; } - person joshuadelange; 08.07.2011
comment
Будьте очень осторожны с отключением ожиданий пользовательского интерфейса браузера для ВСЕГО кода, кроме одного элемента. А как насчет элементов списка ‹li /› текста, например? - person Jason T Featheringham; 12.11.2011
comment
Просто обновление ... согласно MDN, поскольку Firefox 21 -moz-none и none одинаковы. - person Kevin Fegan; 25.12.2013
comment
Для этого вы можете добавить соответственно cursor: default и cursor: text :) - person T4NK3R; 14.07.2014
comment
THE бомба. Так сказать. КОНЕЦ. ul>* { -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: -moz-none; -o-user-select: none; user-select: none; } [выбирает все в неупорядоченном списке и делает его недоступным для выбора, вместо того, чтобы уничтожать все дерево представлений.] Спасибо за урок. Мой список кнопок выглядит великолепно и правильно реагирует на касание и нажатие экрана, а не запускает IME (виджеты буфера обмена Android). - person Hypersoft Systems; 12.09.2019
comment
отлично, я использую это :) - person C Alonso C Ortega; 16.03.2020

В решениях в предыдущих ответах выбор остановлен, но пользователь все еще думает, что вы можете выделить текст, потому что курсор все еще изменяется. Чтобы он оставался статичным, вам нужно установить курсор CSS:

.noselect {
    cursor: default;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
<p>
  Selectable text.
</p>
<p class="noselect">
  Unselectable text.
</p>

Это сделает ваш текст абсолютно плоским, как в настольном приложении.

person ZECTBynmo    schedule 30.08.2015
comment
Плоский в отличие от чего? - person kojow7; 09.02.2018
comment
@ kojow7 В отличие от многоуровневого. Вместо текста, плавающего поверх других элементов. Это похоже на разницу между изображениями SVG и PNG. - person Yeti; 19.09.2018
comment
Был удивлен, обнаружив, что Firefox по-прежнему требует префикса поставщика в 2019 году. Я пренебрежительно использовал только user-select: none;, думая, что стандарт будет принят сейчас, но, к сожалению, это не так. Заставляет задуматься, что еще могут обсуждать члены комитета по стандартам. Нет, ребята ... Я правда думаю, что это должно быть user-select: cant;, потому что оно более информативное, понимаете? Мы уже прошли через это, Майк. Придется опустить апостроф, а это дурной тон! Всем хватит! В следующем месяце мы еще раз обсудим этот вопрос. Заседание комитета по стандартам закрыто! - person Mentalist; 24.05.2019

Вы можете сделать это в Firefox и Safari (также в Chrome?)

::selection { background: transparent; }
::-moz-selection { background: transparent; }
person seanmonstar    schedule 05.05.2009
comment
Я бы не рекомендовал это делать, потому что это фактически не решает проблему; отключение выделения текста - просто скрывает его. Это может привести к плохому удобству использования, потому что, если я перетащу курсор по странице, я могу выбрать любой произвольный текст, не зная об этом. Это может вызвать всевозможные странные ошибки юзабилити. - person Keithamus; 02.02.2011
comment
Не работает с PNG-изображениями с прозрачными областями: всегда будет выделяться голубым цветом… Есть ли обходной путь? - person AvL; 19.09.2013

Обходной путь для WebKit:

/* Disable tap highlighting */
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);

Я нашел это в примере CardFlip.

person Alex    schedule 21.09.2011
comment
Использование transparent вместо rgba также работает в Chrome 42 на Android. - person Clint Pachl; 29.04.2015

Мне нравится гибридное решение CSS + jQuery.

Чтобы сделать все элементы внутри <div class="draggable"></div> недоступными для выбора, используйте этот CSS:

.draggable {
    -webkit-user-select: none;
     -khtml-user-select: none;
       -moz-user-select: none;
        -ms-user-select: none;
         -o-user-select: none;
            user-select: none;
}

.draggable input {
    -webkit-user-select: text;
     -khtml-user-select: text;
       -moz-user-select: text;
         -o-user-select: text;
            user-select: text;
 }

А затем, если вы используете jQuery, добавьте это в блок $(document).ready():

if (($.browser.msie && $.browser.version < 10) || $.browser.opera) $('.draggable').find(':not(input)').attr('unselectable', 'on');

Я полагаю, вы по-прежнему хотите, чтобы любые элементы ввода были интерактивными, отсюда и псевдоселектор :not(). Вместо этого вы можете использовать '*', если вам все равно.

Предостережение: Internet Explorer 9 может не нуждаться в этой дополнительной части jQuery, поэтому вы можете добавить туда проверку версии.

person Tom Auger    schedule 11.11.2011
comment
Используйте -ms-user-select: none; (для IE10) и ваш jQuery, если он должен быть таким: if (($ .browser.msie && $ .browser.version ‹10) || $ .browser.opera) - person mhenry1384; 31.01.2013
comment
Будь осторожен, чувак !!! Чтобы сделать его доступным для выбора в firefox, вы должны использовать -moz-user-select: Normal; - person Nicolas Thery; 10.03.2013
comment
@ mhenry1384 jQuery.browser устарел в версии 1.3 и был удален в версии 1.9 - api.jquery.com/ jQuery.browser - person WynandB; 15.03.2013
comment
@Wynand Хорошее замечание. Но какой вид обнаружения функций существует, чтобы определить, какое свойство CSS использовать? - person Tom Auger; 15.03.2013
comment
@TomAuger Вы можете использовать jQuery.support, он позволяет вам проверять отдельные функции: Ссылка - person Aequanox; 28.03.2013
comment
Да, но что именно вы собираетесь запрашивать в плане поддержки? Я не знал, что вы можете запросить поддержку для определенного свойства CSS ... - person Tom Auger; 28.03.2013
comment
@PeterMortensen, но user-select: none даже не работает с input элементами?!?! вы всегда можете выделить текст. как заставить user-select: none работать с элементами ввода ???? - person oldboy; 14.11.2019

.hidden:after {
    content: attr(data-txt);
}
<p class="hidden" data-txt="Some text you don't want to be selected"></p>

Но это не лучший способ.

person Ale    schedule 01.05.2013
comment
Вы также можете использовать title в качестве атрибута. - person Toothbrush; 07.05.2014
comment
Это очень креативное решение. Особенно, если он использовал атрибут title, потому что это, вероятно, было бы лучше для программ чтения с экрана. - person pseudosavant; 17.09.2014
comment
Я пробовал (JSBin), и он не работает в IE . К сожалению, старые IE - единственные, с которыми user-select не работает. - person pseudosavant; 17.09.2014
comment
Это отличная альтернатива без JS, которая работает в Chrome! Потрясающие! - person saricden; 06.11.2018

Для этого можно использовать CSS или JavaScript.

Способ JavaScript поддерживается в более старых браузерах, например в старых версиях Internet Explorer, но если это не ваш случай, используйте способ CSS. тогда:

HTML / JavaScript:

<html onselectstart='return false;'>
  <body>
    <h1>This is the Heading!</h1>
    <p>And I'm the text, I won't be selected if you select me.</p>
  </body>
</html>

HTML / CSS:

.not-selectable {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
<body class="not-selectable">
  <h1>This is the Heading!</h1>
  <p>And I'm the text, I won't be selected if you select me.</p>
</body>

person Alireza    schedule 05.06.2017

Для Internet Explorer дополнительно необходимо добавить псевдокласс focus (.ClassName: focus) и outline-style: none.

.ClassName,
.ClassName:focus {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    outline-style: none; /* Internet Explorer  */
}
person Elad Shechter    schedule 23.12.2013
comment
Это работает в IE до тех пор, пока выбор начинается с элемента с классом className. См. Этот JSBin. - person pseudosavant; 17.09.2014

Попробуйте вставить эти строки в CSS и вызвать "disHighlight" в свойстве class:

.disHighlight {
    user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    -webkit-touch-callout: none;
    -o-user-select: none;
    -moz-user-select: none;
}
person user1012506    schedule 28.08.2016

Быстрое обновление о взломе

Если вы используете значение none для всех свойств CSS user-select (включая его префиксы браузера), существует проблема, которая может возникнуть из-за этого.

.div {
    -webkit-user-select: none; /* Chrome all / Safari all */
    -moz-user-select: none;    /* Firefox all             */
    -ms-user-select: none;     /* Internet Explorer  10+  */
     user-select: none;        /* Likely future           */
}

Как сказано в CSS-Tricks, проблема это:

WebKit по-прежнему позволяет копировать текст, если вы выбираете элементы вокруг него.

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

.force-select {
    -webkit-user-select: all;  /* Chrome 49+     */
    -moz-user-select: all;     /* Firefox 43+    */
    -ms-user-select: all;      /* No support yet */
    user-select: all;          /* Likely future  */
}
person Kaz    schedule 31.03.2018

Для тех, у кого есть проблемы с достижением того же в браузере Android с событием касания, используйте:

html, body {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
    -webkit-tap-highlight-color: transparent;
}
person Beep.exe    schedule 19.05.2014

С помощью SASS (синтаксис SCSS)

Это можно сделать с помощью миксина:

// Disable selection
@mixin disable-selection {
    -webkit-touch-callout: none; /* iOS Safari */
    -webkit-user-select: none;   /* Safari */
    -khtml-user-select: none;    /* Konqueror HTML */
    -moz-user-select: none;      /* Firefox */
    -ms-user-select: none;       /* Internet Explorer/Edge */
    user-select: none;           /* Non-prefixed version, currently supported by Chrome and Opera */
}

// No selectable element
.no-selectable {
    @include disable-selection;
}

В теге HTML:

<div class="no-selectable">TRY TO HIGHLIGHT</div>

Попробуйте в этом CodePen.

Если вы используете autoprefixer, вы можете удалить другие префиксы.

Совместимость браузера здесь.

person Alessandro_russo    schedule 11.10.2019

Если вы используете Less и Bootstrap можно написать:

.user-select(none);
person Codler    schedule 18.04.2012

Работает

CSS:

-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-touch-callout: none;
-webkit-user-select: none;

Это должно работать, но не будет работать в старых браузерах. Возникла проблема совместимости браузера.

person suraj rawat    schedule 27.02.2014
comment
Свойство CSS без префикса должно находиться строго в конце списка версий свойства с префиксом. Это хорошая и правильная практика, другая - плохая практика, создавая новый IE из Chrome / Webkit и приводящая к таким УЖЕСТНЫМ вещам, как введение поддержки префикса -webkit в браузерах, отличных от webkit. Смотрите, это было уже в 2012 году: dev.opera.com / article / - person FlameStorm; 22.03.2017
comment
И цитирую: 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. - person FlameStorm; 22.03.2017

За исключением свойства Mozilla-only, нет никакого способа отключить выделение текста с помощью стандартного CSS (на данный момент).

Если вы заметили, Stack Overflow не отключает выделение текста для их кнопок навигации, и я бы не рекомендовал делать это в большинстве случаев, поскольку он изменяет нормальное поведение выбора и противоречит ожиданиям пользователя.

person hbw    schedule 05.05.2009
comment
Хотя я согласен с тем, что это меняет поведение, ожидаемое пользователем, это имеет смысл для таких вещей, как кнопка Добавить комментарий, которая находится рядом с этим полем формы ... - person X-Istence; 06.05.2009
comment
Но разве это не раскрывает ненужные детали реализации? Невозможно выбрать ввод или текст кнопки. - person ; 06.05.2009
comment
@anon: большинство пользователей, вероятно, не будут пытаться выделить текст вашей кнопки, поэтому на практике это не должно иметь большого значения. Кроме того, для этого им нужно будет начать выбирать снаружи кнопки - если они нажмут внутри самой кнопки, вместо этого активируется обработчик onclick. Кроме того, некоторые браузеры (например, Safari) позволяют выбирать текст обычных кнопок… - person hbw; 06.05.2009
comment
Если вы выбираете набор комментариев из ветки чата, и рядом с каждым комментарием есть кнопка «за» / «против», то было бы неплохо выделить текст без других вещей. Это то, чего ожидает или хочет пользователь. Он не хочет копировать / вставлять метки кнопок с каждым комментарием. - person Mnebuerquo; 03.08.2013
comment
А что, если вы, например, дважды щелкните кнопку, которая вместо перенаправления на другую страницу открывает div? то текст для кнопки будет выделен двойным щелчком! - person Gigala; 25.07.2014
comment
Сделайте то, что вы хотите, выбираемым - выбираемым ... и ничего больше. - person sheriffderek; 26.03.2016
comment
Еще одно исключение - выбор записей в таблице. Если вы хотите включить удержание Shift / Control для выбора и выделения нескольких записей, вам необходимо отключить выделение текста. - person bvdb; 28.08.2017

Это работает в некоторых браузерах:

::selection{ background-color: transparent;}
::moz-selection{ background-color: transparent;}
::webkit-selection{ background-color: transparent;}

Просто добавьте желаемые элементы / идентификаторы перед селекторами через запятую без пробелов, например:

h1::selection,h2::selection,h3::selection,p::selection{ background-color: transparent;}
h1::moz-selection,h2::moz-selection,h3::moz-selection,p::moz-selection{ background-color: transparent;}
h1::webkit-selection,h2::webkit-selection,h3::webkit-selection,p::webkit-selection{ background-color: transparent;}

Другие ответы лучше; это, вероятно, следует рассматривать как последнее средство.

person r3wt    schedule 09.04.2014
comment
Есть несколько вещей, о которых можно узнать наверняка, но это решение определенно не работает во всех браузерах. - person Volker E.; 30.09.2014

Предположим, есть два таких div:

.second {
  cursor: default;
  user-select: none;
  -webkit-user-select: none;
  /* Chrome/Safari/Opera */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* Internet Explorer/Edge */
  -webkit-touch-callout: none;
  /* iOS Safari */
}
<div class="first">
  This is my first div
</div>

<div class="second">
  This is my second div
</div>

Установите курсор на значение по умолчанию, чтобы пользователь чувствовал, что его нельзя выбрать.

Префикс необходимо использовать для его поддержки во всех браузерах. Без префикса это может не работать во всех ответах.

person Gaurav Aggarwal    schedule 28.03.2016

Это будет полезно, если выбор цвета тоже не нужен:

::-moz-selection { background:none; color:none; }
::selection { background:none; color:none; }

... все остальные исправления в браузере. Он будет работать в Internet Explorer 9 или более поздней версии.

person karthipan raj    schedule 03.04.2013
comment
Сделать это color: inherit; возможно. - person Yaakov Ainspan; 28.07.2016
comment
да, мне это нравится. Это уровень селектора css 3 в соответствии с документами Mozilla. - person Bariq Dharmawan; 28.01.2018

Добавьте это в первый div, в котором вы хотите отключить выделение текста:

onmousedown='return false;' 
onselectstart='return false;'
person JIT1986    schedule 30.10.2012

ПРИМЕЧАНИЕ.

Правильный ответ верен в том смысле, что он мешает вам выделить текст. Однако это не мешает вам копировать текст, как я покажу на следующих нескольких снимках экрана (по состоянию на 7 ноября 2014 г.).

Прежде, чем мы что-либо выбрали

После того, как мы выбрали

Номера скопированы

Как видите, нам не удалось выбрать числа, но мы смогли их скопировать.

Проверено на: Ubuntu, Google Chrome 38.0.2125.111.

person Luke Madhanga    schedule 07.11.2014
comment
У меня была такая же проблема. В Mac Chrome 48.0.2564.116 и в Mac Safari 9.0.3. Примечательно, что Mac Firefox 43.0 не копирует символ, но вставляет между ними лишние конечные строки. Что с этим делать? - person NHDaly; 05.03.2016

Чтобы получить нужный мне результат, я обнаружил, что мне нужно использовать как ::selection, так и user-select.

input.no-select:focus {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

input.no-select::selection {
    background: transparent;
}

input.no-select::-moz-selection {
    background: transparent;
}
person SemanticZen    schedule 14.05.2015

Это легко сделать с помощью:

-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;

Альтернативно:

Допустим, у вас есть <h1 id="example">Hello, World!</h1>. Вам нужно будет удалить innerHTML этого h1, в данном случае Hello, World. Затем вам нужно будет перейти в CSS и сделать так:

#example::before // You can of course use **::after** as well.
{
    content: 'Hello, World!'; // Both single-quotes and double-quotes can be used here.

    display: block; // To make sure it works fine in every browser.
}

Теперь он просто думает, что это блочный элемент, а не текст.

person codeWithMe    schedule 08.11.2018

Это не CSS, но стоит упомянуть:

jQuery UI Disable Selection:

$("your.selector").disableSelection();
person Automatico    schedule 09.04.2013

Проверьте мое решение без JavaScript:

jsFiddle

li:hover {
    background-color: silver;
}
#id1:before {
    content: "File";
}
#id2:before {
    content: "Edit";
}
#id3:before {
    content: "View";
}
<ul>
    <li><a id="id1" href="www.w1.com"></a>
    <li><a id="id2" href="www.w2.com"></a>
    <li><a id="id3" href="www.w3.com"></a>
</ul>

Всплывающее меню с примененной моей техникой: http://jsfiddle.net/y4Lac/2/

person apocalypse    schedule 22.02.2014

Хотя этот псевдоэлемент был в черновиках CSS Selectors Level 3, он был удален на этапе рекомендации кандидата, поскольку оказалось, что его поведение было недостаточно определено, особенно с вложенными элементами, и совместимость не была достигнута.

Это обсуждается в разделе Как :: selection работает с вложенными элементы.

Несмотря на то, что это реализовано в браузерах, вы можете создать иллюзию того, что текст не выбран, используя тот же цвет и цвет фона при выборе, что и в дизайне вкладки (в вашем случае).

Нормальный дизайн CSS

p { color: white;  background: black; }

По выбору

p::-moz-selection { color: white;  background: black; }
p::selection      { color: white;  background: black; }

Запрет пользователям выбирать текст вызовет проблемы с удобством использования.

person Suraj Naik    schedule 21.03.2014
comment
Должно быть, поэтому автозаполнение Netbeans не понимает, о чем я говорю! - person halfer; 27.04.2014

Я узнал об этом на веб-сайте CSS-Tricks.

user-select: none;

И это также:

::selection {
    background-color: transparent;
}

::moz-selection {
    background-color: transparent;
}

::webkit-selection {
    background-color: transparent;
}
person Mohammed Javed    schedule 01.04.2016
comment
Это вообще не отключает выбор ... - person Tiago Rangel de Sousa; 29.06.2021
comment
Это только делает его невидимым - person Tiago Rangel de Sousa; 29.06.2021
comment
Но также, хорошее исследование! - person Tiago Rangel de Sousa; 29.06.2021

Если вы хотите отключить выделение и выделение для всей страницы, вы можете легко сделать это с помощью CSS:

* {
    -webkit-touch-callout: none; /* iOS Safari */
      -webkit-user-select: none; /* Safari */
       -khtml-user-select: none; /* Konqueror HTML */
         -moz-user-select: none; /* Firefox */
          -ms-user-select: none; /* Internet Explorer/Edge */
              user-select: none; /* Non-prefixed version, currently
                                    supported by Chrome and Opera */
}
person jasonleonhard    schedule 30.04.2018

Попробуйте использовать этот:

::selection {
    background: transparent;
}

И если вы хотите указать не выбирать внутри определенного элемента, просто поместите класс или идентификатор элемента перед правилом выбора, например:

.ClassNAME::selection {
    background: transparent;
}
#IdNAME::selection {
    background: transparent;
}
person mustafa-elhelbawy    schedule 20.01.2016
comment
Это не отключает выбор вообще ... Это только делает его невидимым - person Tiago Rangel de Sousa; 29.06.2021

Использовать:

-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
person Hetal Rupareliya    schedule 15.04.2016
comment
Пожалуйста, добавьте подробности о своем решении - person Tiago Rangel de Sousa; 29.06.2021

Этот эффект выделения возникает из-за действия под названием hover (onMouseHover).

Когда вы наведете курсор на любую вкладку, ее цвет изменится.

Скажите, например,

HTML код

<div class="menu">
    <ul class="effect">
        <li>Questions</li>
        <li>JOBS</li>
        <li>Users</li>
    </ul>
</div>

CSS код

.effect:hover {
    color: none;
}

Вы можете использовать любой цвет, если хотите, чтобы он был выделен. В противном случае вы можете использовать none.

person Pushp Singh    schedule 03.06.2016
comment
Нет, вы говорите о наведении курсора, то есть о наведении указателя мыши на текст. Это отличается от выделения текста. По умолчанию при наведении курсора нет цвета. - person Flyout91; 28.07.2017

Для этого вы можете использовать свойство *-user-select, как показано ниже ...

p {
    -webkit-user-select: none;  /* Chrome all and Safari all */
    -moz-user-select: none;     /* Firefox all */
    -ms-user-select: none;      /* Internet Explorer 10 and later */
    user-select: none;          /* Likely future */
}

Ссылка для подробного описания

person Chirag Dave    schedule 06.09.2016

user-select в настоящее время поддерживается во всех браузерах.


Это все доступные правильные варианты CSS:

.noselect {
  -webkit-user-select: none;    /* Safari */
  -webkit-touch-callout: none;  /* iOS Safari */
  -khtml-user-select: none;     /* Konqueror HTML */
  -ms-user-select: none;        /* Internet Explorer/Edge */
  -moz-user-select: none;       /* Old versions of Firefox */
   user-select: none;           /* Non-prefixed version*/
}
<p>
  Selectable
</p>

<p class="noselect">
  Unselectable
</p>


person Tharindu Lakshan    schedule 03.05.2021

Добавьте в свой CSS класс, который определяет, что вы не можете выбирать или выделять элемент. У меня есть пример:

<style> 
    .no_highlighting{
        user-select: none;
    }

    .anchor_without_decoration:hover{
        text-decoration-style: none;
    }
</style>

<a href="#" class="anchor_without_decoration no_highlighting">Anchor text</a>
person Santiago Cabrera    schedule 06.03.2020

С помощью CSS-

div {
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -o-user-select: none;

  "unselectable='on' onselectstart="return false;"
  onmousedown="return false;
}
<div>
  Blabla
  <br/> More Blabla
  <br/> More Blabla...
</div>

person Abrar Jahin    schedule 22.09.2018

Вы пробовали это?

.disableSelect{
    user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    -webkit-touch-callout: none;
    -o-user-select: none;
    -moz-user-select: none;

    pointer-events:none;
}
person Rajilesh Panoli    schedule 03.09.2020

Я объединил различные атрибуты выбора CSS браузера с невыбираемым тегом, необходимым для Internet Explorer ‹9.

<style>
[unselectable="on"] {
    -webkit-user-select: none; /* Safari */
    -moz-user-select: none; /* Firefox */
    -ms-user-select: none; /* Internet Explorer 10+/Edge */
    user-select: none; /* Standard */
}
</style>
<div unselectable="on">Unselectable Text</div>
person omikes    schedule 01.02.2018

Более того, вы можете отключить выделение текста.

Если вам нравится Sass (SCSS), и вы не хотите использовать Compass, вы можете сделать это:

styles.scss

@mixin user-select($select) {
    -webkit-touch-callout:#{$select};
    @each $pre in -webkit-, -moz-, -ms-, -o-, -khtml- {
        #{$pre + user-select}: #{$select};
    }
    #{user-select}: #{$select};
}

.no-select {
    @include user-select(none);
}
person Yevgeniy Afanasyev    schedule 31.01.2018

Решение для Internet Explorer на основе JavaScript:

onselectstart="return false;"

person Boleros    schedule 21.04.2020

Я вижу много подробных ответов, но считаю, что написания только этой строчки кода должно хватить для решения поставленной задачи:

*{
    -webkit-user-select: none;
 }
person Shubham Garg    schedule 10.07.2021

Возможно, вы сможете использовать это решение через :before:

nav li {
    display: inline-block;
    position: relative;
}

nav li a {
    display: inline-block;
    padding: 10px 20px;
}

nav li a:hover {
    color: red;
}

nav li.disabled:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
<nav>
    <ul>
    <li><a href="#">Link</a></li>
    <li class="disabled"><a href="#">Link</a></li>
    <li><a href="#">Link</a></li>
    </ul>
</nav>

JsFiddle - https://jsfiddle.net/grinmax_/9L1cckxu/

person grinmax    schedule 02.03.2017
comment
Это не ответ, вы все равно можете выделить текст. - person codeWithMe; 12.11.2018

Вы также можете запретить отображение контекстного меню при касании таких элементов, как кнопки, выбор которых запрещен. Для этого добавьте этот код на всю страницу или только на эти элементы кнопки:

$("body").on("contextmenu",function(e){
    return false;
});
person GeekyMonkey    schedule 27.08.2019

Правильное решение для CSS:

Есть ошибка без резолвера, поэтому мы можем ее использовать:

::-moz-selection {
}

::selection {
}

И вуаля, подсветки нет, но из-за ошибки или фичи?

Вот демонстрация, попробуй выделить текст !!!

person Qiqke    schedule 21.11.2019
comment
Я не понимаю, как это будет работать - демо позволяет мне свободно выбирать что угодно. - person Ian H.; 12.02.2021

Это может сработать

    ::selection {
        color: none;
        background: none;
    }
    /* For Mozilla Firefox */
    ::-moz-selection {
        color: none;
        background: none;
    }
person Murtaza JAFARI    schedule 17.01.2020
comment
При добавлении ответов на вопросы десятилетней давности к сорока четырем другим ответам планка выше. В вашем ответе полезно указать, какой новый аспект вопроса касается вашего ответа, и как с течением времени появление новых технологий повлияло на ответ. Ответ также должен объяснить, как и что делает код. - person Jason Aller; 17.01.2020

person    schedule
comment
Не могли бы вы объяснить, что вы имеете в виду под этим? Как это улучшает другие ответы, получившие большое количество голосов? - person Nico Haase; 31.10.2018
comment
Это не отключает выделение текста, все, что он делает, это скрывает его для пользователя. Сам компьютер по-прежнему знает, что его выбирают, цвет фона просто прозрачный. Но если вы нажмете ctr (cmd на Mac) + A, а затем скопируете, вы можете вставить текст в другое место. - person codeWithMe; 20.11.2018
comment
Объяснение было бы в порядке. - person Peter Mortensen; 10.05.2019
comment
Помогло мне с html-страницей на iPad! Спасибо! - person Alekzander; 29.06.2019

person    schedule
comment
Привет и добро пожаловать в stackoverflow, и спасибо за ваш ответ. Вместо того, чтобы просто публиковать блок кода, можете ли вы кратко объяснить, какую проблему вы решили и как вы ее решили? Это поможет людям, которые столкнутся с этим вопросом в будущем, лучше понять проблему и способы ее решения. - person Plutian; 06.12.2019
comment
OP спросил, есть ли для этого хорошее решение CSS, а не javascript. - person Julio Vedovatto; 22.01.2020