CSS user select control allows you to dictate how users interact with text on your website, giving you the power to prevent text selection, limit selection to a specific area, or even allow users to select text in a unique way.
You can use the user-select property to control text selection, and it's supported in most modern browsers.
User-Select
The user-select property in CSS is a game-changer for controlling user interaction with text and content on the web.
You can use the user-select property to determine whether a user can select text or not. For example, you can make it so that users can't select a specific piece of text by using the user-select property.
The user-select property has a few different values that you can use, and it's worth knowing what they do. The auto value is the default, and it's determined by the browser.
The none value is useful if you want to prevent users from selecting text. It's like putting a lock on the text, making it impossible to select.
If you want to allow users to select text, but only in the normal way, you can use the text value. It's like giving users permission to select text, but with some limitations.
The all value is a bit more aggressive, and it makes the entire text block selectable when you click on it. It's like giving users a superpower to select everything at once.
The initial and inherit values are a bit more advanced, and they're used to reset the user-select property to its default value or to inherit the value from the parent element.
Here's a quick summary of the user-select values in a table:
Implementation and Browser Support
To implement CSS user select, you'll want to make sure your target audience's browsers are supported. The good news is that most modern browsers have excellent support for this feature.
Chrome, for example, has supported CSS user select since version 4, while Firefox has been on board since version 2. If you're targeting older browsers like Internet Explorer, you'll need to go back to version 10, but Edge and Safari are more up-to-date, supported from version 12 and 3.1 respectively.
Here's a quick rundown of the supported browsers and their minimum versions:
Implementing None
Implementing user-select: none; is a straightforward process, but it's essential to understand the other values you can use with this property.
user-select: none; is the go-to choice when you want to prevent users from selecting text entirely within a specific element.
This is particularly useful for buttons, interactive elements, or any area where text selection would disrupt the user experience. I've seen it in action on websites and apps, and it makes a big difference in how smooth and polished the design feels.
Here are the different values you can use with user-select, and when you might want to use them:
- user-select: none;
- user-select: auto;
- user-select: text;
- user-select: contain;
- user-select: all;
user-select: none; prevents users from selecting text within an element, ensuring that your interactive elements remain just that—interactive, without the interference of text selection. On mobile devices, text selection can interfere with gestures or other touch interactions, making this property a must-use for draggable components like sliders or maps.
In the snippet, any button element or any element with the class no-select will have text selection disabled, which is exactly what you want for interactive elements.
Browser Support
Browser support is crucial for a smooth implementation. The good news is that most modern browsers support the feature.
Chrome has been supporting the feature since version 4, while Firefox has been supporting it since version 2. Internet Explorer (IE) and Edge have also caught up, supporting it since version 10 and 12, respectively. Safari, on the other hand, has been supporting it since version 3.1.
Here's a quick rundown of the browser support data:
It's worth noting that Android browsers have different minimum version requirements. Android Chrome and Android Firefox both require version 130, while Android requires version 2.1 or later. iOS Safari, on the other hand, requires version 3.2 or later.
Older Proprietary
Firefox supports -moz-none, which is just like none except that it means sub-elements can override the cascade and become selectable again with -moz-user-select: text.
As of Firefox 21, none behaves like -moz-none.
Internet Explorer also supports a so-far-proprietary value, element, in which you can select text inside the element but the selection will stop at the bounds of that element.
Table Specifications
The user-select property in CSS has some interesting specifications. The default value is auto, which means that the browser will decide whether to allow text selection or not.
You can see the full table of specifications below:
Best Practices and Considerations
When applying CSS user-select, it's essential to consider the user experience. You might be wondering, “Should I apply this everywhere?” Not quite.
Preventing text selection on buttons and links can make the experience feel smoother. This is because users interact with these elements, and selecting text can be distracting.
Drag-and-drop elements are another common scenario where user-select: none; is beneficial. Users are already engaged in a specific task, and text selection can interfere with their focus.
Custom widgets or tools, like maps or sliders, should also use user-select: none;. This keeps the focus on interaction, not text, and enhances the overall user experience.
In summary, use user-select: none; in specific cases where text selection would interfere with the user experience.
Advanced Topics
CSS user select is a powerful property that allows you to control how users interact with content on your website.
It's often used to prevent users from selecting text or other elements that shouldn't be editable. For example, you can use the 'none' value to disable user selection entirely.
The 'none' value can be particularly useful for preventing users from selecting sensitive information, such as credit card numbers or personal data.
You can also use the 'text' value to allow users to select only the text within an element, while preventing them from selecting the element itself.
This can be useful for creating interactive elements, such as buttons or links, that still allow users to select the text within them.
The 'all' value is also available, which allows users to select both the text and the element itself.
مثال از این ویژگی
Let's take a look at an example of this feature in action.
You can see an example of the user-select property in CSS in the following code snippet.
The first box of text has the user-select property set to none, so when you click on the text, nothing happens. But in the second box, the user-select property is set to all, so when you click on the text, the entire text becomes selected and you can easily copy it.
Older browsers that don't support this feature by default require some extra prefixes. Here are the prefixes you can use for different browsers:
- -webkit- for Chrome, Opera, and Safari
- -moz- for Firefox
- -ms- for Edge
If you want to disable selection for a box of text, you can use the following code: .Text-1{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;}. If you want to enable selection for a box of text, you can use the following code: .Text-2{-webkit-user-select:all;-ms-user-select:all;-moz-user-select:all;user-select:all;}.
Sources
- https://www.fdgweb.com/2024/08/23/stop-accidental-text-selection-with-css-implementing-user-select-none/
- https://css-tricks.com/almanac/properties/u/user-select/
- https://free-learn.ir/%D9%88%DB%8C%DA%98%DA%AF%DB%8C-user-select-%D8%AF%D8%B1-css/
- https://docs.appcues.com/user-experiences-building/css-selectors
- https://superuser.com/questions/1538855/how-do-i-prevent-the-browser-javascript-and-css-from-disabling-text-selection
Featured Images: pexels.com