The CSS user-select property controls whether the user canselect text inside an element. It's commonly used in buttons, UI components, drag handles, code blocks, protected content, and interfaces where text selection may interfere with interactions.
Note
✔ Doesn’t affect copying via JavaScript
✔ Useful for improving UX on draggable, clickable, or interactive UI elements
📦 Syntax
user-select syntax
user-select: auto | text | none | all | contain;| Value | Description |
|---|---|
| auto | Default browser behavior |
| text | User can select text normally |
| none | Prevents any text selection |
| all | Selects all text with one click |
| contain | Selection stays inside the element, cannot extend outside |
🎨 1. Basic Usage
✨ Allow Normal Selection
text
p {
user-select: text;
}✨ Disable Selection (Most Common)
none
button,
.drag-handle,
.icon {
user-select: none;
}Prevents the annoying highlight when clicking rapidly or dragging UI elements.
✨ Select All Text Automatically
all
.copy-code {
user-select: all;
}Clicking inside automatically highlights the entire content — great for code blocks.
✨ Contain Selection Inside Element
contain
.quote {
user-select: contain;
}The user can select text inside the element but cannot extend the selection outside it.
🎨 2. Real-World Examples
1️⃣ Disable selection for buttons & interactive elements
Buttons
button,
.btn,
.nav-item {
user-select: none;
}Prevents accidental highlighting during clicks or taps.
2️⃣ Allow selection only inside content areas
Selectable content
.article {
user-select: text;
}3️⃣ Make code blocks easy to copy
code highlight
pre,
.code-block {
user-select: all;
}4️⃣ Prevent text selection in draggable UI
drag handle
.drag-area {
user-select: none;
}Ideal for drag-and-drop interfaces.
📌 Selection Behavior in Browsers
Some browsers may require vendor prefixes for legacy support:
Vendor prefixes
.no-select {
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}⚠️ Common Mistakes
- ❌ Disabling selection everywhere — hurts accessibility
- ❌ Expecting it to block text copying entirely (JavaScript can still access text)
- ❌ Using it on form fields (users must be able to select text!)
- ❌ Forgetting vendor prefixes on older browsers
Note
🔥 Summary
user-select lets you control how users select text, making interfaces more polished and user-friendly. It’s especially important for buttons, draggable elements, code samples, or touch-based UI where accidental text selection breaks the experience.