此问题已在此处有答案:
Why does this CSS margin-top style not work?(15个回答)
两年前关闭。
我的css margins没有按照我希望的方式运行,我觉得我的header margin-top影响了它周围的div-tags。
**这是我想要和期望的:**x1c 0d1x
...但这是我最终得到的:
来源:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Margin test</title>
<style type="text/css">
body {
margin:0;
}
#page {
margin:0;
background:#FF9;
}
#page_container {
margin:0 20px;
}
h1 {
margin:50px 0 0 0;
}
</style>
</head>
<body>
<div id="page">
<div id="page_container">
<header id="branding" role="banner">
<hgroup>
<h1 id="site-title"><span><a href="#" title="Title" rel="home">Title</a></span></h1>
<h2 id="site-description">Description</h2>
</hgroup>
</header>
</div>
</div>
我在这个例子中夸大了页边距。h1标签上的默认浏览器页边距有点小,在我的例子中,我使用 Twitter Bootstrap,使用Normalizer.css 将默认页边距设置为10 px。不是那么重要,主要的是;我不能、不应该、* 不想 * 更改h1标记上的边距。
我想这和我的另一个问题类似;* Why does this CSS margin-top style not work? *.问题是我如何解决这个特定问题?
我读过类似问题的a few threads,但没有找到任何真实的的答案和解决方案。我知道添加padding:1px;
或border:1px;
可以解决问题。但这只会增加新的问题,因为我不希望在我的div-tag上添加填充或边框。
一定有一个更好的,最好的实践,解决方案?这一定是很常见的。
7条答案
按热度按时间lmvvr0a81#
将
overflow:auto
添加到#page
div。jsFiddle example
同时检查一下折叠的页边距。
j2cgzkjk2#
添加以下任一规则:
这是由
collapsing margins
引起的。请参阅有关此行为here的文章。文章称:
W3C规范对折叠边距的定义如下:
在本规范中,“折叠边距”一词是指两个或多个框(可能彼此相邻或嵌套)的相邻边距(没有非空内容、填充或边框区域,或将它们隔开的间隙)合并形成单个边距。
对于父子元素也是如此。
所有的答案都包括一种可能的解决方案:
在其他情况下,元素的边距不会折叠:
ffscu2ro3#
问题是父母没有考虑孩子的身高。添加
display:inline-block;
为我做到了。全CSS
See Fiddle
uyto3xhc4#
只需将
border-top: 1px solid transparent;
添加到#page
元素。来自w3.org
两个边距相邻,当且仅当:
7rfyedvj5#
添加以下规则:
这是由折叠页边距引起的。请参阅有关此行为的文章here。
文章称:
如果一个父元素没有任何顶部填充,或者顶部边距比它的第一个子元素少,那么元素会以一种方式呈现,使父元素看起来像有子元素的边距。所以这可能发生在页面上任何满足这些条件的地方,但它往往在页面的顶部最明显。
wyyhbhjk6#
其他答案中的解决方案对我不起作用。透明边框,inline-block等,都引起了其他问题。相反,我在我的祖先元素中添加了以下css:
根据您的情况,这可能会导致其自身的问题,因为它在最后一个子元素之后添加了额外的空间。
kmb7vmvb7#
我在为XenForo 2.1制作样式时的方法,但它应该对您有用:(请将LESS变量替换为实际值。此外,次要边距的绝对值应与前后伪元素的高度相同。)