IE/Chrome背景图片居中1px偏移解决方法

时间:2022-09-01 08:42:26

最近在支持行业运营的一个推广页面,遇到了非常规的页面banner图居中的问题,为了解决此问题,做了简单的测试,做了一个小结,为经常做大促页面的兄弟姐妹们提供参考解决方案。

  1. 首先来看看现象。最经典的页面如下图
    IE/Chrome背景图片居中1px偏移解决方法
  2. 从图中可以看到本页面为经典的顶部大图通栏,尺寸为1210px,但是为了兼顾所有分辨率,所以作为背景图片居中处理。内容区域为常用的经典栅格布局990px,设置margin:0 auto;大概的伪代码结构如下:
  3.  XHTML
    1
    2
    3
    4
    <div id=”content”>
        <div class=”top” style=”height:200px;background:url(bg.png) no-repeat 50% 0;”>顶部通栏banner区域</div>
        <div class=”main” style=”width:990px;margin:0 auto;”>内容区域</div>
    </div>

    理论上内容区域应该和上方背景图对齐。但是理论和现实总有差距的,在chrome和IE以及safari浏览器下面经常可以发现两部分并没有对齐,直接导致了很明显的一条线错位,所以不容忽视。但是,所有的又是不规律的,并不是必现,所以还是需要好好归纳一下现象。

  4. 归纳现象规律。以本案例为例子,经过测试发现:IE7/8/9/10居中问题处理的都很不错,都能够正常的显示,两部分吻合的很好;但是在IE6和高贵的chrome下面居然出现了问题(其他高富帅的opera和safari没测试,但是通过搜集网上现象,貌似safari也有和chrome一样的问题,opera没问题)。最后通过各种分辨率,以及不停的resize浏览器视窗,得出以下规律(所有前提是背景大图为1210px的偶数尺寸,不建议很蠢的用奇数的尺寸去导致所有浏览器都有问题):1)  IE6浏览器:还算比较有节操的,只有当页面宽度大于背景图片宽度(本例当中为1210px)且页面宽度为奇数尺寸时才会出现内容区域向左偏差1px的现象。2) Chrome浏览器:这家伙自作聪明,很没节操,一会儿向左一会儿向右偏移,搞不清楚总有问题。后来多次对比就是当页面宽度大于背景图宽度且页面宽度为奇数时,内容区域向左偏移1px(这个就很没节操只是偶尔显现,大部分时间没出现);当页面宽度小于背景图宽度且页面宽度为奇数时,内容区域向右偏移1px(这种现象是必现的)。大概总结出来就以上两点问题,也去网上搜罗了一下,以下同学也在呐喊,也做了一些原因分析:[1] http://*.com/questions/6454019/background-center-with-chrome-bug[2] http://*.com/questions/9752201/how-do-i-fix-1px-margin-on-google-chrome[3] http://philfreo.com/blog/fixing-safaris-1px-background-image-centering-problem/
  5. 查资料分析一下原因(没有官方定论,只是YY)。从大家讨论的结果当中看,应该是webkit内核的浏览器的一个通病,当页面宽度为奇数时,background-position:50% 0;结合其与背景图的宽度一起计算出图片应该定位的位置:背景图x坐标=(背景图所在的元素宽度-背景图宽度)*50%因此,可能浏览器器在处理这个奇数宽度带来的0.5像素的宽度时存在四舍五入的现象,但是对于这个规则的处理就如现象的描述一样。当页面宽度小于背景图宽度时,则存在负的0.5,当页面宽度大于背景图宽度时则存在正的0.5,所以总是出现了要么入,要么舍带来的偏移。而这个入与舍,IE6与chrome则表现出了不同的原则,也就有了以上不同的现象。而正常的浏览器我估计能更加精确的定位吧,至少按照这位哥的描述应该是:“While 1px isn’t the end of the world, it can really hurt a design!”
  6. 提供解决方案。每个地方都有人提供了各种尝试。例如把背景图设为奇数,但是此举绝对不靠谱,不建议尝试,当然如果你的背景图能够足够宽到跨越一切分辨率的时候可以采纳,例如5000px;或者如果是中间掏空的那种背景图可以掏空的时候比内容区左右各少1px,这个还可以;再或者html{margin-left:1px;},一样不是很靠谱,况且还有白边。。。经过上面的讨论以及各种尝试,目前个人觉得最好的/最没办法的通用解决方法就是一下这种了,如果你觉得还有更好的,欢迎交流。—————js专门hack—–!!!。。。对于IE6当页面宽度大于背景图宽度时,给内容区域增加一个padding-left:1px;的属性,其他情况去除这个属性。对于webkit内核的浏览器,则当页面宽度小于背景图宽度时,给背景图所在元素增加background-position:49.999% 0;属性;当页面宽度大于背景图宽度时则给背景图所在元素增加background-position:50.001% 0;当然要给浏览器增加resize监听事件,每次改变都要调整一下。以上hack不用区分页面宽度的奇数偶数情况都能正常显示了,不信你看看!贴一下基本代码:

var $ = jQuery,
isIE6 = $.browser.msie && $.browser.version == ‘6.0’,
isWebkit = $.browser.webkit,
fixDiv;
function fixWidthBug(){
var _w=$(document).width();
if(isIE6){
if(_w>1210){
fixDiv.css(‘padding-left’,’1px’);
}else{
fixDiv.css(‘padding-left’,’0px’);
}
}
if(isWebkit){
if(_w>1210){
fixDiv.css(‘background-position’,’50.001% 0′);
}else{
fixDiv.css(‘background-position’,’49.999% 0′);
}
}
return ;
}
function initPageWidth(){
if(!(isIE6 || isWebkit)){
return ;
}
if(isIE6){
fixDiv = $(‘div.backgroundimage-els’);
}
if(isWebkit){
fixDiv = $(‘div.content-els’);
}
$(window).on(‘resize’,fixWidthBug);
fixWidthBug();
}
initPageWidth();

