【问题标题】:CSS margin vh not working rightCSS 边距 vh 无法正常工作
【发布时间】:2017-02-24 04:26:09
【问题描述】:

    #grenze
    {
    	background: green;
    	height: 96vh;
    	width: 96vh;
    }
    
    #baukasten
    {
    	background: white; 
    	height: 86vh; 
    	width: 86vh; 
    	margin: 5vh;
    	border: 1px solid #DDDDDD;  
    	overflow: hidden;
    }
<div id="grenze">
   <div id="baukasten">   
   </div>
</div>

Margin 仅适用于左侧,但不适用于顶部,我尝试使用不同的浏览器,但始终相同。这里可能是什么问题?是bug吗?

编辑:

我不能在 grenze 上使用填充,因为

            $( ".dragresize" ).draggable({
                containment: "#grenze"
            });

不会做我需要的事情

【问题讨论】:

  • 你到底想达到什么目的?
  • 你真的需要完整的解释吗?我可以按照 Andrey Fedorov 建议的方式进行操作,但它不适用于 $( ".dragresize" ).draggable({ contains: "#grenze" });正确的方式。我只想让保证金按照它应该的方式工作
  • 嗨,试着在#baukasten --- children 元素上写 display:inline-block
  • 感谢 display:inline-block 成功了。上帝我讨厌 CSS !!

标签: html css


【解决方案1】:

这被称为margin collapsing,是 CSS 的一个特性,而不是错误。

父母和第一个/最后一个孩子

如果没有创建边框、内边距、内联内容、block_formatting_context 或清除来分隔 块的边缘顶部距其第一个子块的边缘顶部,或 没有边框、填充、内联内容、高度、最小高度或最大高度 将块的 margin-bottom 与它的 margin-bottom 分开 最后一个孩子,然后这些边距折叠。折叠的边距结束 在父级之外。

继续检查你的元素,你会看到边距在那里,它确实落在了它的父元素之外。

【讨论】:

    【解决方案2】:

    #grenze {
      background: green;
      height: 96vh;
      width: 96vh;
      padding: 5vh;
      box-sizing: border-box;
    }
    
    #baukasten {
      background: white;
      height: 86vh;
      width: 86vh;
      border: 1px solid #DDDDDD;
      overflow: hidden;
    }
    <div id="grenze">
      <div id="baukasten">
      </div>
    </div>

    #grenze {
      background: green;
      height: 96vh;
      width: 96vh;
    }
    
    #baukasten {
      background: white;
      height: 86vh;
      width: 86vh;
      transform: translate(5vh, 5vh);
      border: 1px solid #DDDDDD;
      overflow: hidden;
    }
    <div id="grenze">
      <div id="baukasten">
      </div>
    </div>

    【讨论】:

    • 我不需要填充,我正在做的东西只适用于边距
    • @AnneSchwarz 为什么?解释最初的问题
    • 好的。我添加了第二个选项。 )
    • 这工作 :D 就像添加 display:inline-block 到 baukasten