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

  1. 首先来看看现象。最经典的页面如下图
  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://stackoverflow.com/questions/6454019/background-center-with-chrome-bug[2] http://stackoverflow.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/gridview中滚动时重复加载图片的问题及解决方法

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

  4. 亲历谷歌 Chrome 浏览器弹窗境外广告的解决方法(图) | 技术乐园

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

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

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

  6. navigationItem.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. js实现多行文本超出一定字数显示省略号功能

    最近项目中遇到了一个关于超出一定字数用省略号显示的问题,其实这种形式很常见,公司简介.产品介绍啊里面都可能会用到,一行文字显示省略号很容易,多行就得想点办法了.在经过查阅.整理之后,我也算是实现了这个 ...

  2. WWW 资源下载与表单提交

    在注册与验证用户信息,以及非即时通信的游戏中,我们可以使用WWW类使用短链接来完成客户端与服务器数据的通信,今天我们将使用用POST方法来完成的用户注册与登录,在最后介绍下其它资源的加载. 首先使用P ...

  3. F9 开发之左树右表中的左树

    1 首先在前端应用树树控件 <div class="fui-left"> <div role="head" title="地区选择& ...

  4. Conversion to Dalvik format failed with error 1(android)

    1.如果不修改android sdk版本,则使用project clean 命令作用于某工程即可. (该处理方式只是在高版本中兼容了低版本工程,未真正意义上的升级) 2.如果修改android sdk ...

  5. sql第二天

    --基本格式 select * from tblclass --对于列进行限制 --格式一:取指定列 select cid,cname from TblClass select cname from ...

  6. Mac Java maven环境变量

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #fffff ...

  7. js获取计算的样式(非行间样式)

    function getStyle(obj, attr){ if(obj.currentStyle){ style = obj.currentStyle[attr]; //兼容IE8以下 }else{ ...

  8. CNN计算过程

  9. 取消a标签在移动端点击时的背景颜色

    一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-user-select: none; -m ...

  10. WEB服务器:Apache、Tomcat、JBoss、WebLogic、Websphere、IIS的区别与关系

    1)Apache  免费,世界使用排名第一的Web服务器.它可以运行在几乎所有广泛使用的计算机平台上.Apache的特点是简单.速度快.性能稳定,并可做代理服务器来使用.Apache是以进程为基础的结 ...