文章转载请注明:IE/Chrome背景图片居中1px偏移解决方法-汇聚素材网

IE/Chrome背景图片居中1px偏移解决方法的更多相关文章

  1. 用CSS让网页背景图片居中的方法

    网页背景居中的方法有很多种的.这里介绍一些用CSS让背景图片居中的方法. 让背景图片居中的第一个方法是用像素设定,很多都用这种,但是也是最麻烦的: <div style="width: ...

  2. dedecms织梦系统后台验证码图片不显示的解决方法

    网站迁移后,dedecms织梦系统后台验证码图片不显示的解决方法通用解决方案-取消后台验证码功能因为没有验证码,不能进后台,所以修改php文件源代码:方法一:打开dede/login.php 找到如下 ...

  3. universal image loader在listview&sol;gridview中滚动时重复加载图片的问题及解决方法

    在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...

  4. 亲历谷歌 Chrome 浏览器弹窗*广告的解决方法&lpar;图&rpar; &vert; 技术乐园

    亲历谷歌 Chrome 浏览器弹窗*广告的解决方法(图) | 技术乐园 转 https://www.hack520.com/338.html 谷歌的 Chrome 浏览器是我非常喜欢的一款的浏览器, ...

  5. CSS设置浮动导致背景颜色设置无效的解决方法

    float浮动会使父元素高度塌陷,父级元素不能被撑开,所以导致背景颜色不能被撑开 解决方法: 对父元素设置高度 对父元素设置 overflow:hidden清除浮动 把父元素也设置为float浮动 结 ...

  6. navigationItem&period;rightBarButtonItem 设置背景图片,颜色更改解决的方法

    self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@& ...

  7. PS切图导出代码后出现的图片布局散乱的解决方法——table布局

    前言: 一般来说,大部分美工PS切图后导出的都是使用PS默认的table布局的页面,出现最多的异常是上传代码,替换图片后,发现图片布局散乱,完全不是想要的效果.轻微的是浏览器不兼容,只有部分浏览器可以 ...

  8. 微信图片不可显示java解决方法

    先看知乎:https://www.zhihu.com/question/35044484 场景: 微信上传了图片素材,返回了图片url,然后不能在img标签中正常显示. 原因是微信做了图片防盗连接. ...

  9. css图片居中,通过纯css实现图片居中的多种实现方法

    在网页布局中,图文排版是我们常用的,那么经常会遇到如何让图片居中显示呢,这篇文章将总结常用css实现图片居中的方法总结: html结构: <div class="demo" ...

随机推荐

  1. 51nod1102&lpar;数塔&rpar;

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1002 题意:中文题诶- 思路:简单dp 从底层往上递推,每个 ...

  2. BSF、BSR&colon; 位扫描指令

    ;BSF(Bit Scan Forward): 位扫描找1, 低 -> 高 ;BSR(Bit Scan Reverse): 位扫描找1, 高 -> 低   找到是 1 的位后, 把位置数给 ...

  3. iOS UIWebView清除缓存

    UIWebView清除Cookie: //清除cookies NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieSto ...

  4. input file 上传文件

    面试的时候遇到一个问题,要求手写的方式上传文件. 本来觉得很简单,但是结果怎么也成功不了. 前台: <form ID="form1" action="AcceptF ...

  5. ArcGIS Engine 下投影坐标和经纬度坐标的相互转换

    ArcGIS Engine 下投影坐标和经纬度坐标的相互转换 投影转经纬度 ); pPoint.Project(pSRF.CreateGeographicCoordinateSystem((int)e ...

  6. 解决ubuntu侧边栏固定应用单击无反应的问题

    Linux下有些绿色软件,不需要安装就可以双击启动,但有些程序在打开后直接在 Launcher 中右键选择 Lock to Launcher ,但是,有时候单击图标后并未启动应用,下面给出解决方法. ...

  7. fragment点击跳转到外部Activity后,怎么通过返回按钮返回

    楼主的情况应该是比较简单的吧,跟三楼说的一样,只要在D跳到下一个Activity的时候,D所在的Activity不要调用finish(),然后在下一个Activity关闭的时候直接调用finish() ...

  8. JavaScript基础学习&lpar;五&rpar;&mdash&semi;其他引用类型

         JavaScript定义了两个内置对象: Global和Math. 一.Global对象 1.URI编码方法      Global对象的encodeURI()和encodeURICompo ...

  9. centos7&period;4 搭建zabbix-server 3&period;4&period;5

    监控对服务器的重要性来说已经不需要我来一一赘述了,在众多的监控工具之中选择使用zabbix的原因是觉得它功能强大,可以引用的模板有很多,而且图形化做的草鸡棒. 废话就不多了,直接吃鸡. 本次搭建全部采 ...

  10. Jmeter&lpar;十二&rpar;&lowbar;打印时间戳

    Jmeter中提供了一种函数,可以打印时间戳,如下图 年: yyyy 月:MM 日:dd 时: HH 分: mm 秒:ss 关于时间戳的格式,可以*组合定义,这里我写成这样 yyyy-MM-dd H ...