在敲打自己的个人博客时,在博客的详情页,对于不同的内容,我是想有不同的复制方式的。例如 代码块 我就想读者单击就可以复制,这样方便读者本地调试,而对于文字描述部分,希望可以不允许读者复制。作为一个坚定的能用CSS绝不上JS的极端份子,我最终找到了CSS3中的user-select。
用来控制用户是否可以选中文本。全选,部分选中。
在很多时候用户希望的可能是一次性复制完整的内容,例如一段代码,密码,一些key。
user-select:all : 让用户可以单击选中元素。
这里我们演示了三个不同的Html标签下的效果。
不过all同样存在一个令人尴尬的缺点,只要你设定了all,那你就不能选中部分内容。
对于网页中的元素,可以使用 user-select: none 禁止用户选中内容。
为啥会有这个说法吗,对于通常的网页,我们是可以选择特定的内容的。例如在下面的页面中,我们就可以部分选择内容,
但是这里的标题的部分,主要是指在对立面无法选中的元素。例如html中有这样一个标签sup,这个标签主要是用来给元素添加角标。
当你想复制这段文本的时候: 我后面有个角标1我前面有角标 ,这个角标也会被复制下来。
此时我们就需要针对角标设置,这样设置还可以保证当你p标签是user-select:all的时候,复制也会忽略角标!
CSS提供了::selection`伪元素来设置文本选择的样式
您可以通过定位 ::selection 伪元素来设置文本选择的样式。但是,只有下面的几个属性可以设置:
例如
选中后的效果如下:
网页上禁止复制主要靠JavaScript来实现。<BODY oncontextmenu="return false" onselectstart="return false"
ondragstart="return false" onbeforecopy="return false" oncopy=document.selection.empty() onselect=document.selection.empty()>
-----------------------------------------------
防止复制的js
-----------------------------------------------
<SCRIPT language=JavaScript1.2>
function disableselect(e){
return false}
function reEnable(){return true
}
file://if IE4+
document.onselectstart=new Function ("return false")
file://if NS6
if (window.sidebar){
document.onmousedown=disableselect
document.onclick=reEnable
}
</SCRIPT>
<SCRIPT language=JavaScript type=text/JavaScript>
<!--
function MM_reloadPage(init) {//reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidthdocument.MM_pgH=innerHeightonresize=MM_reloadPage}}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload()
}
MM_reloadPage(true)
//-->
</SCRIPT>
-------------------------------------------------------
防止下载的js
-------------------------------------------------------
<noscript><iframe src=""></iframe></noscript>
--------------------------------------------------------
下面是防止右键的js:
--------------------------------------------------------
<script language="JavaScript">
<!--
if (window.Event)
document.captureEvents(Event.MOUSEUP)
function nocontextmenu() {
event.cancelBubble = true
event.returnValue = false
return false
}
function norightclick(e) {
if (window.Event){
if (e.which == 2 || e.which == 3)
return false
}else{
if (event.button == 2 || event.button == 3){
event.cancelBubble = true
event.returnValue = false
return false
}
}
}
document.oncontextmenu = nocontextmenu// for IE5+
document.onmousedown = norightclick// for all others
//-->
</script>