CSS中-webkit-user-select:none的用途

本文介绍了一个使用JS实现的拖拽功能,在遇到文字选中导致拖拽bug的问题时,通过应用CSS属性-webkit-user-select:none;解决了拖拽与文字选中之间的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS中-webkit-user-select:none; 的用途(控制页面文字无法选中)

出现了选中文字后无法拖拽盒子的bug

本人用js写当鼠标拖拽让一个盒子位置随鼠标位置改动时,遇到了一个bug

效果图如下:

[img=https://img-bbs.csdn.net/upload/202005/16/1589559788_457317.png][/img]

bug如下:

在这里插入图片描述

bug描述:当鼠标选中文字后,拖动盒子,但是松开时盒子还是跟着动,这样达不到松开盒子不动的目的

废话不多说,直接上代码:

JS代码
<script type="text/javascript">
			var box = document.getElementById('box');
			var tou = document.getElementById('tou');
			var boxX,boxY;
			var mouseX,mouseY;
			tou.addEventListener('mousedown',function(e){
				mouseX = e.pageX - box.offsetLeft;//鼠标距离盒子的位置
				mouseY = e.pageY - box.offsetTop;
				document.onmousemove = move;
				document.addEventListener('mouseup',function(e){
					document.onmousemove = null;
				})
				return false;
			})
			function move(e){
				boxX = e.pageX - mouseX
				boxY = e.pageY - mouseY
				box.style.left = boxX + 'px';
				box.style.top = boxY + 'px';
				console.log(box.offsetLeft)
			}
			aa.onclick = function(){
				box.style.display = 'none';
			}
		</script>
HTML 代码 HTML codes
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			#box{
				position: relative;
				left: 0px;
				top: 0px;
				background: whitesmoke;
				width: 18rem;
				height: 15rem;
				border: 0.15rem solid #ccc;
				box-shadow: 1px 1px 2px #000,-1px -1px 2px #ccc inset;
			}
			#box a{
				color: white;
				font-size: 0.775rem;
				text-decoration: none;
				margin-right: 5px;
			}
			#box p{
				line-height: 0;
				font-size: 0.775rem;
			}
			#box div{
				background: cadetblue;
				margin: 5px;
				color: white;
				display: flex;
				align-items: center;
				justify-content: space-between;
				height: 20px;
				cursor: move;
				-webkit-user-select:none; --------->用在这里哦
				-moz-user-select:none; ----------->用在这里哦
			}
			#box a:hover{
				color: #FF0000;
				cursor: pointer;
			}
		</style>
	</head>
	<body>
		<div id="box">
			<div id = 'tou'>
				<p id="p">注册信息(可以拖拽)</p>
				<a href="#" id="aa">[关闭]</a>
			</div>
		</div>
		<script>这里是上面的js代码哦</script>
	</body>
</html>

###发现了bug,选中文字后无法进行松开释放拖拽,于是采用了-webkit-user-select:none;

<think>好的,用户想了解CSSuser-select: none的使用方法和兼容性问题。首先我需要回忆相关知识,确保信息准确。 首先,user-select属性用于控制用户能否选中文本。主要的值包括none(不可选)、text(可选文本)、all(点击即可选中所有内容)等。但要注意,这个属性不是W3C标准,所以不同浏览器的支持情况不同,需要加前缀。 接下来是使用方法。基本用法应该是给元素添加user-select: none;,但为了兼容不同浏览器,可能需要加上-webkit--moz--ms-等前缀。例如,-webkit-user-select: none; 适用于Chrome和Safari,-moz-user-select: none; 用于Firefox,而-ms-user-select: none; 用于旧版Edge。同时,可能还需要处理IE浏览器的兼容,比如使用onselectstart属性或者unselectable属性。 然后要考虑兼容性问题。比如在IE6-9中,不支持user-select,但可以用onselectstart="return false;"。Opera旧版本可能需要unselectable="on"。此外,在部分浏览器中,即使设置了user-select: none,用户如果从其他区域开始选择,仍然可能选中该区域的文本,这点需要提醒用户注意。 另外,用户提到的引用中提到了不同浏览器的处理方式,需要整合这些信息。例如,引用[2]提到IE6-9使用onselectstart,Safari和Chrome也支持这个属性,而Opera使用unselectable。同时,引用[4]指出需要针对不同浏览器调整设置,所以代码示例中应该包含各个前缀和备用方案。 可能还需要提到常见的应用场景,比如防止文本被选中拖拽,避免复制内容,或者在UI组件中提升体验。但也要注意,过度使用可能影响用户体验,比如无法复制有用的信息。 最后,生成相关问题时要围绕user-select的扩展,比如其他相关属性pointer-events,如何解决拖拽问题,或者移动端的适配等。 检查是否有遗漏点,比如代码示例的正确性,是否覆盖所有主流浏览器,以及注意事项是否全面。确保回答结构清晰,分点说明,并引用提供的参考资料。</think>### CSS中`user-select: none;`使用方法及兼容性问题解析 #### 1. **基本用法** `user-select: none;`用于禁止用户选中页面中的文本内容,常用于UI组件优化或防止内容被复制。 **核心语法**: ```css .target-element { -webkit-user-select: none; /* Chrome/Safari */ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* IE/Edge */ user-select: none; /* 标准语法 */ } ``` #### 2. **兼容性处理** - **IE6-9**:不支持`user-select`,需通过标签属性实现: ```html <div onselectstart="return false;">不可选文本</div> ``` - **Opera ≤12.5**:需使用私有属性`unselectable="on"`: ```html <div unselectable="on">不可选文本</div> ``` - **Safari/Chrome**:支持`onselectstart`属性,但推荐使用`-webkit-user-select: none;`[^3]。 #### 3. **注意事项** - **部分浏览器限制**:即使设置`-ms-user-select: none;`,用户若从其他区域开始选择,仍可能选中目标文本[^2]。 - **移动端适配**:需添加`-webkit-touch-callout: none;`禁止长按菜单。 - **脚本控制**:通过JavaScript设置`userSelect`属性: ```javascript element.style.userSelect = 'none'; // 标准 element.style.webkitUserSelect = 'none'; // WebKit ``` #### 4. **典型应用场景** - 防止拖拽操作误触发文本选中(如自定义滑块组件)[^1]。 - 禁止复制页面敏感内容。 - 优化交互体验(如按钮连续点击时避免选中文本)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值