指针事件是css3的一个特点,指定在什么状况下元素能够成为鼠标事情的目标(包括鼠标的款式)
特点值
指针事件特点有许多值,可是对于浏览器来说,只要汽车和没有人两个值可用,其它的几个是针对挽救(保存的简写)的(自身这个特点就来自于挽救(保存的简写)技术)。
/*关键字值*/
指针事件:汽车;/*默认*/
指针事件:无;
指针事件事件: visiblepainded/* SVGonly */
指针事件事件:visibleFill/*SVGonly*/
指针事件:可视行程;/*SVGonly*/
指针事件:可见;/*SVGonly*/
指针事件:绘制;/*SVGonly*/
指针事件:填充;/*SVGonly*/
指针事件:行程;/*SVGonly*/
指针事件:全部;/*SVGonly*/
/*全局值*/
指针事件事件:继承
指针事件事件:初始
指针事件:未设置;
指针事件特点值详解
auto——作用和没有界说指针事件特点相同,鼠标不会穿透当时层。在挽救(保存的简写)中,该值和可见绘画的作用相同。
none——元素永久不会成为鼠标事情的目标(方针)。可是,当其子孙元素的指针事件特点指定其他值时,鼠标事情能够指向子孙元素,在这种状况下,鼠标事情将在捕获或冒泡阶段触发父元素的事情侦听器。实际上默
认就能够穿透当时层,因为指针事件默以为汽车
浏览器兼容性
Firefox3.6和chrome2.0以及safari4.0都支撑这个CSS3特点,IE6/7/8/9都不支撑歌剧在挽救(保存的简写)中支撑该特点可是超文本标记语言中不支撑。
检测浏览器是否支撑该特点的射流研究…代码,其实也能够用来检测其他的特点
varsupportsPointerEvents=(function(){)
var dummy=文档。创建元素(' _ ');
if(!(“指针”包括。样式))返回假的;
笨蛋。风格。pointerevents=' auto
笨蛋。风格。pointerevents=' x
document.body.appendChild(虚拟);
varr=getComputedStyle(虚拟)。pointerEvents===" auto
document.body.removeChild(虚拟);
返回器;
})();
为什么要设置两次指示器的特点呢?
笨蛋。风格。pointerevents=' auto
笨蛋。风格。pointerevents=' x
解读:明显的是x会把之前赋值的汽车覆盖掉,后面用了getComputedStyle这个方法。因为x是个无效的值,所以假如浏览器支撑指针事件这个钢性铸铁特点的话,计算出来的款式应该是汽车。
运用射流研究…替代完成指示器穿透当时层的作用
函数指针事件(元素){ 0
$(元素)。绑定(“单击鼠标悬停”,函数(evt){ 0
这个。风格。显示='无';
varx=evt.pageX,y=evt.pageY,
under=文档。来自点(x,y)的元素;
这个。风格。display=
evt。stopperpagation();
evt。prevent default();
$(下)。触发器(evt。类型);
});
}
elementFromPoint:返回给定坐标处的地点的元素
运用实例:document.elementFromPoint(100,100)
触发器:触发被选元素指定的事情类型
event.type:返
回事情类型
实例一
事例一:穿透当时层
在某个项目中,许多元素需要定位在一个地图层上面,这里就要用到许多绝对定位或许相对定位的元素,可是这样的话,这些浮在上面的div或许其它元素一般都会给个宽高,或许relative的元素能够不给宽高,这个时分,这些元素就会盖
住下面的地图层,以至于地图层无法操作。。。
然后正好在Googlemap见到了类似的问题,拿来当例子来说:
Googlemap中左上角的操作区域占位是挺大的,如赤色框区域,然后在这个区域是无法操作地图层的。那么我们就能够给这个div设置pointer-events:none,然后你就会发现下面的地图就能够拖动和点击了。
可是悲剧的是,操作区域自身却无法操作了,直接被无视掉了。不过不用担心,我们能够给里面的元素从头设置为pointer-events:auto,当然,只给需要操作的元素区域设置。
貌似有点儿纠结,不过这样能够保证地图自身的可操作区域最大化。
实例二:pointer-events能够禁用HTML元素的hover/focus/active等动态作用。
事例一:禁用a标签事情作用
在做tab切换的时分,当选中当时项,禁用当时标签的事情,只要切换其他tab的时分,才从头恳求新的数据。
"tab">
"tabactive">
"tab">
事例二:切换开/关按钮状态
点击提交按钮的时分,为了避免用户一向点击按钮,发送恳求,当恳求未返回结果之前,给按钮添加pointer-events:none,能够避免这种状况,这种状况在业务中也十分常见。
.j-pro{pointer-events:none;}
"j-pro":flag}}>提交
submit:function(){
this.data.flag=true;
this.$request(url,{
//...onload:function(json){
if(json.retCode==200){
this.data.flag=false;
}}.bind(this)
//...
});
}
事例三:避免通明元素和可点击元素重叠不能点击
一些内容的展现区域,为了完成一些美观的css作用,当元素上方有其他元素遮盖,为了不影响下方元素的事情,给被遮盖的元素添加pointer-events:none;能够处理。
.layer{backround:linear-gradient(180deg,#fff,transparent);}
.j-pro{poninter-events:none;}
"layerj-pro">
"item">
"item">
"item">
CSS设置
标签(空格分隔):水平居中高度居中
水平居中设置-行内元素
水平居中
如果被设置元素为文本、图片等行内元素时,水平居中是通过给父元素设置text-align:center来实现的。如下代码:
html代码:
<body>
<divclass="txtCenter">我是文本,哈哈,我想要在父容器中水平居中显示。</div>
</body>
css代码:
<style>
div.txtCenter{
text-align:center;
}
</style>
水平居中设置-块状元素
当被设置元素为块状元素时用text-align:center就不起作用了,这时也分两种情况:定宽块状元素和不定宽块状元素。
定宽块状元素
满足定宽和块状两个条件的元素是可以通过设置“左右margin”值为“auto”来实现居中的。设置div这个块状元素水平居中:
html代码:
<body>
<div>我是定宽块状元素,哈哈,我要水平居中显示。</div>
</body>
css代码:
<style>
div{
border:1pxsolidred;/*为了显示居中效果明显为div设置了边框*/
width:500px;/*定宽*/
margin:20pxauto;/*margin-left与margin-right设置为auto*/
}
</style>
也可以写成:
margin-left:auto;
margin-right:auto;
注意:
元素的“上下margin”是可以随意设置的。
水平居中总结-不定宽块状元素方法
在实际工作中我们会遇到需要为“不定宽度的块状元素”设置居中,比如网页上的分页导航,因为分页的数量是不确定的,所以我们不能通过设置宽度来限制它的弹性。
不定宽度的块状元素有三种方法居中(这三种方法目前使用的都比多):
加入table标签
1.第一步:为需要设置的居中的元素外面加入一个table标签(包括<tbody>、<tr>、<td>)。
2.第二步:为这个table设置“左右margin居中”(这个和定宽块状元素的方法一样)。
举例如下:
html代码:
<div>
<table>
<tbody>
<tr><td>
<ul>
<li><ahref="#">1</a></li>
<li><ahref="#">2</a></li>
<li><ahref="#">3</a></li>
</ul>
</td></tr>
</tbody>
</table>
</div>
css代码:
<style>
table{
margin:0auto;
}
ul{list-style:none;margin:0;padding:0;}
li{float:left;display:inline;margin-right:8px;}
</style>
设置display:inline方法
改变块级元素的display为inline类型,然后使用text-align:center来实现居中效果。如下例子:
html代码:
<body>
<divclass="container">
<ul>
<li><ahref="#">1</a></li>
<li><ahref="#">2</a></li>
<li><ahref="#">3</a></li>
</ul>
</div>
</body>
css代码:
<style>
.container{
text-align:center;
}
.containerul{
list-style:none;
margin:0;
padding:0;
display:inline;
}
.containerli{
margin-right:8px;
display:inline;
}
</style>
注意
这种方法相比第一种方法的优势是不用增加无语义标签,简化了标签的嵌套深度,但也存在着一些问题:它将块状元素的display类型改为inline,变成了行内元素,所以少了一些功能,比如设定长度值。
设置position:relative和left:50%;
通过给父元素设置float,然后给父元素设置position:relative和left:50%,子元素设置position:relative和left:-50%来实现水平居中。
代码如下:
<body>
<divclass="container">
<ul>
<li><ahref="#">1</a></li>
<li><ahref="#">2</a></li>
<li><ahref="#">3</a></li>
</ul>
</div>
</body>
css代码:
<style>
.container{
float:left;
position:relative;
left:50%
}
.containerul{
list-style:none;
margin:0;
padding:0;
position:relative;
left:-50%;
}
.containerli{float:left;display:inline;margin-right:8px;}
</style>
这种方法可以保留块状元素仍以display:block的形式显示,优点不添加无语议表标签,不增加嵌套深度,但它的缺点是设置了position:relative,带来了一定的副作用。
这三种方法使用得都非常广泛,各有优缺点,具体选用哪种方法,可以视具体情况而定。
垂直居中
父元素高度确定的单行文本
父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的height和line-height高度一致来实现的。如下代码:
<divclass="container">
hi,imooc!
</div>
css代码:
<style>
.container{
height:100px;
line-height:100px;
background:#999;
}
</style>
父元素高度确定的多行文本、图片、块状元素
竖直居中的方法有两种:
方法一:使用插入table(包括tbody、tr、td)标签,同时设置vertical-align:middle。
说到竖直居中,css中有一个用于竖直居中的属性vertical-align,但这个样式只有在父元素为td或th时,才会生效。所以又要插入table标签了。下面看一下例子:
html代码:
<body>
<table><tbody><tr><tdclass="wrap">
<div>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
</div>
</td></tr></tbody></table>
</body>
css代码:
tabletd{height:500px;background:#ccc}
因为td标签默认情况下就默认设置了vertical-align为middle,所以我们不需要显式地设置了。
方法二:在chrome、firefox及IE8以上的浏览器下可以设置块级元素的display为table-cell,激活vertical-align属性,但注意IE6、7并不支持这个样式。
html代码:
<divclass="container">
<div>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
<p>看我是否可以居中。</p>
</div>
</div>
css代码:
<style>
.container{
height:300px;
background:#ccc;
display:table-cell;/*IE8以上及Chrome、Firefox*/
vertical-align:middle;/*IE8以上及Chrome、Firefox*/
}
</style>
这种方法的好处是不用添加多余的无意义的标签,但缺点也很明显,它的兼容性不是很好,不兼容IE6、7。
隐性改变display类型
有一个有趣的现象就是当为元素(不论之前是什么类型元素,display:none除外)设置以下2个句之一:
position:absolute
float:left或float:right
元素会自动变为以display:inline-block的方式显示,当然就可以设置元素的width和height了且默认宽度不占满父元素。
如下面的代码,我们知道a标签是行内元素,所以设置它的width是没有效果的,但是设置为position:absolute以后,就可以了。
<divclass="container">
<ahref="#"title="">进入课程请单击这里</a>
</div>
css代码
<style>
.containera{
position:absolute;
width:200px;
background:#ccc;
}
</style>
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/53470.html