2010-09-23 2 views
188

Можно создать дубликат:
CSS rule to disable text selection highlightingКак отключить выбор текста с помощью CSS или JavaScript?

Я делаю HTML/CSS/JQuery галереи, с несколькими страницами.

У меня действительно есть «следующая» кнопка, которая представляет собой простую связь с прослушивателем jQuery.

Проблема в том, что если пользователь несколько раз нажимает кнопку, выбирается текст кнопки, а затем полная строка текста. В моем действительно мрачном дизайне это действительно уродливо и бессмысленно.

Итак, вот мой вопрос: Можете ли вы отключить выбор текста в HTML? Если нет, то я буду очень мисс вспышки и ее высокий уровень конфигурации на TextFields ...

ответ

255
<div 
style="-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;"> 
    Blabla 
</div> 
+0

Все еще не работают в сафари и хром. Я держу это решение, но я также реализую одну работу для остальных: при каждом нажатии, замените html ссылки на html ссылки. текст затем обновляется, и выбор удаляется через 1 половину секунды! – daviddarx

+1

CSS для webkit похож на тот, который был для Firefox, я отредактировал ответ, чтобы добавить его. – Jerome

+1

@ daviddarx Работает в Chrome 17 и Safari 5. – mhenry1384

4

Я не уверен, если вы можете отключить его, но вы можете изменить цвета него :)

myDiv::selection, 
myDiv::-moz-selection, 
myDiv::-webkit-selection { 
    background:#000; 
    color:#fff; 
} 

Тогда просто соответствуют цветам на ваш «черномазый» дизайн и посмотреть, что происходит :)

+1

Вы можете сжать это в одно правило CSS. myDiv.webkit :: - webkit-selection, myDiv.moz :: - moz-selection, myDiv.normal :: selection { background: # 000; цвет: #fff; } – Yahel

+0

@yc: используйте множественный селектор, я отредактирую, спасибо :) – Kyle

+0

#galleryPagesNavigation a.normal :: selection { \t \t background: # 000; \t} \t #galleryPagesNavigation a.moz :: - Мос-селекции { \t \t фон: # 000; \t} \t #galleryPagesNavigation a.webkit :: - WebKit выбора { \t фон: # 000; \t} – daviddarx

7

вы можете использовать JavaScript, чтобы сделать то, что вы хотите:


if (document.addEventListener !== undefined) { 
    // Not IE 
    document.addEventListener('click', checkSelection, false); 
} else { 
    // IE 
    document.attachEvent('onclick', checkSelection); 
} 

function checkSelection() { 
    var sel = {}; 
    if (window.getSelection) { 
     // Mozilla 
     sel = window.getSelection(); 
    } else if (document.selection) { 
     // IE 
     sel = document.selection.createRange(); 
    } 

    // Mozilla 
    if (sel.rangeCount) { 
     sel.removeAllRanges(); 
     return; 
    } 

    // IE 
    if (sel.text > '') { 
     document.selection.empty(); 
     return; 
    } 
} 

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

+22

** Мыльная коробка опровержения **: У меня есть кнопка, которая при нажатии на нее запускает некоторый javascript, чтобы изменить масштаб изображения. В этой кнопке нет причин для выбора «+» или «-», но большинство веб-браузеров в конечном итоге получит текст, выбранный после нескольких щелчков мышью. Точно так же, если вы делаете перетаскивание через javascript, вы не хотите выбирать то, что вы что-то перетаскиваете. Тем не менее, я ценю тот факт, что вы все еще ответили на этот вопрос, даже если не согласны с целью. – Robert

+2

Я соглашусь с тем, что существуют обстоятельства, когда это может быть правильный выбор дизайна. Но вопрос в том, что он пропустил Flash, подразумевая, что он пропустит возможность управлять клиентом пользователя. Я не согласен с этим мышлением. Как пользователь, мне не нравится переопределение сайта, как работает мое локальное программное обеспечение. Это также проблема доступности. –

+1

@jsumners Есть множество обстоятельств. Сделайте некоторые из готовых идей, и вы придумаете несколько сценариев. Просто потому, что браузеры разрешают это по умолчанию, это не значит, что мы, как программисты, должны соответствовать. Кроме того, мобильные вычисления устраняют традиционные средства выбора текста. Так что это становится все более актуальным. Вы говорите, что это какой-то устаревший хак или что-то в этом роде, это функция, поддерживаемая __. (см. Ответы выше.) –

25

Попробуйте этот код CSS для кросс-браузерной совместимости.

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

UPDATE января 2017 года:

Согласно Can I use, то 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; /* Firefox */ 
 
     -ms-user-select: none; /* Internet Explorer/Edge */ 
 
      user-select: none; /* Non-prefixed version, currently 
 
            supported by Chrome and Opera */ 
 
}
<p> 
 
    Selectable text. 
 
</p> 
 
<p class="noselect"> 
 
    Unselectable text. 
 
</p>


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


Более подробную информацию можно найти в Mozilla Developer Network documentation.

+8

«правильные вариации CSS» ...? Единственное правильное «вариация CSS» - это «пользовательский выбор». – BoltClock

+14

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

+3

Ха-ха, планируете ли вы заработать все свои репы с таким же ответом? NICE :) – Starx

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