原文连接:http://www.cnblogs.com/yunxuange/archive/2012/09/19/2693886.html

layout是Windows上的IE浏览器产生许多bug的根源。如果遇到一个IE bug首先应该做的事情之一就是尝试应用规则迫使元素拥有layout。

layout(布局)概念是Windows上的IE特有的(IE Mac 和 windows 上的 IE 是完全不同的两个东西,它们各自拥有自己的渲染引擎。),并且它不是css属性。拥有layout的元素负责本身及其子元素的尺寸和定位;不拥有 layout的元素,它的尺寸和位置由最近的拥有layout的父元素控制。

可以使用JavaScript函数hasLayout查看一个元素是否拥有布局,函数返回true即该元素拥有layout,否则返回false。hasLayout是一个只读属性。

在默认情况下拥有layout的元素包括:

  • body
  • 标准模式中的html
  • table
  • tr/td
  • img
  • hr
  • input/select/textarea/button
  • iframe/embed/object/applet
  • marquee

设置以下css属性会自动地使元素拥有layout:

  • position: absolute 或 fixed
  • float: left 或 right
  • display: table 或 table-cell 或 inline-block 或 inline-table
  • overflow: hidden 或 scroll 或 auto(IE7会,IE6不会)
  • width: 除 “auto” 之外的任何值
  • height: 除 “ auto” 之外的任何值
  • min-width: 任何值(IE6不支持此属性)
  • max-width: 除 “none” 之外的任何值(IE6不支持此属性)
  • min-height: 任何值(IE6不支持此属性)
  • max-height: 除 “none” 之外的任何值(IE6不支持此属性)
  • zoom: 除 “normal” 外的任何值(Microsoft属性——不能通过W3C检验)
  • writing-mode: tb-rl(Microsoft属性——不能通过W3C检验)

layout产生的影响:

  • 拥有layout的元素是IE产生浮动Bug的根源
  • 拥有layout的文本元素不会围绕浮动元素
  • 拥有layout的元素不进行收缩
  • layout元素对浮动进行自动清理
  • 拥有layout的列表元素(ul/ol/dl/li)会表现异常
  • 拥有layout的元素背景图像定位(background-position)会产生偏差
  • 相对定位(position: relative)的元素不能获得layout
  • 拥有layout的元素之间外边距(margin)不叠加
  • 在不拥有layout的块级(display:block)链接上,单击区域只覆盖文本

IE的haslayout的触发的更多相关文章

  1. hasLayout与BFC的触发条件

    hasLayout与BFC是分别在IE和其他浏览器上的两个作用很相近的概念,在很多时候,我们需要触发它们去实现有些效果.例如清除浮动时需要触发hasLayout与BFC:很多自适应的两栏和三栏布局(两 ...

  2. hasLayout && Block Formatting Contexts

    转自:http://www.smallni.com/haslayout-block-formatting-contexts/ 因为本人脑子不好使,自己打印出了一张hasLayout和Block For ...

  3. BFC and Haslayout

    一.BFC(Block Formatting Context) 相关网址:http://www.cnblogs.com/dolphinX/p/3508869.html 1. 怎样才能形成BFC flo ...

  4. hasLayout与Block formatting contexts的学习(下)

    BFC布局规则: 内部的Box会在垂直方向,一个接一个地放置. Box垂直方向的距离由margin决定.属于同一个BFC的两个相邻Box的margin会发生重叠 每个元素的margin box的左边, ...

  5. margin折叠及hasLayout && Block Formatting Contexts

    margin折叠的产生有几个条件: 这些margin都处于普通流中,并在同一个BFC中: 这些margin没有被非空内容.padding.border 或 clear 分隔开: 这些margin在垂直 ...

  6. IE7 浏览器下面设置text-indent属性变成margin属性BUG

    问题来源 今天做项目的时候发现了一个问题,在使用text-indent属性对元素进行缩进是发现在360浏览器下发生了元素偏移,跟margin-left的效果一样,打开f12发现3607.1浏览采用的i ...

  7. 【深入BFC】 关于CSS中float布局,清除浮动,和margin合并的原理解析,解开你心中的那些困惑!

    BFC的通俗理解: Block Formatting Context(块级格式化上下文)是W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. ...

  8. CSS浏览器兼容性与解析问题终极归纳

    1.怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式.为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯. 2.IE6双边距问题:在 ...

  9. display:inline 和display:inline-block和display:block的区别

    之前讲过块级元素使用display:block 行内元素使用display:inline 那么今天我们就来区分一下display:inline,display:inline-block和display ...

随机推荐

  1. jmeter - 命令行方式运行

    命令格式: jmeter -n -t <testplan filename> -l <listener filename> 参数说明: -n 非 GUI 模式 -> 在非 ...

  2. RzToolbutton用法

  3. 获取hyper-v和vmware虚机状态

    在vmware的PowerCLI和微软的scvmm的PowerShell中可以通过Get-VM命令来获取虚拟机的信息.下面我们用代码的方式去实现,代码相关类方法就是对命令的封装. vmware api ...

  4. mysql 循环插入

    在mysql添加测试数据,想和mssql一样用循环实现,发现不管怎么样都执行失败 经查询发现mysql不支持匿名块,只能先创建出一个存储过程,执行,然后删除 CREATE PROCEDURE test ...

  5. c#设计模式系列:模板方法模式(Template Method Pattern)

    引言 提到模板,大家肯定不免想到生活中的"简历模板"."论文模板"."Word中模版文件"等,在现实生活中,模板的概念就是--有一个规定的格 ...

  6. Spring Boot - Spring Scheduling

    有时应用需要定时(如凌晨)执行一些任务(比如计算一些数据并存下来留给后续使用) 使用 使用@EnableScheduling注解启用Scheduling功能:不一定要标注在启动类上,也可以标注在@Co ...

  7. HDU - 6215 2017 ACM/ICPC Asia Regional Qingdao Online J - Brute Force Sorting

    Brute Force Sorting Time Limit: 1 Sec  Memory Limit: 128 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...

  8. Oracle-利用解析函数计算连续、回流

    ---最大连续交易天数 select t2.customer_no,max(t2.co) from (select t1.customer_no,t1.yp) co from (select ctd. ...

  9. 【OCP-052】新版052最新题库及答案整理-第14题

    14.Which command is used to display files that no longer conform to the backup retention policy? A) ...

  10. javascript滚动到大于一定距离显示隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...