【IE大叔的嘴歪眼斜】之—— 由hasLayout引发的临床CSS Bug表

IE大叔这嘴歪眼斜的毛病不是一天两天了,集体拉出来测试时候,明明大家都在微笑,就丫一副呲牙咧嘴的......

哎,没办法,谁让咱国内市面上都是这种呲牙咧嘴的浏览器呢.....(关注IE678死亡速度)

查阅,翻读,摘抄,记录,再逐一实践,总结,终于对他这个臭毛病有了根源上的认识。

hasLayout!

先上定义:

它是IE的特有属性。它决定着一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算组织内容。为了区别这两个概念,渲染引擎采用了hasLayout的属性,true或false,当属性为true时,我们说这个元素触发了布局(Layout)。

具有hasLayout属性的标签

  • <html>,<body>
  • <table>,<tr>,<td>,<td>
  • <img>
  • <hr>
  • <input>,<button>,<select>,<textarea>,<fieldset>,<legend>
  • <iframe>,<embed>,<object>,<applet>
  • <marquee>

这个属性存在的意义?

当一个元素对象的layout被激活时候,它和它的子元素的定位和尺寸计算将独立进行,也就是独立布局,因此浏览器会消耗更多的代价来处理拥有layout的元素。为了提高性能,IE整出了个这么个私有属性。

可触发hasLayout的CSS特性:

