无论页面大小如何,都将标题图像居中

Posted

技术标签:

【中文标题】无论页面大小如何,都将标题图像居中【英文标题】:Centre a header image regardless of page size 【发布时间】:2011-09-22 10:55:43 【问题描述】:

我的网页有一个始终位于窗口顶部的标题图像。当窗口最大化时,标题图像居中,但在小窗口(或智能手机浏览器)中查看时,标题设置在窗口的左侧,右侧被裁剪。因为 header div 比页面内容宽,所以当窗口小于 header 时出现水平滚动条,而不是页面。

我希望页眉图像始终居中,如果窗口小于页眉,则左右两边都被裁剪。此外,只有在窗口宽度小于页面宽度时才会打开水平滚动条。

这张图片可能会更清楚地解释它:

http://postimage.org/image/49ne3k3o/

到目前为止我的代码:

CSS:

#headerwrap 
    position: relative;
    width: 998px;
    height: 100px;
    margin: 0 auto;
    pointer-events: none;

#header
    position: fixed;
    top: 0;
    width: 998px;
    margin: 0;
    background: url('../images/top.png') no-repeat;
    height:100px;
    z-index: 1;
    pointer-events: none;

html 实现:

<div id="headerwrap"\>
<div id="header">
</div>
</div>

(页面宽690px,页眉998px)

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您需要在具有position: fixed 的标题元素上设置left: 50%,然后应用该元素宽度一半的负边距使其居中。

#header 
  height: 100px;
  width: 998px;
  position: fixed;
  top: 0;
  left: 50%;
  margin-left: -499px;
  background: url('../images/top.png') no-repeat;

这是一个快速的小提琴:http://jsfiddle.net/blineberry/w8P2S/

你真的不需要这个包装器。

【讨论】:

当它比浏览器更宽时,相对定位的包装器有助于水平滚动条。删除它并调整以下元素的填充以解决固定定位的标题“不流畅”。【参考方案2】:

您确实需要负边距,就像 Brent 说的那样,但是该边距会根据用户的浏览器分辨率而有所不同,并且如果用户调整浏览器的大小可能会出现问题。

为了弄清楚那个边距,我使用了一个简单的 jquery 方法,每次都像一个魅力一样工作:

jQuery(window).resize(function() 
  var width = jQuery(document).width();
  var margin = (yourImageWidth-width)/-2;
  jQuery('.yourCssClassForYourHeader').css('margin-left', (margin)+'px');
);

此函数必须在第一次准备好的文档时调用,然后每次用户调整浏览器大小时都会调用它。

【讨论】:

【参考方案3】:

标题缩小以适应窗口是否可以接受? 另外,您是否需要这是一个纯 HTML / CSS 解决方案?

编辑:

这是我刚刚编写的一个小脚本,它将两个 div 的大小调整为浏览器窗口的大小。它不需要任何库(如 jQuery)。

<script type="text/javascript">
var clientWidth = document.documentElement.clientWidth;

document.getElementById('headerwrap').style.width = clientWidth + "px";
document.getElementById('header').style.width = clientWidth + "px";
</script>

或者如果你想在两边都有一个间隙,你可以这样做:

var padding = 50;
document.getElementById('header').style.width = (clientWidth - (padding * 2)) + "px";
document.getElementById('header').style.left = padding + "px";

所以,总结一下:

<script type="text/javascript">    
    var clientWidth = document.documentElement.clientWidth;
    document.getElementById('headerwrap').style.width = clientWidth + "px";

    var padding = 50;
    document.getElementById('header').style.width = (clientWidth - (padding * 2)) + "px";
    document.getElementById('header').style.left = padding + "px";
</script>

另外,将包装器更改为position: absolute; top: 0px,将内部 div 更改为position: absolute; top: 0px;

希望这会有所帮助!

Also, you have a forward slash in your wrapper div that needs to go :)

【讨论】:

纯 HTML 和 CSS 会很好,但不是必需的。如果缩小标题可以工作,那很好,我将如何实现它? 请稍等。我正在为你写些东西 只要改变 padding 的值来设置两边的间隙(不管浏览器窗口的大小,两边总是均匀的)【参考方案4】:

另一种选择是从 #header div 中删除 background 属性并将其放入 #headerwrap 中,如下所示:

编辑:

我添加了 cmets 来帮助解释 对 css 的更改的影响。

编辑@Brent 的回答:

布伦特的回答也不错,但它 确实提出了一个问题 内容定位自己。 http://jsfiddle.net/MarbleStrain/FdL44/ 注意 Test div 是如何不可见的 如果窗户不够大。一世 不想反驳布伦特的回答或任何东西 他的回答同样有效,具体取决于 你想要的流量。我只是 想指出区别 在两个结果之间。

#headerwrap 
    background: url('../images/top.png') no-repeat fixed center 0; /*this will put the image at the top-middle of this div*/
    width: 100%; /*this sets this div to whatever size the window is, which helps with removing the horizontal scrollbar*/
    height: 100px;
    text-align: center; /*this will move any child elements to the center (specifically for ie)*/
    pointer-events: none;
    overflow: hidden; /*this hides any child elements that are outside the range of this element*/

#header
    width: 998px;
    margin: 0 auto; /*center header for all browsers except ie*/
    height:100px;
    z-index: 1;
    pointer-events: none;
    text-align: left; /*makes sure that contents are lined up to the left (otherwise inherited from the parent which is center)*/

我还更改了一些样式以使所有内容都以跨浏览器为中心。为了不显示水平滚动条,您将 #headerwrapoverflow 属性设置为 hidden

这应该可以解决你的两个问题。

【讨论】:

这也是一个很好的答案,但是您的 cmets 应该真正使用正确的 /* */ 语法,所以这样做会不那么乏味 jsfiddle.net/w8P2S/6 ;) 哦,哈哈。对于那个很抱歉。我不再做太多的网络编程了。我主要做 c#,上面的语法可以正常工作。我会改变的。

以上是关于无论页面大小如何,都将标题图像居中的主要内容,如果未能解决你的问题,请参考以下文章

响应浏览器窗口 (CSS) 调整、缩放和居中图像

下一个 JS 图像居中而屏幕尺寸增加

在页面上居中(垂直和水平)显示一张(未知尺寸的)图像

Kineticjs如何在舞台上居中图像并根据浏览器调整大小

如果您不知道图像的大小,请在 Div 中垂直和水平居中图像?

如何创建具有居中文本和图像且大小设置为 match_parent 的按钮