2009-05-29 7 views
112

Вот интересные вопросы CSS для вас!Есть ли способ сделать DIV недоступным?

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

+0

Вы были бы счастливы с решением javascript? – joshcomley

ответ

8

вы можете попробовать это:

<div onselectstart="return false">your text</div> 
+0

До сих пор можно выбрать с двойным щелчком. – ceving

5

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

+0

прозрачный 1x1 png должен работать, да –

+1

Ну, я скорее имел в виду водяной знак, но прозрачное фоновое изображение могло бы работать. Также вы не должны плитку очень маленьких изображений, так как некоторые браузеры становятся в этом случае ужасно медленными :) – Joey

+0

Тем более, что прозрачный png (или gif) 1000x1000 - всего 4kb. –

153

Я написал простое расширение jQuery для отключения выбора некоторое время назад: Disabling Selection in jQuery. Вы можете вызвать его через $('.button').disableSelection();

С другой стороны, с помощью CSS (кросс-браузер):

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

отлично работает! user-select недействителен css. –

+0

@kasperTaeymans благодарит за это. обновил фрагмент. – aleemb

+0

Большое спасибо ... это сработало очень хорошо. – YAM

22

Как Johannes уже предложил, фон-изображение прочертовский лучший способ добиться этого в 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); 

Rich

+0

'onselectstart' не будет работать для FF или Opera. –

3

WebKit браузеров (например Google Chrome и Safari) имеют CSS решение, похожее на Mozilla, -moz-пользователь-выберите: не имеет

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

Следующий код CSS работает почти в современном браузере:

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

Для IE вы должны использовать JS или атрибут insert в теге html.

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

Какова цель 'unselectable =" on ". Можете ли вы дать ссылку, пожалуйста, – Medorator

+3

Я нашел здесь: http://msdn.microsoft.com/en-us/library/hh801966(v=vs.85).aspx Но я действительно тестировал на IE, и он работает правильно. – KimKha

+1

Это недопустимо HTML –

2

Также в IOS, если вы хотите избавиться от серых полупрозрачных наложений появляются ontouch, добавьте CSS:

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

Не работает приятель. – 2014-06-06 21:07:43

30

Просто обновление оригинальный, столь upvoted ответ 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-касании:
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'; 
+0

Огромное спасибо. – kwoxer

+1

Я также добавляю «указатель-события: нет» на все. – Kokodoko

+0

применение 'user-select: none' к' div' не имеет никакого эффекта. я уверен, что 'user-select' предназначен только для текста. есть ли какие-либо другие способы сделать «div» неприемлемым? – Anthony

4

Вы можете использовать pointer-events: none; в вашем CSS

div { 
    pointer-events: none; 
} 
0

Использование

onselectstart = "return false"

это предотвращает копирование вашего контента.

+3

Это решение было опубликовано другими пользователями. – dazedconfused

0

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

0

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

Смежные вопросы