display: inline-block
height:(除了auto之外任何值)
width:(除了auto之外任何值)
float:(left || rightpositionabsolute
writing-mode:tb-rl
zoom:(除了normal之外任何值)

IE7可触发hasLayout的CSS特性:

min-height:(任意值)
min-width:(任意值)
max-height:(除none之外任意值)
max-width:(除none之外任意值)
overflow:(除visible之外任意值,仅用于块级元素)
overflow-x:(除visible之外任意值,仅用于块级元素)
overflow-y:(除visible之外任意值,仅用于块级元素)
position:fixed

再来看看嘴歪眼斜的临床表现:(以下内容均本人亲测)

 问题浏览器DEMO解决办法
1input[button | submit]未居中IE8bug | fixed添加width
2body{overflow:hidden;}没有去掉滚动条IE6/7bug | fixed改成html{overflow:hidden;}
3拥有hasLayout的标签有高度IE6/7bug | fixed添加_overflow:hidden;*height:0
4form>[hasLayout]元素有margin-left时,子元素中的[input | textarea] 出现2×margin-leftIE6/7bug | fixedform > [hasLayout 元素]{margin-left:宽度;}
form div{*margin-left:宽度÷2;}
5当子元素有position:relative的时候,父元素设置overflow:[hidden|auto]相当于给子元素设置了position:visible;IE6/7bug | fixed给父元素设置position:relative;
6列表中混乱的浮动:在list中浮动图片时,图片出现溢出正常位置;或没有list-styleIE8bug | fixed用背景图片替换list-style
7th 不会自动继承上级元素的 text-alignIE8bug | fixed给th添加text-align:inherit;
8样式(包括link/style/@import(link)) 最多允许个为是:32IE6-8─ 常识99.99%的情况下,不会遇到
9PNG图片中的颜色和背景颜色的值相同,但显示不同IE6-7bug | fixed利用 pngcrush 去除图片中的 Gamma profiles
10margin:0 auto; 不能让block元素水平居中IE6-8bug | fixed给block元素添加一个width
11使用伪类 :first-line | :first-letter, 属性的值中出现!important 会使属性失效IE8bug | fixed!important is evil, don’t use it anymore
12:first-letter 失效IE6bug | fixed把 :first-letter 移到离{}最近的地方,如 h1, p:first-letter{},而非 p:first-letter h1{}
13Position:absolute元素中,a display:block, 在非:hover时只有文本可点击IE6/7bug | fixed给a添加background, 如果背景透明,使用background:url(‘任何页面中已经缓存的文件链接’),不推荐background:url(#)[官方的解决方法],因为会增加一下HTTP请求
14dt, dd, li 背景失效IE6bug | fixeddt, dd, li{position:relative;}
15<noscript />元素的样式在启用javascript的情况下显示了样式IE6-8bug | fixed利用js给<noscript />添加display:none;
16li内元素偏离 baseline 向下拉IE8/9bug | fixed给li设置display:inline 或 float:[方向]
17列表中li的list-style不显示IE6/7bug | fixed给li添加margin-left,留空间来显示(不要加在ul上)
18图片不能垂直居中IE6/7bug/fixed添加一个空标签,并赋给”Layout”, 比如display:inline-block;
19不能自定义指针样式IE6-8bug | fixed给指针文件设置绝对路径
20高度超过height定义的高IE6bug/fixed添加_overflow:hidden;(推荐)或者_font-size:0;
21宽度超过width定义的宽IE6bug/fixed添加_overflow:hidden;
22双倍边距IE6─ 常识添加display:inline到float元素中
23margin负值隐藏:hasLayout的父元素内的非hasLayout元素,使用负边距时,超出父元素部分不可见IE6/7bug/fixed去掉父元素的hasLayout;或者赋hasLayout给子元素,并添加position:relative;
24给两个浮动元素的某中一个的文字设定为斜体,另一个元素下拉在有斜体文字元素的下面IE6bug/fixed给有斜体文字的元素添加overflow:hidden;
253px 间隔:在float元素后的元素,会有3px间隔IE6bug/fixed因为是确切的3px,所以,用“暴力破解”吧,比如_margin-left:-3px;或者也设置float
26text-align 影响块级元素IE6/7bug/fixed整理你的float;或者分开设置text-align

 

 

(PS:如若想信手拈来,玩转IE,除了强大自己之外,还需大家一起共同默默祈祷:“IE6速死,XP速死......”)

转载于:https://www.cnblogs.com/ccto/archive/2013/03/07/2948630.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

greenplum 查询出来的数字加减日期_Python实践代码总结第5集(日期相关处理)

英文的月份转数字及数字转英文import calendar# 数字转月份的简写calendar.month_abbr[12]--> Dec# 简写月份转数字list(calendar.month_abbr).index(Dec)--> 12# 数字转月份的全写calendar.month_name[12]--> December# 月份转数字list(calendar.month_name).index(D…

静态代码和动态代码的区别_无代码和低代码有哪些区别

代码是大多数软件程序和应用程序的骨干。代码是大多数软件程序和应用程序的骨干。每行代码充当一条指令&#xff1a;采用一种逐步性的逻辑机制&#xff0c;以便计算机、服务器和其他机器执行操作。想创建那些指令&#xff0c;就要知道如何编写代码&#xff0c;这项宝贵的技能有…

备注html网页代码,备注.html · dengzhao/prd_zhangyao - Gitee.com

&#xfeff;备注$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html; };备注…

mysqld与mysqld_safe的区别

直接运行mysqld程序来启动MySQL服务的方法很少见&#xff0c;mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况&#xff0c;并在其死机时重新启动它。用mysqld_safe脚本来启动MySQL服务器的做法在BSD风格的unix系统上很常见&#xff0c;非BSD风格的UNIX系统中的mysql.s…

python词频统计代码_机器学习必备宝典-《统计学习方法》的python代码实现及课件...

《统计学习方法》可以说是机器学习的入门宝典&#xff0c;许多机器学习培训班、互联网企业的面试、笔试题目&#xff0c;很多都参考这本书。本站根据网上资料用python复现了课程内容&#xff0c;并提供本书的代码实现、课件下载。《统计学习方法》简介《统计学习方法》全面系统…

Oracle中用rownum替代Top函数的方法

今天写一个方法&#xff0c;主要功能是从数据库中根据条件查出第一条信息。以前用sql server的时候&#xff0c;我记得TOP方法还是非常简单实用的。 方法是&#xff1a;select top n [列名] from [表名] where [查询条件] 这个方法想必像我这样的新人也会非常熟悉&#xff0c;所…

view类不响应自定义消息_安卓平台如何给控件添加自定义操作?

在安卓应用设计和开发过程中&#xff0c;设计人员为了界面简洁、有独特的交互方式&#xff0c;可能会为控件设计特殊的操作手势&#xff0c;例如消息列表中单指按住消息向左滑删除消息&#xff1b;系统顶部的通知单指向左滑可以关闭通知等。这些操作对于普通用户非常方便&#…

mysql 密码

使用mysqladmin&#xff0c;这是前面声明的一个特例。 mysqladmin -u root -p password 新密码 输入这个命令后&#xff0c;需要输入root的原密码&#xff0c;然后root的密码将改为mypasswd。 把命令里的root改为你的用户名&#xff0c;你就可以改你自己的密码了。 当然如果你的…

html5 css登录注册实现,html5+css3实现一款注册表单实例

效果图如下&#xff1a;html源码&#xff1a;复制代码代码如下:个人信息账号:密码:重复密码:邮箱地址:其他信息个人网址:年龄:月薪:10000function showValue(value) {document.getElementById("rangevalue").innerHTMLvalue;}描述:css源码&#xff1a;复制代码代码如…

图解SQL的inner join、left join、right join、full outer join、union、union all的区别

对于SQL的Join&#xff0c;在学习起来可能是比较乱的。我们知道&#xff0c;SQL的Join语法有很多inner的&#xff0c;有outer的&#xff0c;有left的&#xff0c;有时候&#xff0c;对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Ven…

华南主板超频设置图解_AMD用户不会超频不要紧,开启这个功能免费的性能提升...

现在谈到DIY电脑&#xff0c;基本上大家都会了解到“超频”这个词&#xff0c;超频就是采用人为的方式将CPU、显卡等硬件的工作频率提高&#xff0c;让它们在高于其额定的频率状态下稳定工作。完整的超频必须有两点&#xff0c;提升频率并且稳定&#xff0c;很多时候提升频率容…

凹入表形式打印树形结构_【树形立方体】立方体有哪些特性?

迈安带你走进【迈安带你走进】如上图所示&#xff0c;这是由三个维度构成的一个树形立方体&#xff0c;立方体中包含了满足条件的cell(子立方块)值&#xff0c;这些cell里面包含了要分析的数据&#xff0c;称之为度量值。显而易见&#xff0c;一组三维坐标唯一确定了一个子立方…

小学有学计算机课程,如何进行小学计算机课程有效教学.doc

如何进行小学计算机课程有效教学如何进行小学计算机课程有效教学摘要&#xff1a;计算机课程&#xff0c;作为近年来在基础教育阶段&#xff0c;特别是小学阶段新开设的课程&#xff0c;如何进行有效教学&#xff0c;尽可能的提高课堂教学效果&#xff0c;是众多教师关注的热点…

cs架构用什么语言开发_用Rust语言开发微信小程序

由于stdweb已经好久没有更新了&#xff0c;本人又写了另外一篇&#xff1a;JiaYe&#xff1a;用Rust语言开发微信小程序&#xff1a;wasm-bindgen​zhuanlan.zhihu.comstdweb可以轻松将Rust代码编译为JavaScript和Webassembly字节码&#xff0c;本例中使用asmjs-unknown-emscri…

利用线性代数的方法求斐波那契数列的通项

由于word编辑的公式打出来全是黑的&#xff0c;所以只能贴图咯。下次换个编辑器。转载于:https://www.cnblogs.com/maplewizard/archive/2013/03/10/2952623.html

zookeeper 可视化_大厂,常用,四款,大屏可视化工具

小编最经常的工作是将一些项目的数据从数据库导出&#xff0c;然后分门别类的列到excel表格中&#xff0c;领导看起来眼花缭乱。小编想&#xff0c;要是能以图表可视化展现出来&#xff0c;领导就可以看到项目近几个月的走势&#xff0c;也知道之后要怎么决策了。小编尝试了使用…

shared_ptr智能指针源码剖析

前几天有个人问了我一个问题&#xff1a; 如何将一个智能指针作为函数的返回值传递出来。当时这个问题一下子把我问倒了&#xff0c;后来经人提醒有一个叫shared_ptr的智能指针可以解决这个问题。 将shared_ptr作为函数返回值的代码是这样的&#xff1a; 01#include <tr1…

计算机用户win7修改不,Win7电脑时间改不了的解决方法

在平时的工作中&#xff0c;我们经常会碰到一些问题&#xff0c;其中最常见的就是电脑时间改不了了。其实遇到这个问题很好解决的&#xff0c;但是很多用户都不太懂&#xff0c;为此小编赶紧整理了Win7电脑时间改不了的解决方法来帮助大家&#xff0c;大家赶紧看看吧&#xff0…

win7蓝屏0x000000f4修复_注意:关于近期多数电脑蓝屏的处理和预防方法

近期出现部分用户电脑因win7操作系统服役期结束&#xff0c;更新操作系统补丁导致系统蓝屏&#xff0c;错误代码0X000000F4的现象(如下图所示)&#xff1a;在此提醒&#xff0c;可尝试按照以下方法进行处理并设置。如果还没有出现蓝屏的客户&#xff0c;在系统开机时如出现如下…

用yum安装完mysql后没有mysqld的问题

在Centos中用命令 yum install mysql安装数据库&#xff0c;但装完后运行mysqld启动mysql的时候提示找不到&#xff0c;通过 find / | grep mysqld 也没找到mysqld的目录&#xff0c;后来在Google上搜索下&#xff0c;才知道用yum安装时候mysql也有三个参数的。 yum install my…