DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Die CSS-Eigenschaft user-select steuert, wie Text in einem Element ausgewählt werden darf. Zum Beispiel kann sie verwendet werden, um Text nicht auswählbar zu machen.
.row-of-icons {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}
Dies ist nützlich in Situationen, in denen Sie eine einfachere/sauberere Kopieren-und-Einfügen-Erfahrung für Benutzer bieten möchten (um zu vermeiden, dass sie versehentlich nutzlose Dinge wie Symbole oder Bilder auswählen). Allerdings ist sie etwas fehlerhaft. Firefox erzwingt, dass jeglicher Text, der auf diesen Selektor passt, nicht kopiert werden kann. WebKit erlaubt immer noch das Kopieren des Textes, wenn Sie Elemente darum herum auswählen.
Sie können dies auch verwenden, um zu erzwingen, dass ein gesamtes Element ausgewählt wird
.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 */
}
Hier sind einige Demos davon
Siehe den Stift user-select demo von Chris Coyier (@chriscoyier) auf CodePen.
Für diese Eigenschaft gab es eine ganze Weile keine Spezifikation, aber jetzt ist sie unter CSS Basic User Interface Module Level 4 abgedeckt.
Der Standardwert ist auto, was die Auswahl normal wie erwartet ermöglicht. "Normal" ist etwas kompliziert. Es lohnt sich, hier aus der Spezifikation zu zitieren:
- Auf den Pseudo-Elementen ::before und ::after ist der berechnete Wert
none- Wenn das Element ein **editierbares Element** ist, ist der berechnete Wert
contain- Andernfalls, wenn der berechnete Wert von user-select auf dem Elternteil dieses Elements
allist, ist der berechnete Wertall- Andernfalls, wenn der berechnete Wert von user-select auf dem Elternteil dieses Elements
noneist, ist der berechnete Wertnone- Andernfalls ist der berechnete Wert
text
Mit anderen Worten, es kaskadiert intelligent und setzt sich in einen sinnvollen Zustand zurück. Es scheint, *vielleicht* könnte diese Funktion verwendet werden, um Pseudo-Elemente auswählbar zu machen, aber es gibt noch kein endgültiges Wort dazu.
Ältere/Proprietäre
Firefox unterstützt -moz-none, was wie none ist, nur dass es bedeutet, dass Unterelemente die Kaskade überschreiben und mit -moz-user-select: text; wieder auswählbar werden können. Seit Firefox 21 verhält sich none wie -moz-none.
Internet Explorer unterstützt ebenfalls einen bisher proprietären Wert, element, bei dem Sie Text innerhalb des Elements auswählen können, die Auswahl aber an den Grenzen dieses Elements stoppt.
Weitere Informationen
Browser-Unterstützung
Dies ist speziell für -*-user-select: none;
Diese Browser-Supportdaten stammen von Caniuse, wo es weitere Details gibt. Eine Zahl zeigt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 4* | 2* | 10* | 12* | 3.1* |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 2.1* | 3.2* |
Leider scheint es bei Android-Geräten nicht zu funktionieren... Irgendwelche Ratschläge?
Hallo, haben Sie die Lösung für das Android-Problem gefunden?
Es scheint, dass es mit dem Gerät zusammenhängt, da ich es auf einem Samsung Galaxy Note 2 ausprobiert habe und das Problem dort nicht auftrat. Auf Asus und Samsung Galaxy Tab Note 2 ist das Problem jedoch vorhanden.
Mit freundlichen Grüßen.
Ein seltsames Verhalten festgestellt: Es verhindert, dass Eingabefelder Text erhalten...
Es scheint, dass "user-select:none" im Android Browser vor Version 4.1 nicht funktioniert.
Aber ich habe keinen offiziellen Beweis dafür gefunden.
Ich habe dieses Beispiel http://jsfiddle.net/u88wbh10/4/ in verschiedenen Versionen des Android Browsers getestet
Samsung Mobilgerät mit Android OS 4.1.2 – funktioniert.
SE Xperia Mobilgerät mit Android OS 4.0.4 – funktioniert nicht.
Beide Android-Versionen haben die gleiche integrierte Webkit-Version.
Es gibt mehrere Threads auf Stackoverflow, die auf dieses Problem hinweisen. Zum Beispiel: http://stackoverflow.com/questions/5107651/android-disable-text-selection-in-a-webview
Obwohl MDN & canisue.com die Unterstützung für "user-select" ab Android 2.1 zeigen
https://developer.mozilla.org/en-US/docs/Web/CSS/user-select#Browser_compatibility
http://caniuse.com/#search=user-select
Hat jemand das gleiche Problem erlebt?
Aber Sie können pointer-events: none verwenden.
Die pointer-events-Eigenschaft ermöglicht die Kontrolle darüber, wie HTML-Elemente auf Maus-/Touch-Ereignisse reagieren – einschließlich CSS-Hover-/Aktiv-Zuständen, Klick-/Tipp-Ereignissen in Javascript und ob der Cursor sichtbar ist oder nicht.
Danke für diesen Trick. Sie haben vergessen, -ms-user-select in die Demo aufzunehmen, oder?
Obwohl Firefox, Chrome und Safari es durchgehend unterstützen, sind die Implementierungen leicht unterschiedlich. In Firefox bleibt der Cursor beim Herunterdrücken der Maustaste auf dem gegebenen Element und Ziehen entlang dieses Elements zum Kopieren von Text vom Standardtyp (d.h. wenn er ursprünglich ein Kreuz war, bleibt er während des Ziehens ein Kreuz, wenn er ein Zeiger war, bleibt er ein Zeiger), während er in Chrome und Safari während des Ziehens zu einem Kreuz wird, unabhängig vom ursprünglichen Cursortyp für dieses Element.
Es ist erwähnenswert, dass Sie Bereiche von Text wieder auswählbar machen können mit
Danke Chuck.. Hat sehr geholfen…
Obwohl Chrome Textfelder standardmäßig filtert, beeinflusst Mozilla Textfelder auch, wenn wir
* { user-select: none; }Auch erwähnenswert: -webkit-user-select verursacht bei der aktuellen Version von Safari erhebliche Probleme. Nach dem Hinzufügen auf einer einfachen Seite konnte ich Safari zum Einfrieren bringen, indem ich 6 Mal hintereinander auf die Maus klickte.
Aktualisierung meiner letzten Aussage. Dies wird erst bemerkbar, wenn Safari etwa 7000 Zeilen Text auf einer Webseite rendert.
In Firefox beeinflusst dieser Eigenschaftswert die Kinder des Elements und daher können Sie diese auch nicht auswählen. Selbst das manuelle Überschreiben der CSS-Eigenschaften der Kinder erlaubt Ihnen nicht, sie auszuwählen.
Wenn Sie die Auswahl von Kindern manuell überschreiben möchten, müssen Sie stattdessen den Eigenschaftswert "-moz-none" anstelle von "none" verwenden.
Wk of Angmar: DANKE!!!
Danke! Hat mir gerade viel Frustration erspart.
http://caniuse.com/#feat=user-select-none
Ich frage mich, ob es in einer App-Umgebung verpönt wäre, dies universell auf none zu setzen und es dann für Bereiche zu aktivieren, die auswählbar sind (Textkörper, Kopier-/Einfüge-Schnittstellen usw.). Für mich scheint es die Erfahrung etwas nahtloser zu machen, wenn jemand Cmd/Ctrl-A innerhalb der Seite ausführt oder zu lange unbeabsichtigt zieht.
Ich habe auf derselben Zeile auswählbaren und nicht auswählbaren Text.
(Terminalbefehle, mit Kommentaren am Ende einiger Zeilen)
Die Kommentare sind tatsächlich nicht auswählbar, wenn ich versuche, sie auszuwählen. Danke für den Trick!
ABER, wenn ich mehrere Zeilen (die Befehle) auswähle, werden auch die nicht auswählbaren Teile (die Kommentare) hervorgehoben, obwohl die Kommentare tatsächlich NICHT ausgewählt sind (wie wir beim Kopieren und Einfügen sehen). Es ist ein visueller Fehler, der für den Benutzer irreführend ist.
Hat jemand einen Trick, um das Hervorheben von nicht auswählbarem Text zu verhindern?
Opera 15 wird diese Funktion unterstützen, vorerst mit dem -webkit-Präfix.
-webkit-user-select: none;
Dies beeinträchtigt Passwortfelder in Version 6.0.2 von Safari.
Eine Problemumgehung besteht darin, eine einzeilige CSS-Regel zu definieren, die auf Ihre Passwortfelder angewendet wird
.safariPasswordWorkaround { -webkit-user-select: all; }
Funktioniert das in PDF?
Was ist, wenn ich den Text wirklich nicht auswählbar (und nicht kopierbar) machen möchte (nicht einmal über den Quellcode)?
Eigentlich möchte ich einen sehr langen Code anzeigen, aber ihn nicht auswählbar machen, damit andere Benutzer ihn nicht kopieren können. Sie können ihn nur "anzeigen".
Was wären mögliche Lösungen?
Speichern Sie es als GIF. Das ist die einfache Lösung. Es hindert jedoch niemanden mit freier Zeit und einem Texteditor daran, es zu kopieren.
Wenn Sie auf Android-Geräten oder anderswo immer noch eine Benutzer-Auswahl-Hervorhebung erhalten, benötigen Sie möglicherweise auch
-webkit-tap-highlight-color: rgba(0,0,0,0);.Ich möchte die höchstmögliche Unterstützung über Browser, Plattformen und Versionen hinweg aufrechterhalten und habe dieses Stück Code zusammengestellt, das ich verwende, wann immer ich diesen Effekt erzielen muss…
1-webkit-touch-callout: none;-webkit-user-select: none;2-khtml-user-drag: none;-khtml-user-select: none;3-moz-user-select: none;-moz-user-select:-moz-none;-ms-user-select: none;4user-select: none;
1Die Eigenschaft -webkit-touch-callout ermöglicht es Ihnen zu bestimmen, was passiert oder nicht passiert, wenn ein Benutzer unter iOS auf einen Link tippt und diesen gedrückt hält. Der Standardwert ist default und das lange Tippen auf einen Link öffnet das Link-Blasen-Dialogfeld. Durch die Verwendung des Werts none kommt diese Blase niemals hoch.
2Das -khtml-Präfix ist älter als das -webkit-Präfix und bietet Unterstützung für Safari 2.0-
3Das -moz-Präfix ist doppelt mit dem Wert none und dem Wert -moz-none definiert. Die Verwendung von -moz-none anstelle von none verhindert, dass Elemente und Unterelemente auswählbar sind. Einige ältere Browser wie Netscape erkennen moz-none jedoch nicht, daher ist es für sie immer noch notwendig, none zu definieren.
4**Vergessen Sie nicht, dass die nicht-präfixierte Eigenschaft zuletzt aufgeführt werden sollte.
Ich würde es vorziehen, wenn die Surfer ihre Fähigkeiten mit einer Maus verfeinern, anstatt die ohnehin schon obskure CSS von heute zu überfrachten. Sag ich nur... :-)
Ich habe Seiten mit vielen benutzergenerierten Texten. Benutzer möchten oft "Alles auswählen", um es in E-Mails usw. einzufügen. Der gewünschte Text befindet sich über mehrere lange "contenteditables" (stellen Sie sich Google Docs vor, aber mehrere Dokumente auf einer Webseite). "Alles auswählen" ist am sinnvollsten, da das Auswählen und Ziehen erfordert, dass man viel scrollt, und die Auswahl auch stoppt, wenn man die Grenze des contenteditable erreicht.
Aber "Alles auswählen" wählt auch die "Chrome" der Seite (Navigation usw.) aus, was sie nicht wollen.
Man sollte meinen, dass dieses "user-select" das ist, was ich will, aber die Art, wie es funktioniert (zumindest in FF), ist, dass "Alles auswählen" den Text "user-select:none" auswählt.
Ich nehme an, es besteht die Gefahr, dass es für die Entwickler zu einfach wird, es für die Benutzer zu schwer zu machen, Text auszuwählen. Dennoch könnte es eine schöne Sache sein, wenn wir es herausfinden könnten.
Ich habe eine Benutzeroberfläche mit Zeilen von Inhalten, die auch "Buttons" enthalten, und ich habe versucht zu verhindern, dass der Text der Buttons kopiert wird, wenn Leute versuchen, den Inhalt zu kopieren. Was ich getan habe, war, den Text, den ich nicht ausgewählt haben wollte, von der Beteiligung am Element zu ändern und ihn stattdessen durch ein CSS :before Pseudoelement zu erstellen. Es funktionierte einwandfrei!
Hallo Leute, CSS 'pointer-select: none;' hat genau das gleiche Verhalten, bei dem die Auswahl von allem vor oder nach dem 'select none' Tag-Inhalt die Auswahl aller Inhalte im Auswahlbereich ermöglicht. Es gibt hier einen CMD-Verarbeitungshack (irgendwo), etwas, das CSS-Tricks ans Licht bringen könnte: Die übergeordnete Auswahl muss so reagieren, dass sie auf das untergeordnete 'select none'-Element reagiert. Prettify.js ("google.code.prettify") handhabt diese Art von Fokusverwaltung gut. HTML/CSS-Workaround?
…
pre { counter-reset: line; white-space: pre-wrap; }
code { counter-increment: line; }
pre code:before { content: counter(line); margin-right: 3rem; pointer-events: none; }
pre code:before { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }
…
Okay, als Beispiel für CMD-Einfluss auf das Codieren betrachten Sie diesen Code, um das Verhalten des Carats aufzudecken (sorry, Einschränkungen hier, Sie müssen die offensichtlichen Leerzeichen im folgenden Code in Ihrer Gerätevorschau schließen)
…
PRE und CODE können keine literalen Carat-Symbole anzeigen. Element-Tags für Carats werden von Hand codiert < ; '<' linkes Karat und > ; '>' rechtes Karat.
…
Die Anzeige-Reflexion für das Select-None-Verhalten ist nahezu identisch. Fügen Sie Pointer-Events zum übergeordneten PRE hinzu und User-Select zum untergeordneten CODE (jede Zeile ein separater CODE-Tag) und die übergeordnete Auswahl erfolgt mit externem Ziehen hinein/hindurch. CMD-basierte Interferenz, wobei nichts außerhalb sichtbar ausgewählt ist, beim Einfügen der Auswahl wird die Aufnahme des letzten PRE-PRE-Zeichens enthüllt, das unsichtbar in die kopierte Auswahl einbezogen ist. Das Verhalten von Zählern und Code ist, als ob es von innerhalb von PRE oder dem zugewiesenen CODE-Zähler nicht auswählbar wäre. Daher verwendet Google Prettify.js die Attribution auf irgendeine Weise als unser fehlender Hack. Was ein weiterer Blog-Post hier bei CSS-Tricks sein wird.
Grundsätzlich eine DRM-Funktion, ich habe gerade eine Seite gefunden, die dies missbraucht. Der ganze Mist auf der Seite kann ausgewählt werden, aber nichts im Artikel. Ich möchte einen Teil der Quelle sehen, um zu sehen, wie ihr Web2.0-Malware funktioniert, aber ich habe festgestellt, dass sie das behindern.
FF und alle modernen Browser sind nur proprietäre Anwendungsplattformen. Und aus diesem Grund suckt sie auf eine Weise, wie es Windows tut. Der Benutzer sollte die Kontrolle haben, Websites sollten nicht in der Lage sein, dumme Dinge zu tun, ohne dass der Benutzer dies ausdrücklich zulässt.
Es gibt viele legitime Nicht-DRM-Anwendungsfälle für diese Funktion. In meinem persönlichen Fall baue ich einen benutzerdefinierten WYSIWYG-Editor. Die Kontrolle der Benutzerauswahl ist eine Funktion auf Anwendungsebene, die für die Art von Rich-Apps benötigt wird, die heute entwickelt werden.
Leider ist sie in den Browsern immer noch nicht in hohem Maße standardisiert. Insbesondere wenn contentEditable involviert ist.
-webkit-user-select: all; /* Chrome 49+ */...sollte sein...
-webkit-user-select: all; /* Chrome 50+ */Entschuldigung, ich meinte Chrome 53+ und Opera 40.
Wenn Sie Cordova und iOS verwenden, müssen Sie zusätzliche Arbeiten durchführen, um die Textauswahlblase zu unterdrücken. http://stackoverflow.com/questions/32812308/ios-cordova-long-press-shows-text-select-magnifying-glass-even-with-text-selecti
Vielen Dank! Ich weiß, dass seit der Erstellung dieses Artikels viel Zeit vergangen ist, aber ich habe das Kopieren und Einfügen deaktiviert, weil andere Websites meine Arbeit gestohlen und behauptet haben, sie sei ihre eigene. Aber dann konnten die Leute keine Links kopieren, die ich ihnen gab, und Blogger hat sein Aussehen geändert und ich wusste nicht, wie ich es ausschalten konnte. Mit einem Wort können sie es wieder tun :)
Es stellt sich heraus, dass es auch für Facebook nützlich ist, die es als #darkpattern verwenden, um das Kopieren/Einfügen von Facebook-Posts zu blockieren, wenn man nicht angemeldet ist >:-(
Ich versuche, Text nicht auswählbar und nicht kopierbar zu machen. Das Hinzufügen von user-select: none; leistet dies tatsächlich, wenn ich mit Chrome und einem einfachen Texteditor (Atom) teste. Aber wenn ich in Microsoft Word einfüge, erhalte ich den gesamten Text, den ich nicht ausgewählt/kopiert/eingefügt haben wollte. Ich bin mit der Funktionsweise der Zwischenablage nicht vertraut, aber das scheint seltsam zu sein. Gibt es eine Möglichkeit, zu verhindern, dass Text aus dem Browser kopiert und in Microsoft Word eingefügt wird?