Як відключити виділення тексту виділенням тексту


5200

Для якорів, які діють як кнопки (наприклад, Питання , Теги , Користувачі тощо вгорі сторінки переповнення стека) або вкладки, чи існує стандартний спосіб CSS для відключення ефекту виділення, якщо користувач випадково вибирає текст?

Я усвідомлюю, що це можна зробити за допомогою JavaScript, і трохи гуглінг дав -moz-user-selectваріант лише для Mozilla .

Чи існує стандартний спосіб досягти цього за допомогою CSS, а якщо ні, то який підхід "найкращої практики"?


7
Чи можуть елементи в елементі відьми виділити підсвічування, увімкнено підсвічування за допомогою css у атрибуті стилю чи класу? або іншими словами, чи є інші значення для -webkit-user-select ect. крім просто жодного?

7
Пов'язане: stackoverflow.com/questions/16600479/… = як дозволити вибирати лише деякі дочірні елементи
JK.

9
У деяких браузерах з'являється помилка, де "Вибрати все" (CTRL + A і CMD + A) все ще вибирає речі. З цим можна боротися з прозорим кольором вибору: ::selection { background: transparent; } ::-moz-selection { background: transparent; }
DaAwesomeP

12
Чи можу я просто сказати: будь ласка, не робіть цього. Зі свого досвіду я найчастіше фактично хочу вибрати якийсь текст, який також слугує кнопкою, скопіювати і вставити його деінде. Було б немислимо неприємно не робити цього, тому що якийсь веб-розробник пішов зі свого шляху, щоб цілком відключити цю функцію для мене. Тому, будь ласка, не робіть цього, якщо у вас немає дуже, дуже вагомих причин.
kajacx

3
У 2017 році, це кращий спосіб використовувати postcssі autoprefixerі набір версії браузера, потім postcssзробити все круто.
AmerllicA

Відповіді:


7320

ОНОВЛЕННЯ січня 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 .


38
приємний код molokoloco: D, хоча особисто я б утримався від його використання, оскільки іноді вам можуть знадобитися різні значення для різних браузерів, і він покладається на JavaScript. Створення класу та додавання його до вашого елемента або застосування css до типу вашого елемента у вашому аркуші стилів - це досить непогано.
Blowsie

58
'user-select'- Значення: немає | текст | перемикання | елемент | елементи | всі | успадкувати - w3.org/TR/2000/WD-css3-userint-20000216
Blowsie

34
Власне, вибір користувача не реалізований в Opera. Натомість він реалізує невибірний атрибут IE.
Tim Down

30
З якоїсь причини, це одне не працювало в IE8, я потім додав <div onselectstart="return false;">до свого головного діла.
робаста

306
це смішно! так багато різних способів зробити те саме. давайте зробимо новий стандарт для вибору користувачів. ми це назвемо 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;. ах, набагато краще.
Клавдіу

854

У більшості браузерів цього можна досягти за допомогою власних варіантів user-selectвластивості CSS , спочатку запропонованих та потім відмовлених у 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) все ще неможливо запобігти вибору, які починаються до та закінчуються після не виділеного елемента, не роблячи весь документ невибірним.


30
ви повинні вилучити селектор * зі свого прикладу, його дійсно неефективний, і чи справді немає необхідності використовувати його у вашому прикладі?
Blowsie

66
@ Blowsie: Я не вважаю так: специфікація CSS 2 стверджує, що *.fooі .fooточно еквівалентна (у другому випадку універсальний селектор ( *) мається на увазі), тому забороняючи переглядаючи браузер, я не можу побачити, що в тому числі *буде шкодити виконання. У мене є давня звичка включати те *, що я спочатку почав робити для читабельності: воно прямо поглядає, що автор має намір узгодити всі елементи.
Тім Даун

38
oooh після деякого подальшого читання, здається * є лише недоцільним при використанні його як ключа (найправильнішого селектора), тобто .unselectable *. Більше інформації тут code.google.com/speed/page-speed/docs/…
Blowsie

20
Замість використання class = "unselectable", просто використовуйте перемикач атрибутів [unselectable = "on"] {…}
Кріс Кало,

13
@Francisc: Ні. Як я вже говорив Blowsie раніше в коментарях, це абсолютно не має різниці.
Тім Даун

196

Рішенням JavaScript для Internet Explorer є:

onselectstart="return false;"

55
Не забувайте про це ondragstart!
Матіас Байненс

9
ще одна річ тут. Якщо ви додасте це до тіла, ви не зможете вибрати текст у текстових областях чи полях введення в IE. Те, як я зафіксував це для IE. body.onselectstart = function(e) { if (e.target.nodeName != "INPUT" && e.target.nodeName != "TEXTAREA") { e.preventDefault(); return false; } return true; }
TheBrain

