【问题标题】:IE7 and display block on HTML strictIE7和HTML严格的显示块
【发布时间】:2023-03-20 05:42:02
【问题描述】:

尽管在 css 中设置为 display:block,但我在处理占用额外空间的图像时遇到了困难。这只发生在 IE7 上。当我删除 HTML 代码中标签之间的所有空格时,问题就解决了,但这不是一个合适的解决方案。

我听说过一些 IE7 hack,比如设置固定宽度/高度和以下 css:

display:inline-block;
zoom:1;
*display:inline;

但这对我不起作用(可能是因为我使用的是严格的 XHTML)。

我正在处理的页面如下:http://www.morgana.nl/slaaptest/afspraak.html

上面的图片是设置为 display: block 的图片,后面是蓝色背景的 div。

图片链接:http://www.morgana.nl/temp/ie7-display-block.png

希望得到一些有用的帮助...

【问题讨论】:

    标签: xhtml internet-explorer-7 block strict


    【解决方案1】:

    由于您使用的是 XHTML,我假设您希望您的标记是语义的。所以从技术上讲,/siteimages/forms/bottom.jpg/siteimages/forms/top.jpg 不是具有任何意义的图像,与人们的照片相比。 既然只是装饰,为什么不使用background CSS 属性设置它们的样式并将它们应用到您的<div> 容器中以达到相同的效果?

    例如。

    .roundedTopBar {
        padding-top: 10px;
        background: transparent url('/siteimages/forms/top.jpg') 0 0 no-repeat;
    }
    .roundedBottomBar {
        padding-bottom: 10px;
        background: transparent url('/siteimages/forms/bottom.jpg') 0 100% no-repeat;
    }
    
    <div class="half2 roundedTopBar">
       <div class="roundedBottomBar">
          <div class="formsContainer">
            ...
          </div>
       </div>
    </div>
    

    补充:如果您确实想知道如何完成您最初提出的问题,解决方案是不要使用display: inline-block,因为 IE 7 搞砸了。使用float: left; clear: both; display: block; 并确保清除父容器中的浮动。

    例如。这是来自您网站的 sn-p,我将 newCSS 添加到命名空间中我添加的新内容,您可以使用任何您认为合适的选择器名称

    CSS:

    .newCSS .clearFloat{
        overflow: hidden;
        width: auto;
    }
    .newCSS .inlineBlock {
        clear: both;
        display: block;
        float: left;
    }
    

    标记:

    <div class="half2 clearFloat newCSS">
        <img src="http://www.morgana.nl/siteimages/forms/top.jpg" width="441"
        height="12" class="block inlineBlock" alt=""/>
        <div class="formsContainer block inlineBlock">
            <div class="formsInnerContainer" style="height:474px">
            form was here
            </div>
        </div>
        <img src="http://www.morgana.nl/siteimages/forms/bottom.jpg" class="block inlineBlock" alt=""/>
    </div>
    

    见小提琴:http://jsfiddle.net/amyamy86/c34ny/

    如果你在 IE7 上查看(它不喜欢 jsFiddle):http://jsfiddle.net/amyamy86/c34ny/embedded/result/

    【讨论】:

    • 你说的很对。最好不要将前景图像用于设计目的,因为它们没有非技术意义。如果我是对的,图像自然是内联元素,这就是为什么在 IE7 中不支持 display:block 的原因。但是当我确实需要使用前景图像时,为什么上述解决方法在 IE7 中不起作用?我想这是因为我使用的是严格的文档类型(尚未测试)...
    • 你是最棒的。谢谢你的帮助。一个相关的问题。我开始使用间隔图像进行布局,因为当使用 div 时,我会得到一个非常大的 css 文件,因为我无法在语义化的同时在内联 css 中设置 div 的宽度和高度。您对此有解决方案吗?
    • @Hans 你不必使用间隔图像。为什么不创建通用的 CSS 类名,例如:spacer_horizontal { div: block; padding-bottom: 10px; } 等等....这样你就可以将这些通用的 spacer 类名应用到你想要的任何东西上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2014-03-10
    • 1970-01-01
    相关资源
    最近更新 更多