如何减少firefox缩放时浮动布局包装

Dmi*_*kov 17 css firefox zoom word-wrap css-float

给出以下HTML.它显示两列:#left,#right.两者都是固定宽度并具有1px边框.宽度和边框等于上部容器的大小:#wrap.

当我通过按Ctrl +缩小Firefox 3.5.2时 - 列被包装(演示).

怎么预防这个?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Test</title>
    <style type="text/css">
      div           {float:left}
      #wrap         {width:960px}
      #left, #right {width:478px;border:1px solid}
    </style>
  </head>
  <body>
    <div id="wrap">
      <div id="left">
        left
      </div>
      <div id="right">
        right
      </div>
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Яeg*_*ght 13

尝试切换到不同的盒子模型,如下所示:

#left, #right 
{ 
  width:480px;
  border:1px solid;
  box-sizing: border-box;

  /* and for older/other browsers: */
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
  -webkit-box-sizing: border-box
}
Run Code Online (Sandbox Code Playgroud)


小智 8

德米特里,

当缩放后浏览器计算div的新宽度时,它不会减少与单个960px成比例的两个478px + 4px的边框元素.所以你最终得到这个:

你原来的风格:

#wrap equals 960px wide
#left & #right, plus border equals 960px wide
Run Code Online (Sandbox Code Playgroud)

一切都很合适.

缩小缩放(ctrl-)

#wrap equals (approx.) 872px wide.
#left, #right, plus border eqauls 876px wide.
(left and right reduce to approx 436px each, plus 4 px of border)
Run Code Online (Sandbox Code Playgroud)

#wrap的内容太宽了.要查看和测量它,只需将背景颜色应用于#wrap.

要修复,请从#wrap中删除宽度.因为它是浮动的,它会闪烁以适应内容.但是,您应该为浮动元素应用宽度,而div {float:left}将它应用于#wrap.

删除样式div {float:left}并将float:left添加到#left,#right.

#left, #right {float:left;width:478px;border:1px solid}
Run Code Online (Sandbox Code Playgroud)

如果你想让#wrap居中,那么你需要再次为它声明一个宽度并添加margin:0 auto;,在这种情况下你会再次出现这个问题[编辑:或者你可以,如克里斯指出的那样,将宽度设置为100%].因此,只需重新计算#left,#right的宽度,以便它们适合.

我的理解是,在父元素和子元素的宽度之间留一点喘息的空间,无论如何都可以避免这种问题.


Bra*_*ang 1

我不确定我完全理解你的情况。减小缩放实际上应该是缩小。你是说当你缩小时,列会环绕吗?

您应该在 CSS 中使用以下代码浮动这些 div:

#container {width: 960px}
#left {float: left}
#right {float: right}
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您可以尝试通过调整宽度来在列之间留出一个小空间,以补偿一些小的浏览器差异。

编辑(忽略上面):

鉴于您向我提供了更多信息,我需要告诉您,浏览器在调整大小时会进行舍入,而拥有这些精确的像素完美大小并不是最明智的做法。

相反,您可以让一个 div 具有绝对宽度,而另一个 div 具有自动宽度,如下所示:

#container {width: 960px;}
#left {width: 478px;}
#right {width: auto;}
Run Code Online (Sandbox Code Playgroud)

这将使浏览器在#wrap div 中占用尽可能多的#right 空间。请务必设置换行的宽度,否则它将占据窗口的 100%。

我希望这有帮助!

编辑

右侧非常接近您的固定宽度,因为您已经定义了容器的宽度,所以它只是容器宽度减去左侧的宽度。这只是为了确保调整窗口大小时不会出现差异。

我知道它不会占用整个空间区域,但是,随着内容的添加,它的最大宽度是容器左侧的宽度。您想应用背景吗?在这种情况下,将右侧背景设置为容器背景,然后将左侧设置为左侧背景(确保它覆盖一半)。

我希望我有所帮助。