2
Це можна додати як атрибут за допомогою jQuery - $ ("p"). Attr ("onselectstart", "return false") Це був єдиний для мене надійний метод в IE8
Метт

13
@Abudayah, оскільки вони не працюють у старих версіях Internet Explorer? Ось, наче, вся суть цієї відповіді.
Pekka

?? Я все одно завжди можу вибрати inputелементи в елементах, навіть якщо я використовую user-select: none. Мені потрібно знати, як запобігти цьому
oldboy

191

Поки властивість вибору користувача CSS 3 не стане доступною, браузери на базі Gecko підтримують -moz-user-selectресурс, який ви вже знайшли. Веб -браузери та веб-переглядачі підтримують -webkit-user-selectвластивість.

Звичайно, це не підтримується в браузерах, які не використовують механізм візуалізації Gecko.

Не існує швидкого і простого способу, який би відповідав "стандартам"; використання JavaScript - це варіант.

Справжнє запитання полягає в тому, чому ви хочете, щоб користувачі не мали змоги виділити та імовірно копіювати та вставляти певні елементи? Я жодного разу не стикався з тим, що хотів не дозволяти користувачам виділяти певну частину мого веб-сайту. Декілька моїх друзів, витративши багато годин на читання та написання коду, використовуватимуть функцію виділення як спосіб запам'ятати, де вони знаходяться на сторінці, або надати маркер, щоб їх очі знали, де шукати далі.

Єдине місце, де я міг би вважати це корисним, це якщо у вас є кнопки для форм, які не слід копіювати та вставляти, якщо користувач копіює та вставляє веб-сайт.


20
Річ із кнопками була б саме моєю мотивацією.
Kriem

27
Ще однією причиною цього є натискання клавіші Shift, щоб вибрати декілька рядків у сітці або таблиці. Ви не хочете виділяти текст, ви хочете, щоб він обрав рядки.
Гордон Такер

7
Існують також правові проблеми, коли чужий вміст легально публікується, але застереження про ліцензію вимагають від веб-видавців запобігати легкому копіюванню та вставці тексту. Саме це і підштовхнуло мене до цього питання. Я не згоден з цією вимогою, але компанія, з якою я укладаю контракти, юридично зобов'язана виконати її таким чином.
Крейг М

5
@CraigM Стиль css не перешкоджає людині захоплювати джерело HTML та копіювати його. Якщо ви хочете захистити свій вміст, вам доведеться знайти кращі способи.
Agile Jedi

27
Високоінтерактивний веб-додаток з великою кількістю перетягування ... випадкове виділення - велика проблема використання.
Марк Хьюз

138

Якщо ви хочете відключити вибір тексту для всього, крім <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;
}

12
Переконайтесь, що ви також робите поля введення: p, input { -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -o-user-select: text; user-select: text; }
joshuadelange

11
Будьте дуже обережні щодо вимкнення очікувань користувальницького інтерфейсу на ВСІЙ код, за винятком одного елемента. Що стосується, наприклад, елементів списку <li /> тексту?
Jason T Featheringham

Просто оновлення ... згідно MDN з Firefox 21 -moz-noneі noneте саме.
Кевін Феган

2
Для цього ви можете додати курсор: за замовчуванням і курсор: текст відповідно
:)

Бомба. Інакше кажучи. КІНЕЦЬ. ul>* { -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: -moz-none; -o-user-select: none; user-select: none; }[вибирає все у невпорядкованому списку та робить його невибірним, а не руйнуючи все дерево перегляду.] Дякую за урок. Мій список кнопок виглядає чудово і правильно реагує на натискання екрана та натискання, а не запускає IME (віджети буфера обміну Android).
Hypersoft Systems

125

У рішеннях попередніх відповідей вибір зупиняється, але користувач все ще думає, що ви можете вибрати текст, оскільки курсор все ще змінюється. Щоб зберегти статичність, вам доведеться встановити свій курсор 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>

Це зробить ваш текст абсолютно рівним, як це було б у настільному додатку.


"Квартира" на відміну від чого?
kojow7

@ kojow7 На відміну від "шаруватого". Замість тексту плаваючий поверх інших елементів. Це схоже на різницю між зображеннями SVG та PNG.
Єті

4
З подивом виявив, що Firefox все ще вимагає префікса постачальника в 2019 році. Я зневажливо використовував лише user-select: none;, думаючи, що стандарт уже прийнятий, але, на жаль, це не так. Змушує вас замислитися над тим, про що ще можуть обговорити люди в комітеті зі стандартів. "Ні, ви, хлопці ... я дійсно думаю, що це має бути, user-select: cant;тому що це як описовіше, ви знаєте?" "Ми закінчили це, Майк. Нам доведеться опустити апостроф, і це погана форма!" "Досить, всі! Ми обговоримо цю справу ще раз наступного місяця. Засідання Комітету з стандартів відкладено!"
Менталіст

