【问题标题】:Padding and Margin error when auto-resizing divs with jQuery使用 jQuery 自动调整 div 大小时的填充和边距错误
【发布时间】:2013-10-24 00:47:27
【问题描述】:

如果您能帮助我解决以下问题,我将不胜感激。

我正在尝试使用 jQuery 自动调整 div 的大小以适应不同的屏幕尺寸。问题是当我尝试使用一些填充或边距时,整个布局就会分崩离析。

无论屏幕尺寸有多大,内边距 + 边距应始终为 5 px + 5 px。

Here is what I want to get.

Here is how it looks like with the code below.

JQuery:

  $(document).ready(function() {
      winSize();
      $(window).resize(function(){
          winSize();
      }); 
  });

  function winSize()
  {
      window_height = $(window).height();
      window_width = $(window).width();

      $("#container").css('height', window_height).css('width', window_width);    
      $("#leftArea").css('height', window_height ).css('width', window_width * 0.1);

  }

CSS:

body {
    padding: 0px;
    margin: 0px;
}
#container {
    background-color: red;
}
#leftArea {
    background-color: gray;
    padding: 5px;
}
#innerArea {
    margin: 5px;
    background-color: green;
    width: 100%;
    height: 100%;
}

HTML:

<div id="container">
  <div id ="leftArea">
    <div id="innerArea"> </div>
  </div>
</div>

提前非常感谢!

【问题讨论】:

  • 您总是希望内边距为 5px 或相对于宽度是动态的?
  • 我总是希望内边距为 5px。非常感谢您的提问。

标签: jquery html css margin padding


【解决方案1】:

您可以使用边框代替测试的填充/边距:

http://jsfiddle.net/remus/JkmYn/

#leftArea {
    background-color: gray;
}
#innerArea {
    border: 5px solid gray;
    background-color: green;
    width: 100%;
    height: 100%;
}

【讨论】:

  • 非常感谢您的快速回答。老实说,将来我想为内部(绿色)div 使用不同的边框。有解决方案吗?我真的很喜欢当前的解决方案,但正如链接上显示的那样,灰色 div 的大小将比 RED 容器 div 长。 (我不知道为什么,但它不会是我最初想要的浏览器窗口的大小。)再次感谢您,我真的很尊重您的时间。
  • 别担心!有很多方法可以做到这一点,不幸的是,让它只使用边距/填充的唯一其他方法,你会挖掘负边距或更糟糕的百分比宽度 div。
【解决方案2】:

使用这个 CSS:

jsFiddle

#leftArea {
    background-color: gray;
    padding:5px;
    box-sizing: border-box;
}
#innerArea {
    background-color: green;
    width: 100%;
    height: 100%;
}

更新:

你可以不用 JQuery 而只用 CSS:

jsFiddle: with CSS

jsFiddle: with JQuery

使用这个 CSS:

body {
    padding: 0px;
    margin: 0px;
    overflow:hidden;
}
#container {
    background-color: red;
    width:100vw;
    height:100vh;
}
#leftArea {
    background-color: gray;
    border:5px solid green;
    box-sizing: border-box;
    height:100vh;
    width:10vw;
}

HTML:

<div id="container">
    <div id="leftArea">
        <div id="innerArea"></div>
    </div>
</div>

您可以为任何您想要的框设置边距和内边距,但不要忘记box-sizing: border-box

box-sizing 的跨浏览器:source

textarea { 
    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
    box-sizing: border-box;         /* Opera/IE 8+ */
}

【讨论】:

  • 非常感谢,看来真的很有用。虽然我对左 div 的高度仍有疑问。应该和红色div一样长,相当于浏览器窗口的高度。非常感谢。
  • 非常感谢。我真的很佩服你提供了这么多帮助。它在 Google Chrome 中运行良好,但 Firefox 22.0 对代码的响应不佳。我想制作一个基于该布局的跨平台应用程序,因此让它在所有主要浏览器中运行非常重要。再次感谢您。
  • 嗨@user2311769 让它在firefox中工作添加前缀到css所以添加行-webkit-box-sizing:border-box; -moz-box-sizing: 边框;
  • 跨浏览器添加@user2311769。看jsFiddle
  • 非常感谢,非常感谢您的帮助。我不想这么说,但我仍然有一个问题。我想使用 jQuery 的原因是因为我希望在用户调整浏览器窗口大小时调整 div 的大小。如果我重新加载页面,它会很好地工作,但是当用户调整窗口大小时它也不会响应事件。非常感谢,我希望有一天我能知道这么多,对其他初学者有所帮助。
【解决方案3】:

我同意 r3mus,只是补充一下,您可能需要调整内部区域的高度

body {
     padding: 0px;
     margin: 0px;
 }
 #container {
     background-color: red;
}
 #innerArea {
     border: 10px solid gray;
     background-color: green;
     height: 95.1%;
    width:100%;
 }

【讨论】:

  • 非常感谢您的回答。这真的很有帮助,但我仍然有一个问题。 1.) 我想为路上的绿色 div 使用不同的边框颜色。 2.) div 的高度与浏览器窗口的高度不匹配。再次感谢您的宝贵时间。
【解决方案4】:

这个怎么样?

http://jsfiddle.net/beauxjames/dZVEA/

一个小的包装器通常可以解决问题:

<div id="container">

    <div id ="leftArea">
        <div class="demoWrapper">
            <div id="innerArea">fff </div>    
        </div>        
    </div>

</div>

【讨论】:

  • 非常感谢。尽管它很好地解决了填充问题,但不幸的是它导致了整个布局的一些变化。 1)容器(红色)div上有一个不需要的填充,2)容器div没有浏览器屏幕大小那么高。再次感谢您。
  • 只需更改#container 上的 margin...更改 10px --> 0;
  • 重点是让您了解添加包装器如何让您更好地控制放置/位置。
  • 我只需要把它放到我的代码中:ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow" target="_blank">w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 现在完美运行。非常感谢您的出色解决方案。我将永远感激你的帮助,也感谢你所有的帮助。也许,如果你有时间,如果你在一个非凡的评论中告诉我们为什么使用 Wrapper 很重要,那会很有趣。再次感谢您。
  • 对不起,我取消了应答按钮,但是有一个问题。我希望绿色 div 的高度为 100%。可以以某种方式完成吗?非常感谢您。
猜你喜欢
  • 1970-01-01
  • 2014-03-24
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多