【问题标题】:Internet Explorer image rendering 1 pixel offInternet Explorer 图像渲染 1 像素关闭
【发布时间】:2016-09-18 18:25:16
【问题描述】:

我正在开发的网站 (schmuckzauberwelt.ch) 周围有一个精美的框架,可以根据可用的视口动态调整。为了保持主站点可用,框架不是一个图像,而是分成四块(上、右、下、左),围绕主站点定位。 html代码的要点是这样的:

<div id="wrapper">
<img id="mirror-top" src="mirror-long.png" alt="" name="mirror-top" /> 
<img id="mirror-bottom" src="mirror-long.png" alt="" name="mirror-bottom" />
<img id="mirror-left" src="mirror-short.png" alt="" name="mirror-left" /> 
<img id="mirror-right" src="mirror-short.png" alt="" name="mirror-right" />
<div id="mainsite">
[...]
</div> <!-- end of mainsite -->
</div> <!-- end of wrapper -->

这四个.png 是完全透明的;他们将 z-index 设为 1,以便将它们放在主站点上:

#mirror-top,
#mirror-bottom,
#mirror-left,
#mirror-right {
    z-index: 1;
    position: absolute;
background-repeat: no-repeat;
}

然后一堆媒体查询为它们提供正确的大小/位置并加载到实际帧图像中作为背景(这里有一个示例):

@media (min-height: 600px) and (max-height: 647px) and (min-width: 1000px),
(min-width: 1000px) and (max-width: 1079px) and (min-height: 600px) 
{
[...] 
#mirror-top,
#mirror-bottom {
width: 1000px;
height: 100px;
background-image: url(mirror-long-600px.jpg);   
}
#mirror-bottom {
top: 500px;
}
#mirror-left,
#mirror-right {
width: 100px;
height: 400px;
top: 100px;
background-image: url(mirror-short-600px.jpg);
}
#mirror-right {
    left: 900px;
}
}

最后,为了节省带宽,顶部和底部以及左右框架块实际上是相同的图像,它们只是在加载之前通过 css 翻转:

#mirror-bottom,
#mirror-right {
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}

现在,所有这些都可以在 Firefox、Chrome、Safari 和 Mobile Safari 中正常运行,从智能手机的显示屏尺寸一直到 27 英寸 iMac

但是

你猜对了:Internet Explorer 有一个问题:底部和右侧的镜子不知何故偏离了一个像素,模糊了背景图像并产生了难看的线条......

亲自查看:imgur.com album(第一个图像 windows 7 IE11,第二个图像 Windows 8.1 IE11)

除此之外,我注意到当窗口太小时一切都很好,最小的媒体查询会启动并使用滚动条将站点定位在左上方,而不是水平和垂直居中。 通用代码如下:

#wrapper {
z-index: 0;
background-color: white;
position: absolute;
top: 50%;
left: 50%;
}

除了最小的媒体查询之外,都有这样的内容:

#wrapper {
width: 1000px;
height: 600px;
margin-top: -300px;
margin-left: -500px;
}

在最小的一个中,这个:

#wrapper {
    width: 830px;
    height: 498px;
    top: 0%;
    left: 0%;
}

所以,问题是:我能做什么?或者至少,我可以从哪里开始调试?现在我完全迷路了......

我知道代码有点复杂,我尽力总结了一下,但大部分相关代码都分散在几个媒体查询中,所以也许你需要用 firebug 快速查看一下...

【问题讨论】:

    标签: html css internet-explorer


    【解决方案1】:

    这看起来像是典型的“内联块元素之间的空白”问题。

    我首先会尝试删除 HTML 代码中的回车,如下所示:

    <div id="wrapper"><!--
    --><img id="mirror-top" src="mirror-long.png" alt="" name="mirror-top" /><!--
    --><img id="mirror-bottom" src="mirror-long.png" alt="" name="mirror-bottom" /><!--
    --><img id="mirror-left" src="mirror-short.png" alt="" name="mirror-left" /><!--
    --><img id="mirror-right" src="mirror-short.png" alt="" name="mirror-right" /><!--
    --><div id="mainsite">
    [...]
    </div> <!-- end of mainsite -->
    </div> <!-- end of wrapper -->
    

    它实际上将回车符(导致空格问题)放在注释中,所以基本上就像您将所有 img 标记彼此相邻放置一样,但使用这种表示法,您可以保持代码缩进。

    【讨论】:

    • 感谢您的快速响应,但似乎没有这样做。可能是因为 display 设置为 block 而不是 inline-block...
    【解决方案2】:

    如果问题 与空格有关,您还可以尝试在所有相关元素/DIV/包装器上将line-heightfont-size 显式设置为 0 - 然后重新建立行 -中心内容区域的高度/字体大小。

    如果问题仍然存在,另一种呈现 HTML 布局的方式可能会解决您的问题,那就是将您的内容分成更多的 DIV - 非常粗略地 - 像这样;

    <div id="wrapper">
        <div id="top"><img id="mirror-top" /></div>
        <div id="middle">
            <div id="left"><img id="mirror-left" /></div>
            <div id="center">Lorem ipsum ...</div>
            <div id="right"><img id="mirror-right" /></div>
        </div>
        <div id="bottom"><img id="mirror-bottom" /></div>    
    </div>
    

    在本例中,您将动态调整大小应用于 div(可能使用百分比)——而不是图像——并将图像设置为 width: 100%;。您根本不需要设置图像的高度。

    div#leftdiv#right 可以浮动,div#center 使用边距/负边距保持独立。

    确保#top#left#right#bottom div 具有font-size: 0; - 因为它们不包含文本;这将解决图像可能存在的任何空白问题。

    此外,请确保您的包装 DIV 具有 background-color 以匹配灰色。这不是灵丹妙药,但它应该隐藏最外面的 1px 线,从而使问题变得不那么突出。

    【讨论】:

    • 感谢您的回复;我确实尝试了你建议的 div,但也不是这样。这也不是空白问题,但水平和垂直居中是问题所在。解决方案:使用 margin: auto 将网站垂直和水平居中;位置:绝对;顶部:0;左:0;底部:1; right: 0 而不是内容宽度和高度一半的负边距。它仅在浏览最大化的窗口时才有效......如果您在窗口的边框周围拖动,线条仍然会出现。似乎肯定是 IE 问题...在所有其他浏览器中都可以正常工作。
    猜你喜欢
    • 2012-09-10
    • 2023-03-31
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2021-06-02
    相关资源
    最近更新 更多