109

Це можна зробити в Firefox та Safari (Chrome також?)

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

121
Я б не рекомендував робити це, оскільки це насправді не вирішує проблему; відключення вибору тексту - це просто приховує його. Це може призвести до поганої зручності використання, тому що якщо я перетягую курсор по сторінці, я міг би вибирати будь-який довільний текст, не знаючи цього. Це може викликати всілякі дивні зручності в користуванні.
Кейтамус

1
Не працює на PNG-зображеннях з прозорими ділянками. Вибір завжди буде світло-синім ... Будь-яке вирішення?
АвЛ

80

Тимчасове рішення для WebKit :

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

Я знайшов це на прикладі CardFlip.


1
Використання transparentзамість rgba також працює в Chrome 42 на Android.
Клінт Пахл

77

Мені подобається гібридне рішення 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()псевдоселектор. '*'Натомість ви можете використовувати, якщо вам все одно.

Caveat: Internet Explorer 9 може не потребувати цього додаткового фрагмента jQuery, тому ви можете додати там перевірку версії.


5
Використовуйте -ms-user-select: немає; (для IE10) і jQuery "якщо" має бути таким: якщо (($ .browser.msie && $ .browser.version <10) || $ .browser.opera)
mhenry1384

Будь обережна людина !!! Щоб зробити його обраним у Firefox, ви повинні використовувати-moz-user-select: Normal;
Nicolas Thery

7
@ mhenry1384 jQuery.browserзастаріло з версії 1.3 і було видалено у версії 1.9 - api.jquery.com/jQuery.browser
WynandB

@Wynand Добре. Але який тип "виявлення функцій" існує, щоб визначити, яку властивість CSS використовувати?
Том Ожер

@TomAuger Ви можете скористатися jQuery.support, вона дозволяє перевірити окремі функції: Посилання
Aequanox

69

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

Це не найкращий спосіб.


3
Ви також можете використовувати titleяк атрибут.
Зубна щітка

6
Це дуже творче рішення. Особливо, якщо він використовував атрибут заголовка, оскільки це, мабуть, було б краще для читачів екрану.
псевдосавант

4
Я спробував це ( JSBin ), і він не працює в IE. На жаль, старші ІЕ - це єдині, для яких user-selectце не працює.
псевдосавант

1
Це чудова альтернатива, яка не є JS, яка працює в Chrome! Дивовижно!
зарікден

чудова! ......
Самотня

69

Для цього можна використовувати 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>


59

Крім того, для Internet Explorer потрібно додати псевдокласfocus (.ClassName: фокус) та 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  */
}

3
Це працює в IE до тих пір, поки відбір починається з елемента з classNameкласом. Дивіться це JSBin .
псевдосавант

57

Спробуйте вставити ці рядки в CSS та зателефонуйте "disHighlight" у властивості класу:

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

51

Швидке оновлення злому

Якщо ви використовуєте значення noneдля всіх user-selectвластивостей CSS (включаючи префікси браузера), існує проблема, яка все-таки може виникнути через це.

.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  */
}

48

Для тих, хто має проблеми з досягненням того ж самого в браузері 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;
}


46
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;

*.unselectable {
   -moz-user-select: -moz-none;
   -khtml-user-select: none;
   -webkit-user-select: none;
   user-select: none;
}
<div id="foo" unselectable="on" class="unselectable">...</div>
function makeUnselectable(node) {
    if (node.nodeType == 1) {
        node.unselectable = true;
    }
    var child = node.firstChild;
    while (child) {
        makeUnselectable(child);
        child = child.nextSibling;
    }
}

makeUnselectable(document.getElementById("foo"));
-webkit-user-select: none;
-moz-user-select: none;
onselectstart="return false;"
::selection { 
    background: transparent; 
}

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

* {
    -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;
}
<div class="draggable"></div>
.draggable {
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-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;
 }
if ($.browser.msie)
    $('.draggable').find(':not(input)').attr('unselectable', 'on');

46

Робочий

CSS:

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

Це має працювати, але це не працюватиме для старих браузерів. Виникає проблема сумісності браузера.


Нефіксований властивість CSS повинен бути суворо в кінці списку попередньо встановлених версій властивості. Це хороша правильна практика, інша - погана практика створення "нового IE" з Chrome / Webkit і приведення до стільки UGLY THINGS, як введення підтримки -webkit з префіксом у веб-браузерах, які не переглядають webkit. Подивіться, це було вже у 2012 році: dev.opera.com/articles/…
FlameStorm

