Чи є спосіб зробити DIV невідбірним?


140

Ось цікаві питання CSS для вас!

У мене є текстова область з прозорим фоном, накриваючи деякий ТЕКСТ, який я хотів би використовувати як своєрідний водяний знак. Текст великий і займає більшість текстових областей. Це виглядає приємно, проблема полягає в тому, що користувач натискає текстову область, а іноді вибирає текст водного знака. Я хочу, щоб текст водяного знаку ніколи не був обраний. Я очікував, що якщо щось нижче в z-індексі, це не буде вибір, але браузери, здається, не дбають про шари z-індексу під час вибору елементів. Чи є хитрість чи спосіб зробити так, щоб цей DIV ніколи не вибирався?


Чи були б ви задоволені рішенням javascript?
joshcomley

Відповіді:


203

Я написав просте розширення jQuery, щоб відключити вибір на деякий час назад: відключення вибору в jQuery . Ви можете викликати це через$('.button').disableSelection();

Крім того, використовуючи CSS (крос-браузер):

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

@kasperTaeymans дякую, що вказали на це. оновлено фрагмент.
aleemb

@kasperTaeymans Але він є в робочому проекті W3C ... Я б включив його про всяк випадок.
Каміло Мартін

2
Не відривати нічого від оригінальної відповіді, яку я закликав, але це вже 3 роки. Тому я додав відповідь нижче ( stackoverflow.com/questions/924916/… ) із доданими налаштуваннями сенсорного інтерфейсу.
Енн Ганн

Ось що я хотів для рухомого модального заголовка завантажувача! Дякую!
розробник

62

Наступний CSS-код працює майже в сучасному браузері:

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

Для IE ви повинні використовувати JS або вставити атрибут у html-тег.

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

Яка мета unselectable="on". Ви можете дати посилання, будь ласка
користувач

4
Я знайшов тут: msdn.microsoft.com/en-us/library/hh801966(v=vs.85).aspx Але я насправді тестував на IE, і він працює правильно.
Кімха

1
Я не впевнений. Але <code> unselectable = "on" </code> може бути включений в IE, і валідатор W3C не приймає цей атрибут.
Кімха

Хоча він працює в сучасних браузерах, W3C ще не вказаний.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

41

Тільки оновлення оригінальної, значно підкріпленої відповіді aleemb з кількома доповненнями до css.

Ми використовували наступне комбо:

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

Ми отримали пропозицію додати запис webkit-touch від:
http://phonegap-tips.com/articles/essential-phonegap-css-webkit-touch-callout.html

Квітень 2015: Просто оновлення власної відповіді варіацією, яка може стати в нагоді. Якщо вам потрібно зробити DIV вибиральним / невибірним на ходу та готові використовувати Modernizr , наступне працює акуратно у javascript:

    var userSelectProp = Modernizr.prefixed('userSelect');
    var specialDiv = document.querySelector('#specialDiv');
    specialDiv.style[userSelectProp] = 'none';

застосовування user-select: noneдо a divне має жодного ефекту. Я впевнений, що user-selectце стосується лише тексту. чи є інші способи зробити divневибірливим?
oldboy

22

Як уже запропонував Йоганнес, фонове зображення є найкращим способом досягти цього лише в CSS.

Рішення JavaScript також повинно вплинути на "dragstart", щоб він був ефективним у всіх популярних браузерах.

JavaScript:

<div onselectstart="return false;" ondragstart="return false;">your text</div>

jQuery:

var _preventDefault = function(evt) { evt.preventDefault(); };
$("div").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);

Багатий




6

Хіба не вистачить простого фонового зображення для текстової області?


1
Ну, я швидше мав на увазі водяний знак, але прозорий фонове зображення також може працювати. Крім того, вам не слід наклеювати дуже маленькі зображення, оскільки деякі браузери в такому випадку надмірно повільні :)
Joey

Тим більше, що прозорий png (або gif) 1000x1000 становить лише 4 кбіт.
Райан Флоренція

Насправді більше 1 Кб, насправді :-)
Joey

4

Веб-браузери WebKit (тобто Google Chrome і Safari) мають CSS-рішення, схоже на Mozilla -moz-user-select: none

.no-select{    
    -webkit-user-select: none;
    cursor:not-allowed; /*makes it even more obvious*/
}

2

Також в IOS, якщо ви хочете позбутися сірих напівпрозорих накладок, що з’являються на дотик, додайте css:

-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-touch-callout: none;


-1

Переконайтесь, що ви встановили позицію явно як абсолютну або відносну для z-індексу для роботи для вибору. У мене було подібне питання, і це вирішило це для мене.


-2

Не впевнений у вашому випадку використання, але ви можете зробити його перетягувальним.


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