【转】关于IE的hasLayout

本文详细解析了 IE 浏览器特有的 hasLayout 属性,包括默认具有 hasLayout 的元素、触发 hasLayout 的 CSS 属性及如何重置 hasLayout。

IE的haslayout是个比较麻烦的东西,首先它不是w3c的标准属性,没有一个专门的css命令能设定layout,元素要么本身就具有layout,要么需要通过一个css属性“偷偷的”触发layout。其次触发ie的haslayout 的属性比较不常用。用haslayout解决问题的时候,大部分人也是迷迷糊糊的。这里就专门介绍下ie的haslayout,希望对大家有所帮助。

     ie很多稀奇古怪的渲染上的bug都可以用layout属性来解决,"layout"决定了一个元素该如何显示以及约束其包含的内容,以及同其他元素交互和建立联系。响应和传递应用程序事件和用户事件等。这些渲染特性可以通过某些CSS特性被不可逆转的触发。(下面会介绍响应的css)

     当我们说一个元素“得到layout”或者“拥有layout”的时候是指:它的微软专有特性 haslayout  此时被设置为ture。

     一个元素是否有layout可能会引发下面的一些问题:

       第一:IE常见的浮动bug;

       第二:元素本身的一些属性异常处理;

       第三:容器及其子孙空白边重叠的情况;

       第四:实用列表时碰到的诸多问题;

       第五:背景图定位时偏差问题;

       第六:js时用到的浏览器处理不一致的问题;

   下面的标签,默认就具有layout

    

  • <html>, <body>

  • <table>, <tr>, <th>, <td>

  • <img>

  • <hr>

  • <input>, <button>, <select>, <textarea>, <fieldset>, <legend>

  • <iframe>, <embed>, <object>, <applet>

  • <marquee>

 下列 CSS 属性和取值将会让一个元素获得 layout:

  • position: absolute
    绝对定位元素的包含区块(containing block)就会经常在这一方面出问题。

  • float: left|right
    由于 layout 元素的特性,浮动模型会有很多怪异的表现。

  • display: inline-block
    当一个内联级别的元素需要 layout 的时候往往就要用到它,这也可能也是这个 CSS 属性的唯一效果–让某个元素拥有 layout。"inline-block行为"在IE中是可以实现的,但是需要注意的是: IE/Win: inline-block and hasLayout 

  • width: 除 “auto" 外的任意值
    很多人遇到 layout 相关问题发生时,一般都会先尝试用这个来修复。

  • height: 除 “auto" 外的任意值
    height: 1% 就在 Holly Hack 中用到。

  • zoom: 除 “normal" 外的任意值
    IE专有属性。不过 zoom: 1 可以临时用做调试。

  • writing-mode: tb-rl
    MS专有属性。

  • overflow: hidden|scroll|auto
    在 IE7 中,overflow 也变成了一个 layout 触发器,这个属性在之前版本 IE 中没有触发 layout 的功能。

  • overflow-x|-y: hidden|scroll|auto
    overflow-x 和 overflow-y 是 CSS3 盒模型中的属性,尚未得到浏览器的广泛支持。他们在之前版本IE中没有触发 layout 的功能。

  • 另外 IE7 的荧幕上又新添了几个 haslayout 的演员,如果只从 hasLayout 这个方面考虑,min/max 和 width/height 的表现类似,position 的 fixed 和 absolute 也是一模一样。

  • position: fixed

  • min-width: 任意值
    就算设为0也可以让该元素获得 layout。

  • max-width: 除 “none" 之外的任意值

  • min-height: 任意值。即使设为0也可以让该元素的 haslayout=true

  • max-height: 除 “none" 之外的任意值

        对于内联元素(可以是默认即为内联的比如 span 元素,也可以是 display: inline 的元素)

  • width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout 。而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 height 属性,所以设置 width 或 height 不能在此种情况下令该元素具有 layout。

  • zoom 总是可以触发 hasLayout,但是在 IE5.0 中不支持。

      具有"layout" 的元素如果同时也 display: inline ,那么它的行为就和标准中所说的 inline-block (inline-block在chrome,safari,opera中支持,其他浏览器不支持)很类似了:在段落中和普通文字一样在水平方向和连续排列,受 vertical-align 影响,并且大小可以根据内容自适应调整。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题,因为在别的浏览器中 display: inline 就是内联,不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block。

    

    重置haslayout的方法:

    重设以下属性为默认值将重置(或撤销)hasLayout,如果没有其他属性再添加 hasLayout 的话:

  • width, height (设为 “auto")

  • max-width, max-height (设为 “none")(在 IE 7 中)

  • position (设为 “static")

  • float (设为 “none")

  • overflow (设为 “visible") (在 IE 7 中)

  • zoom (设为 “normal")

  • writing-mode (从 “tb-rl" 设为 “lr-t)

display 属性的不同:当用"inline-block"设置了 haslayout = true 时,就算在一条独立的规则中覆盖这个属性为"block"或"inline",haslayout 这个标志位也不会被重置为 false。

把 mid-width, mid-height 设为它们的默认值"0″仍然会赋予 hasLayout,但是 IE 7 却可以接受一个不合法的属性"auto"来重置 hasLayout

转载于:https://www.cnblogs.com/GeekHacker/archive/2012/06/24/2560012.html

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值