CSS Blend Mode Playground – Online background-blend-mode & mix-blend-mode
Load images or use colors and apply all 15 CSS blend modes. Visual tester for creative effects.
UD5 Toolkit
Interactively explore and test the CSS user-select property.
Control how users select text — disable selection, enable one-click select-all, and more.
user-select: none.
/* Apply to target element */
-webkit-user-select: auto;
-moz-user-select: auto;
-ms-user-select: auto;
user-select: auto;
Always include vendor prefixes for maximum cross-browser compatibility.
Stop users from accidentally selecting button labels during rapid clicking.
Make code blocks fully selectable with a single click for easy copying.
Allow selection in specific child elements even when the parent disables it.
| Browser | auto | text | none | all | Prefix Needed |
|---|---|---|---|---|---|
| Chrome 54+ | ✓ | ✓ | ✓ | ✓ | -webkit- |
| Firefox 69+ | ✓ | ✓ | ✓ | ✓ | -moz- |
| Safari 16+ | ✓ | ✓ | ✓ | ✓ | -webkit- |
| Edge 79+ | ✓ | ✓ | ✓ | ✓ | -ms- (legacy) |
| iOS Safari 16+ | ✓ | ✓ | ✓ | ✓ | -webkit- |
| Android Chrome | ✓ | ✓ | ✓ | ✓ | -webkit- |
Data sourced from MDN & Can I Use. Always test in your target browsers.
user-select CSS property controls whether and how users can select text within an element. It determines if text can be highlighted, copied, or interacted with via cursor selection. This property is especially useful for improving UX on interactive elements like buttons, drag-and-drop interfaces, code snippets, and any scenario where accidental text selection could degrade the experience. Supported values include auto (browser default), text (selection enabled), none (selection disabled), and all (one-click select-all).
user-select: none; along with browser vendor prefixes for full coverage. The complete CSS rule is:-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;user-select: all makes the entire text content of an element selectable in a single action. When a user starts selecting anywhere inside the element, the browser automatically expands the selection to encompass all text within that element. This is ideal for:user-select: none — Only prevents text selection. The element still receives clicks, hover states, focus, and all other pointer interactions. It's purely about text highlighting.pointer-events: none — Makes the element completely transparent to mouse/touch events. Clicks pass through to elements behind it. The element won't receive hover, focus, or any interaction. Text inside may still be selectable if the selection starts from a neighboring element.user-select: none for buttons and UI elements. Use pointer-events: none for decorative overlays or when you need clicks to pass through.
user-select: none, all child elements inherit this behavior. To re-enable selection for specific children, apply user-select: text (with prefixes) to those child elements:
.unselectable-card { user-select: none; }
.unselectable-card .copyable-content { user-select: text; }
user-select works on mobile browsers including iOS Safari and Android Chrome. However, mobile behavior has some nuances:user-select: none prevents the text selection popup from appearing.-webkit- prefix since iOS 16.-webkit- prefix.all value on mobile: A tap or long-press within the element should select all text, though behavior may vary slightly across browsers.
-webkit-user-select: <value>; /* Chrome, Safari, Opera, Edge */
-moz-user-select: <value>; /* Firefox */
-ms-user-select: <value>; /* Internet Explorer / legacy Edge */
user-select: <value>; /* Standard syntax */
-ms- prefix is largely unnecessary for modern browsers, but it's still recommended for legacy Edge (versions 12-18) and Internet Explorer support. If you don't need IE/legacy Edge support, you can safely omit the -ms- prefix.
user-select: none only prevents visual text selection via cursor/touch. It does not prevent determined users from copying content through other methods:user-select: contain was part of an early draft of the CSS UI Level 4 specification. The idea was that selection would be confined to the element's boundary — you couldn't accidentally extend selection into neighboring elements. However, this value was removed from the specification and is not supported by any modern browser. The current valid values are auto, text, none, and all. If you encounter code using contain, it's outdated and should be replaced with one of the standard values.
user-select is a discrete property — it has distinct, non-interpolable values. You cannot smoothly transition or animate between none and text because there are no intermediate states. If you need a visual transition effect (e.g., fading in selectable text), consider animating other properties like opacity, color, or using CSS transitions on a wrapper element while toggling user-select instantly via JavaScript at the appropriate moment.
Load images or use colors and apply all 15 CSS blend modes. Visual tester for creative effects.
Manipulate CSS values as typed objects using attributeStyleMap. Convert between CSSUnitValue, CSSMathSum, etc. Futuristic CSS‑in‑JS.
Write CSS with native nesting (like SCSS) and see the browser’s native parsing. Validator and live output.
Test the new style() function inside @container to query custom property values. Revolutionary component‑based responsive design.
Paste your CSS and see rules sorted by specificity. Find overrides and potential collisions. Understand your cascade.
See every HTML input type in one page. Check browser support and styling. Copy sample markup. Quick frontend reference.
Swap between physical and logical properties (margin‑inline vs margin‑left). Live preview with writing‑mode. Internationalize your CSS.
Reset native styling on form elements with appearance: none. See before and after. Essential for custom forms.
Paste your CSS and get a sorted list of all custom properties defined under :root with their values. Quick audit.
Register a custom CSS property with syntax, initial value, and inherits. Animate colors and numbers that couldn’t before.
Implement a dark/light theme toggle that respects prefers‑color‑scheme. Copy the complete JavaScript and CSS.
Paste your stylesheet and get a clean list of all custom properties defined under :root. Copy the whole block. Local analysis.
Set up multiple @layers and use revert‑layer to fall back. See the computed style and cascade resolution live.
Apply will‑change to any element and see its effect on compositing. Learn best practices for smooth animations.
Generate a random 5‑color palette where every adjacent pair passes WCAG AA contrast. Safe for inclusive designs.
A completely black page to save battery on OLED devices. Click to go fullscreen. Simple utility.
Easily compute posterior probabilities given prior, likelihood, and marginal likelihood. Visual diagram. All local.
Upload any picture and instantly get a 5‑color palette. Useful for UI design themes. Canvas‑based extraction.
Schedule tasks with user‑visible, user‑blocking, or background priority. See execution order and delays. Modern web perf.
Access the Paint Timing API and display First Paint, First Contentful Paint, and Largest Contentful Paint times. Quick perf check.
Build a Vite configuration file by selecting plugins (Vue, React, etc.), aliases, and build options. Copy the final code.
Build a renovate.json file to automate dependency updates. Choose schedule, automerge, and package rules. Local.
Get a random, unique superpower with a detailed description and limit. Perfect for character creation or daydreaming.
Choose where page breaks should occur for printing. Get the break‑before, break‑after, and break‑inside CSS.
Log shedding events, note duration, and track humidity to optimize next cycle. Healthy scales.
Identify dog breeds from silhouettes or partial images. Score tracking. Fun for all ages. Local only, no images uploaded.
Calculate flour, water, starter amounts to achieve a target loaf hydration. Adjusts for starter hydration. Instant local calculation.
Enter network name and password to generate a stylish printable card for visitors. Local, no data leak.
List all resources loaded by the current page and their detailed timing breakdown. In‑browser waterfall.
Set an alarm relative to today's sunset (e.g., 30 minutes before). Perfect for evening routines. Uses geolocation (optional).