关于chrome下的bug
最近看了大神的一篇文章,于是尝试了一下里面说的bug以及修复
1.Chrome下absolute绝对定位元素部分display属性值不渲染bug
首先还原一下bug..
ff下的下效果
点击按钮后的效果
代码如下:
<style>
.img{
width:200px;
position:absolute;
-webkit-transform: translateZ(0);
}
.btn{
width:200px;
appearance:button;
-moz-appearance:button; /* Firefox */
-webkit-appearance:button;
background:blue;
display: block;
}
</style>
<body>
<div id='demo'>
<button class='btn' id='btn'>图片display:inline-block</button>
<strong>点击上面按钮,改变图片display水平:</strong><img src="./img/1.jpg" id='img' class='img' alt="">
</div>
</body>
<script>
//兼容绑定事件
function bindEvent(elem,type,fn){
window.addEventListener?elem.addEventListener(type,fn,false):elem.attachEvent('on'+type,fn);
}
var btn = $('btn'),img = $('img'),demo = $('demo');
bindEvent(btn,'click',function(){
if(img.style.display == 'block'){
img.style.display = 'inline-block';
btn.innerHTML = '图片display:inline-block';
}else{
img.style.display = 'block';
btn.innerHTML = '图片display:block';
}
});
</script>
现在看看chrome下的效果
可以看出img没有随着display的改变而换行,
要注意的是,只有当图片元素设置了position,并且没有设top和left的情况下才会出现这种bug
bug的修复
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
.translateZ{
-webkit-transform: translateZ(0);
}
.img{
width:200px;
position:absolute;
-webkit-transform: translateZ(0);
}
.btn{
width:200px;
appearance:button;
-moz-appearance:button; /* Firefox */
-webkit-appearance:button;
background:blue;
display: block;
}
</style>
<body>
<div id='demo'>
<button class='btn' id='btn'>图片display:inline-block</button>
<strong>点击上面按钮,改变图片display水平:</strong><img src="./img/1.jpg" id='img' class='img' alt="">
</div>
</body>
<script>
//获取元素
function $(id){
return document.getElementById(id);
}
//判断类
function hasClass(obj, cls) {
return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}
//增加类
function addClass(obj, cls) {
if (!this.hasClass(obj, cls)) obj.className += " " + cls;
}
//删减类
function removeClass(obj, cls) {
if (hasClass(obj, cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
obj.className = obj.className.replace(reg, ' ');
}
}
//兼容绑定事件
function bindEvent(elem,type,fn){
window.addEventListener?elem.addEventListener(type,fn,false):elem.attachEvent('on'+type,fn);
}
var btn = $('btn'),img = $('img'),demo = $('demo');
bindEvent(btn,'click',function(){
if(img.style.display == 'block'){
img.style.display = 'inline-block';
removeClass(demo,'translateZ');
btn.innerHTML = '图片display:inline-block';
}else{
img.style.display = 'block';
//addClass(demo,'translateZ');
btn.innerHTML = '图片display:block';
}
});
</script>
</html>
修复的方法,利用的是 -webkit-transform: translateZ(0);
改变display为block的时候,同时添加 -webkit-transform: translateZ(0);
改变display为inline-block的时候,同时删除 -webkit-transform: translateZ(0);
2.Chrome下absolute绝对定位元素具有overflow属性的块状子元素visibility hover不渲染bug
Chrome浏览器下,绝对定位元素,同时visibility:hidden时候,如果子元素具有块状水平,
同时设置了overflow:hidden; 则父元素hover时候,无法让子元素visibility:visible渲染生效!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
.outer{
position:absolute;
visibility: hidden;
}
.bug{
overflow: hidden;/* 重要条件 */
}
.demo:hover .bug {
visibility: visible; /* Chrome浏览器下,此声明无效 */
}
</style>
<body>
<div class='demo'>
Chrome罕见visibility渲染bug(<em>hover me</em>)
<div class='outer'>
<div class='bug' id='bug'><img src="img/1.jpg"></div>
</div>
</div>
</body> </html>
ff下的效果
chrome下的效果
其实造成这效果的原因和position有很大关系,如果把position去掉visibility的效果有可以呈现了
但是如果项目需要用到position:absolute,那么可以用下面的方法
.hover:hover .bug {
visibility: visible;
-webkit-transform: translateZ(0); /* 解决方法*/
}
添加后,问题就解决了
本文参考自http://www.zhangxinxu.com/wordpress/2015/01/chrome-absolute-display-visibility-render-bug/
关于chrome下的bug的更多相关文章
- chrome下float元素下input选中内容bug
今天在写一个小demo的时候,发现chrome下一个很奇怪的bug. 我的代码如下: <!DOCTYPE html> <html lang="en"> &l ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- IE下设置unselectable与onselectstart属性的bug,Firefox与Chrome下的解决方案
在IE下给DIV设置unselectable与onselectstart属性,可以让div的内容不能选中,这个功能在很多情况下,非常有用,但是他的bug太明显, 直接使用一个DIV是可以的,比如: & ...
- Linux下Chrome浏览器的BUG
“我胡汉三又回来了”,好久没出现在博客园了,准备考试什么的最烦躁了,今天又重新整了下我的Ubuntu,结果发现了一个Chrome浏览器的Bug,但是与其说它是个Bug,还不如说它是个Joke. 好吧, ...
- IE下的bug
断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决 ,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1 ...
- input 光标在 chrome下不兼容 解决方案
input 光标在 chrome下不兼容 解决方案 height: 52px; line-height: normal; line-height:52px\9 .list li input[type= ...
- ie下的bug之button
场景描述: 现在页面设计是都喜欢自定义按钮样式,某日接收到页面发现在ie下有bug,上代码: <div> <button><span><a href=&quo ...
- 如何在Chrome下Debug Mocha的测试
简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键 ...
- 在chrome下的文本框sendkeys,提示element can't focus--解决方法
在chrome下的文本框sendkeys,提示element can't focus--解决方法(成都-半步流雲,群友解决) 成都-半步流雲1.升级你的chromedriver,2.降chrome版本 ...
随机推荐
- 初尝2D骨骼动画编辑工具SPINE,并into Unity3D
一.SPINE使用 研究2D骨骼动画,CYou的朋友介绍我SPINE这个工具,开发自Esoteric Software的一款专门制作2D动画的软件,网络上的资料还很少,我这从半吊子美术技术的角度简单说 ...
- C#基础入门 八
C#基础入门 八 泛型 C#中的泛型能够将类型作为参数来传递,即在创建类型时用一个特定的符号,如"T"来作为一个占位符,代替实际的类型,等待实例化时用一个实际的类型来代替. pub ...
- Javascript的事件模型和Promise实现
1. Javascript的运行时模型——事件循环 JS的运行时是个单线程的运行时,它不像其他编程语言,比如C++,Java,C#这些可以进行多线程操作的语言.当它执行一个函数时,它只会一条路走到黑, ...
- Win7/Win8/Win8.1下配置apache+php运行缓慢问题解决方法
将以下内容复制另存为 xxx.reg,双击导入后重启机器! Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\Curren ...
- Ubuntu 12.04 安装最新版本NodeJS
昨天搭建了一个Windows NodeJS 运行环境,但Windows 运行NodeJS命令行各种别扭,开源包的编译也是各种问题,折磨了我一天一夜,果断换到Linux 平台.. 我选择了Ubuntu ...
- C#中索引器的作用和实现。
官方描述:索引器允许类或结构的实例就像数组一样进行索引.索引器形态类似于,不同之处在于它们的取值函数采用参数. 这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象有些资源 ...
- 对象初始化的完整过程(C#)
1.静态构造函数 在引入本文的主题之前,我们先来铺垫一下吧,看看静态构造函数的概念及用途. C#中允许创建无参数构造函数,该函数仅执行一次.它一般被用来初始化静态字段.CLR不能保证在某个特定时刻执行 ...
- 写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我
写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...
- 为何会有Python学习计划
近几年感觉自己需要不断充电,从网上找寻技术潮流前端时Python映入眼帘,未来的技术,Python应该很有市场. 于是,以很低的成本从网上找到相关最新学习资料,希望自己未来的路,能坚持与书为伴,不断攀 ...
- Python 开发安卓Android及IOS应用库Kivy安装尝试
Python 开发安卓Android及IOS应用库Kivy安装尝试: 先来看看这货可以用来制作什么应用: Create a package for Windows Create a package f ...