Str*_*ior 9 html css internet-explorer-7
这里有一些代码来说明我遇到的问题.jsFiddle演示
<div class="normal">
<a href="#">Test</a>
<a href="#">Test longer</a>
</div>
<div class="ib blockbyclass">
<a href="#">Test</a>
<a href="#">Test longer</a>
</div>
<div class="ib">
<a href="#" style="display: block;">Test</a>
<a href="#" style="display: block;">Test longer</a>
</div>
Run Code Online (Sandbox Code Playgroud)
body{background-color: gray;}
div{float:left; margin: 5px;}
a {background-color: black; color: white;}
div.ib a {display: inline-block;}
div.normal > a {display: block;}
div.blockbyclass> a {display: block; }
Run Code Online (Sandbox Code Playgroud)
我有一种特定类型的链接,在大多数情况下需要呈现为内联块,但在某些情况下需要呈现为块元素.具体来说,我希望它们各自出现在自己的行上并占据包含div的整个区域.在这种特殊情况下,div
包含链接的设置为float,因此它将根据其中最大的链接调整自身大小.IE8,IE9,Firefox和Chrome正确呈现这些链接,但无论我做什么,IE7都拒绝忘记display: inline-block
规则.
如何让IE7以"块"模式显示这些元素?
更新:来自此处的评论:
问题在于div
浮动.当你浮动一个元素时,它将在页面普通流之外,因此,IE
将采用它width:0; height:0;
,当你在其中放入一些元素时,它们将创建它们自己的height
并且width
将呈现floated-element如何推动它们(我的英语真的很糟糕,很抱歉).第一步,A
就是inline-block
它height
的例子x
.当你做它block
它应该填充它的父母,但是,IE
记住,它的父母有width:0
.所以你应该inline-block
从div.ib a
OR中删除第一个属性,你可以为浮动元素创建一个固定宽度属性div
.
div { float: left; margin: 5px; width: 80px; }
Run Code Online (Sandbox Code Playgroud)
另外,据我所知,W3C建议浮动元素应具有固定宽度.- IE 6也需要一个固定的高度才能正常工作!
在另一种方式- 如果你能和你的解决方案可以让你 -是,改变先inline-block
于inline
只为IE
:
display: inline-block;
*display: inline;
Run Code Online (Sandbox Code Playgroud)
但width
解决方案(for div
)更加标准和灵活.
结束更新
但是,对于覆盖css-attribute
just in IE
,您有3种可选方法:
第一种方法是使用条件注释,使其内容IE
仅可见.一个完整的例子是这样的:
<!-- visible to IE less that 7 (6, 5, etc) -->
<!--[if lt IE 7]> <link href="/Content/ie6.css" rel="stylesheet" type="text/css" /> <![endif]-->
<!-- visible to IE 7 only -->
<!--[if IE 7]> <link href="/Content/ie7.css" rel="stylesheet" type="text/css" /> <![endif]-->
<!-- visible to IE 8 only -->
<!--[if IE 8]> <link href="/Content/ie8.css" rel="stylesheet" type="text/css" /> <![endif]-->
<!-- visible to IE 9 and above and also visible to other browsers -->
<!--[if gt IE 8]><!--> <link href="/Content/normal.css" rel="stylesheet" type="text/css" /> <!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)
如您所见,您有很多选项可以使用条件注释.
另一种方法是使用CSS
特殊的选择器,使一些选择器可见IE
并从其他浏览器隐藏它们.一个完整的例子是:
/* normal */
your-selector{
}
/* visible to IE 6 only */
* html your-selector{
}
/* visible to IE 7 only */
*:first-child + html your-selector{
}
/* visible to IE 7 and above */
html > body your-selector{
}
/* visible to IE 8 and above */
html > /**/ body your-selector{
}
Run Code Online (Sandbox Code Playgroud)我知道的第三种方法是使用IE
专门的css-properties:
/* normal selector */
your-selector{
/* normal property, visible to all browsers */
color: #FF0;
padding: 20px auto 35px;
/* use special properties in name/value for IE */
/* visible to ie 6 only */
_color: #FF0;
_padding: 15px auto 30px;
/* visible to ie 7 and below (7, 6, 5, ...) */
*color:#FF0;
*padding: 15px auto 30px;
}
Run Code Online (Sandbox Code Playgroud)如果您对任何部分有任何疑问或需要澄清,请与我们联系.
您的问题是hasLayout
由inline-block
设置触发的。引用http://www.satzansatz.de/cssd/onhavinglayout.html(我添加了重点):
“显示属性有所不同:虽然‘inline-block’设置了 haslayout = true,但稍后不会通过在另一个规则集中用‘block’或‘inline’覆盖该值来将该标志重置为 false。 ”
这与大多数hasLayout
可以重置的触发器不同。因此,我认为要解决你的问题,你需要逆向思考。您需要将标签block
设置为默认值a
,然后添加一个类以inline-block
在需要时获取您的标签。
有点像http://jsfiddle.net/mmpX3/33/,blockbyclass
我替换为inlinebyclass
(这确实是inline-block
)。
更新的说明:您可能注意到,当您block
从inline-block
该位置切换到该位置时,它“有点起作用”(文本行仍然向下移动)。这是因为它显示为一个块,但hasLayout
与不显示的块相反。我不知道你的具体情况,但如果你可以在包含上设置a ,那么我上面提出的“反向思考”的第二个解决方案是然后将 a与你的“重置”结合起来设置为,如下所示:http://jsfiddle.net/mmpX3/64/。width
div
width: 100%
block
更新的警告:我不知道您是否计划将其他 css 应用于标签a
,但如果其中任何一个触发hasLayout
,那么您将需要注意这一点(也许找到不同的方法)。例如,请参阅这个小提琴http://jsfiddle.net/mmpX3/69/,其中所有内容都设置为block
,但因为我在标签min-height
上放了一个a
,所以它仍然存在与原始问题相同的问题。
归档时间: |
|
查看次数: |
12997 次 |
最近记录: |