І я цитую: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.
FlameStorm

42

За допомогою 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 .

Якщо ви використовуєте автопрефіксатор, ви можете видалити інші префікси.

Тут сумісність браузера .


36

Окрім властивості лише для Mozilla, немає, немає можливості відключити вибір тексту за допомогою лише стандартного CSS (на даний момент).

Якщо ви помітили, переповнення стека не вимикає вибір тексту для їх навігаційних кнопок, і я б рекомендував не робити цього в більшості випадків, оскільки це змінює нормальну поведінку вибору та змушує суперечити очікуванням користувача.


Хоча я погоджуюся, що це змінює поведінку, яку очікує користувач, було б сенс для таких речей, як кнопка "Додати коментар", яка сидить поруч із цим полем форми ...
X-Istence

Але чи не це виявляє непотрібних деталей щодо впровадження? Не вдається вибрати текст вводу чи кнопки.

@anon: Більшість користувачів, ймовірно, не намагаються вибрати текст вашої кнопки, тому на практиці це насправді не має великого значення. Крім того, для цього їм доведеться почати вибирати поза кнопкою - якщо натиснути всередині самої кнопки, замість цього активується обробник onclick. Крім того, деякі веб-переглядачі (наприклад, Safari) фактично дозволяють вибрати текст звичайних кнопок…
hbw

6
Якщо ви вибираєте набір коментарів із потоку чату, а кожен коментар поруч із ним має кнопку зворотного або нижчого голосування, тоді було б непогано вибрати текст без інших матеріалів. Ось що очікує або хоче користувач. Він не хоче копіювати / вставляти мітки кнопок з кожним коментарем.
Mnebuerquo

2
А що робити, якщо ви, наприклад, двічі клацніть кнопку, яка замість того, щоб перенаправити вас на іншу сторінку, відкриє поділ? тоді текст для кнопки буде обраний завдяки подвійному клацанню!
Gigala

34

Це працює в деяких браузерах:

::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;}

Інші відповіді кращі; це, мабуть, слід розглядати як крайній засіб / вигул.


3
Є кілька речей, про які можна точно знати, але це рішення точно не працює у всіх браузерах.
Волкер Е.

33

Припустимо, є два 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>

Встановіть курсор за замовчуванням, щоб він давав користувачеві невідбірне відчуття.

Для його підтримки у всіх браузерах потрібно використовувати префікс. Без префікса це може не працювати у всіх відповідях.


30

Це стане в нагоді, якщо підбір кольору також не потрібен:

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

... всі інші виправлення браузера. Він буде працювати в Internet Explorer 9 або новішої версії.


1
Зробити це color: inherit;можливо.
Яков Айнспан

так, я люблю це Це селектор css рівня 3 за документами Mozilla
Bariq Dharmawan

29

Додайте це до першого div, у якому ви хочете відключити виділення для тексту:

onmousedown='return false;' 
onselectstart='return false;'

28

ПРИМІТКА:

Правильна відповідь правильна тим, що вона не дозволяє вам вибрати текст. Однак це не заважає вам скопіювати текст, як я покажу з наступними парами скріншотів (станом на 7 листопада 2014 року).

Перш ніж ми щось вибрали

Після того, як ми відібрали

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

Як бачите, нам не вдалося вибрати номери, але ми змогли їх скопіювати.

Тестовано на: Ubuntu , Google Chrome 38.0.2125.111.


1
У мене була така ж проблема. На Mac Chrome 48.0.2564.116 та на Mac Safari 9.0.3. Зокрема, Mac Firefox 43.0 не копіює персонаж, але проклеює додаткові кінцеві лінії між ними. Що з цим слід зробити?
NHDaly

26

Щоб отримати потрібний мені результат, я виявив, що треба використовувати і те, ::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;
}

finalyyyyyyy відповідь, яка працює
oldboy

23

Це легко зробити за допомогою:

-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>. Вам доведеться видалити внутрішнійHTML цього 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.
}

Тепер він просто думає, що це блок-елемент, а не текст.



21

Перевірте моє рішення без 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/


21

Хоча цей псевдоелемент був у чернетках CSS Selectors Level 3, його було вилучено під час фази рекомендації щодо кандидата, оскільки виявилося, що його поведінка була недостатньо визначеною, особливо з вкладеними елементами, і сумісність не була досягнута.

Це обговорюється в розділі Як :: вибір працює над вкладеними елементами .

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

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

p { color: white;  background: black; }

На відбір

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

Якщо заборона користувачам вибирати текст, це призведе до проблем використання.


Це повинно бути причиною автоматичного завершення Netbeans поняття, про що я говорю!
півзахисник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.