【原】如何实现IE6下块级元素的内容自动收缩

近期在做提示层组件的开发,遇到了一个IE6常见的bug....想出了几个解决的办法,挺有意思的,这里分享给大家。

由于IE6浏览器中,display:inline-block只能触发IE的haslayout属性使得元素具有布局属性,当对div元素使用display:inline-block,div元素仍然为块状布局而占据一行。

那么如何在IE6下使得块级元素的内容自动收缩呢?开发圆角小提示层模块,让它来解答这个问题。

结构和样式:

/**
  * @name      : prompt
  * @explain   : 圆角小提示层
  * @type      : 基类
  * @dependent : 无
  * @author    : peunzhang
  * @version   : 2012.9.6
  * @html      :
<!-- 圆角小提示层 [[ -->
<div class="prompt">
    <span class="ico-layer-arrow-up"><!-- 上指示图标 --></span>
    <a href="#" class="ico-close-gold" title="关闭">关闭</a>
    <div class="prompt-main">
        <div class="prompt-cnt"><a href="#">这里输入内容</a></div>
    </div>
</div>
<!-- 圆角小提示层 ]] -->
*/
.ico-layer-arrow-up,.prompt-main,.prompt-cnt,.ico-close-gold{display:inline-block;background:url(https://img.tenpay.com/res/wallet_v2/global/img/global.png?v=20120913) no-repeat;_background:url(https://img.tenpay.com/res/wallet_v2/global/img/global_png8.png?v=20120913) no-repeat;vertical-align:middle;overflow:hidden;}.prompt{position:absolute;padding:5px;font-size:12px;line-height:12px;font-family:\5B8B\4F53;}
.prompt .ico-layer-arrow-up{position:absolute;top:0;left:12px;background-position:-41px -27px;}.prompt .prompt-main{padding-left:7px;height:20px;background-position:-150px -501px;}
.prompt .prompt-cnt{padding-right:18px;height:20px;line-height:20px;line-height:21px\9;white-space:nowrap;vertical-align:top;background-position:right -501px;color:#7C6103;white-space:nowrap;}
.prompt .prompt-cnt a{color:#7C6103;}
.prompt .prompt-cnt a:hover{color:#0099FF;}
.prompt .ico-close-gold{position:absolute;top:12px;right:12px;}

 雪碧图的一角:

打开IE6浏览器,展现如下,宽度并不能自动收缩(这里浏览器窗口宽度被缩小到400px)

经过不断的测试,使用以下3种方法可以解决该bug

解决办法1:把span元素替换div元素,span元素设置display:inline-block呈行块布局,具有自动收缩的效果

<div class="prompt">
    <span class="ico-layer-arrow-up"><!-- 上指示图标 --></span>
    <a href="#" class="ico-close-gold" title="关闭">关闭</a>
    <span class="prompt-main">
        <span class="prompt-cnt"><a href="#">这里输入内容</a></span>
    </span>
</div>

 解决办法2:针对IE6浏览器,给最外层的div元素设置宽度:_width:1%,使得最外层的宽度自动收缩

.prompt{_width:1%}

解决办法3:针对IE6浏览器,触发块级元素的haslayout属性,并设置display:inline可使得块级属性呈现行块布局模式,详细可看《display:inline-block下的IE元素

.prompt-main,.prompt-cnt{_zoom:1;_display:inline;}

 模块开发完成,实现了内容自动收缩,根据实际的场景而选择最佳的使用方法,这里采用了第一种方案,优点是不写任何hack,缺点是可扩张性不佳。

 

 

作者:白树

出处:http://peunzhang.cnblogs.com/

时间: 2024-09-30 16:17:55

【原】如何实现IE6下块级元素的内容自动收缩的相关文章

CSS网页制作教程:display属性行内元素和块级元素

文章简介:内联(行内)元素.块级元素区别. A:行内就是在一行内的元素,只能放在行内:块级元素,就是一个四方块,可以放在页面上任何地方. B:说白了,行内元素就好像一个单词:块级元素就好像一个段落,如果不另加定义的话,它将独立一行出现.C:一般的块级元素诸如段落<p>.标题<h1><h2>....列表,<ul><ol><li> .表格<table>.表单<form>.DIV<div>和BODY<

【原】display:inline-block下的IE元素

通常我们想让内联元素为行块布局显示,有2种方法,最常见的是方法是.selector {float:left;......},第二种方法是.selector {display:inline-block;......},对于第二种方法,在IE浏览器中得到支持,测试结果会认为IE能识别display:inline-block属性,而最近查阅了资料后,得到结果并非如此...... display:inline-block ,简单来说就是将对象呈递为内联对象,但是对象的内容作为块对象呈递.这个属性目在主要

CSS文档流与块级元素(block)内联元素(inline)

将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流. 每个非浮动块级元素都独占一行, 浮动元素则按规定浮在行的一端. 若当前行容不下, 则另起新行再浮动. 内联元素也不会独占一行. 几乎所有元素(包括块级,内联和列表元素)均可生成子行, 用于摆放子元素. 有三种情况将使得元素脱离文档流而存在,分别是浮动,绝对定位, 固定定位.   基于文档流, 我们可以很容易理解以下的定位模式: 相对定位, 即相对于元素在文档流中位置进行偏移. 但保留原占位. 绝对定位, 即完全脱离文档

HTML5在a标签内放置块级元素示例代码

对比起XHTML来说,HTML5通过更简单的元素引起了一系列的思考,坦诚地讲,这真的是急需的简化.这些简化之一就是能够通过<a>标签 包装像div,h标签(h1...h6),和段落标记P 这些块级元素.你没看错:用一个A标签包裹块级元素(译者注: 在HTML5以前,a标签属于行内元素,而div,h1,p 等为块级元素,如果强行包裹,可能会被强行截断为多个a标签.当然,都是浏览器的事啦.). 示例代码:   复制代码 代码如下: <body> <a href="/ab

css position, display, float 内联元素、块级元素

position属性:position属性指出一个元素的定位方法.有4种可能值:static, relative, absolute or fixed: static:默认值,元素按照在文档流中出现的顺序渲染 absolute:绝对定位,元素相对于它的第一个被定位的祖先元素(非static)来进行定位 fixed:元素相对于浏览器window进行定位 relative:元素相对与它的正常位置进行定位,因此"left:20"就表示在元素正常位置的基础上,左移20像素的距离. float属

[HTML/CSS]盒子模型,块级元素和行内元素

目录 概述 盒子模型 块级元素 行内元素 可变元素 总结 概述 在div+css中,了解块级元素和行内元素还是非常有必要的,比如:对行内元素使用width属性就会失效.虽然自己不是做前端的,但是,在项目中,曾经也弄过从前端布局,也吃过这方面的亏.今天,群里有朋友问起这个,就趁着学习一下,也算是查漏补缺吧,虽然,谈不上精通,但是了解,还是很有必要的. 盒子模型 css盒子模型分为两种,一种是遵循w3c标准的标准盒子模型,另外一种就是IE盒子模型. 标准盒子模型 IE盒子模型 通过上面两张图可以看出

CSS常见内联元素和块级元素

[块元素(block element) ] * address - 地址 * blockquote - 块引用 * center - 举中对齐块 * dir - 目录列表 * div - 常用块级容易,也是css layout的主要标签 * dl - 定义列表 * fieldset - form控制组 * form - 交互表单 * h1 - 大标题 * h2 - 副标题 * h3 - 3级标题 * h4 - 4级标题 * h5 - 5级标题 * h6 - 6级标题 * hr - 水平分隔线 *

Css块内元素和行内元素

行内元素(inline element),又叫内联元素: 内联元素可容纳文本或者其它内联元素,常见的内联元素有<span>.<a>.<input>. 块元素(block element): 块元素一般都从新行开始,可以容纳文本.其它内联元素和其它块元素. 即使内容不满一行,块元素也要把整行占满,而且会换行显示,常见的块元素有<div>.<p>. 某些CSS属性可能对行内元素不生效,这与浏览器的版本和类型有关, 因此,要尽可能使用块元素定位. 例:

动态更改网页HTML元素(对象)内容_经验交流

动态HTML的出现为用户提供了一种基于传统标准HTML来创建交互式页面的机制.本文主要针对IE 5.0谈谈如何通过其提供的HTML文档对象(DOM)模型使用脚本添加.删除.修改页面中的HTML元素(对象)及元素(对象)内容. 动态更改网页HTML元素(对象)内容 HTML块级元素(对象)提供的4个可读写属性innerHTML.innerText. outerHTML.outerText来更改元素(对象)内容(如表1所示). 当设置innerHTML属性时,给定字符串完全替换现有的元素(对象)内容