margin看起来是一个相当简单的事情,但是,在本文中,咱们将看一些在使用margin一些让人迷惑有有趣的事情。 特别是,margin之间如何相互作用,以及 margin 重叠效果。
![]() 教程推荐:css视频教程 当我们学习CSS时,我们大多数人学到的第一件事是CSS中盒子的各个部分的细节,这部分通过叫做 CSS盒、模型。“盒模型”中的元素之一是 CSS1中描述了
CSS 盒模型CSS 盒模型指的是一个盒子的各个部分——
盒子的的四个 CSS2.1规范有一个演示盒模型的插图,还定义了用来描述各种盒子的术语,其中包括
现在有一个 Level 3 Box Model specification 的草案。这个规范引用了CSS2作为盒模型和 margin 重叠CSS1 规范定义了 当两个 在以下情况下,margin 会重叠:
依次来看看这些场景。 相邻的兄弟姐妹对 在下面示例中,有三个 html <div class="wrapper"> <div class="box example1"> margin-top: 50px; margin-bottom: 50px; </div> <div class="box example2"> margin-top: 20px; margin-bottom: 20px; </div> <div class="box example3"> margin-top: 3em; margin-bottom: 3em; </div> </div> css .wrapper {
border: 5px dotted black;
}
.example1 {
margin: 50px 0 50px 0;
}
.example2 {
margin: 20px 0 20px 0;
}
.example3 {
margin: 3em 0 3em 0;
}
body {
font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
margin: 2em 3em;
}
.box {
background-color: rgb(55,55,110);
color: white;
padding: 20px;
border-radius: .5em;
}运行效果:
完全空盒子如果一个盒子是空的,那么它的顶部和底部 html <div class="wrapper"> <div class="box"> A box </div> <div class="box empty"></div> <div class="box"> Another box </div> </div> css .wrapper {
border: 5px dotted black;
}
body {
font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
margin: 2em 3em;
}
.box {
background-color: rgb(55,55,110);
color: white;
border-radius: .5em;
}
.empty {
margin: 50px 0 50px 0;
}运行效果:
父元素和第一个或最后一个子元素margin 重叠让人猝不及防,因为它有时候不是很直观。在下面的示例中,有一个类名为 这个 html <div class="wrapper"> <div class="box"> Item 1 </div> <div class="box"> Item 2 </div> <div class="box"> Item 3 </div> </div> css .wrapper {
outline: 1px solid red;
}
.box {
margin: 50px;
}
body {
font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
margin: 2em 3em;
}
.box {
background-color: rgb(55,55,110);
color: white;
padding: 20px;
border-radius: .5em;
}运行效果:
这是因为子节点上的
仅块元素 margin 重叠在CSS2中,只指定垂直方向的 值得注意的,margin 只在块的方向上重叠,比如段落之间。 阻止 margin 重叠如果一个元素是绝对的定位,或者是浮动的,那么它的 例如,一个完全空的盒子,如果它有 html <div class="wrapper"> <div class="box"> A box </div> <div class="box empty"></div> <div class="box"> Another box </div> </div> css .wrapper {
border: 5px dotted black;
}
body {
font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
margin: 2em 3em;
}
.box {
background-color: rgb(55,55,110);
color: white;
border-radius: .5em;
}
.empty {
margin: 50px 0 50px 0;
padding: 1px;
}运行效果:
这背后是有逻辑,如果盒子是完全空的,没有 对于父元素和第一个或最后一个子元素 margin 重叠,如果我们向父级添加 ...
.wrapper {
border: 5px dotted black;
}
...
同样,这种行为也有一定的逻辑。如果出于语义目的而对元素进行包装,但这些元素不显示在屏幕上,那么你可能不希望它们在显示中引入大的 创建格式化上下文(BFC)BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。 BFC 可以阻止边距的重叠。 如果我们再看父元素和第一个或最后一个子元素的示例,可以在 wrapper 元素加上 ...
.wrapper {
outline: 1px solid red;
display: flow-root;
}
...
flex 和 grid 容器
还是以上面的例子为例,将 wrapper 改用 flex 布局: ...
.wrapper {
outline: 1px solid red;
display: flex;
flex-direction: column;
}
...
网站 margin 策略由于 这个解决方案并不能解决你可能遇到的问题,因为子元素的 对此,一个理想的解决方案是给元素设置 百分比 margin当你在CSS中使用百分比的时候,它必须是某个元素的百分比。使用百分比设置的 margin(或 padding)始终是父元素内联大小(水平写入模式下的宽度)的百分比。这意味着在使用百分比时,元素周围的 在下面的示例中,有一个200px 宽的 d当,里面是一个类名为 html <div class="wrapper">
<div class="box">
I have a margin of 10%.
</div>
</div>css * {
box-sizing: border-box;
}
.wrapper {
border: 5px dotted black;
width: 200px;
}
.box {
background-color: rgb(55,55,110);
color: white;
padding: 20px;
border-radius: .5em;
margin: 10%;
}
body {
font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
margin: 2em 3em;
}
我们在本文中一直在讨论垂直 margin ,然而,现代CSS倾向于以相对于流的方式而不是物理方式来考虑事情。因此,当我们讨论垂直边距时,我们实际上是在讨论块维度的边距。如果我们在水平写作模式下,这些 一旦使用逻辑的、流相关的方向,就更容易讨论块的开始和结束,而不是块的顶部和底部。为了简化这一过程,CSS引入了逻辑属性和值规范。这将流的相关属性映射到物理属性上。
还有两个新的快捷键,可以同时设置两个块或者两个内嵌块。
在下面示例中,使用了这些流相关关键字,然后更改了盒子的编写模式,你可以看到 html <div class="wrapper horizontal-tb">
<div class="box">
A box with a horizontal-tb writing mode.
</div>
</div>
<div class="wrapper vertical-rl">
<div class="box">
A box with a vertical-rl writing mode.
</div>
</div>css * {
box-sizing: border-box;
}
.wrapper {
border: 5px dotted black;
inline-size: 200px;
}
.horizontal-tb {
writing-mode: horizontal-tb;
margin-bottom: 1em;
}
.vertical-rl {
writing-mode: vertical-rl;
}
.box {
background-color: rgb(55,55,110);
color: white;
padding: 20px;
border-radius: .5em;
margin-block-start: 30px;
margin-block-end: 10px;
margin-inline-start: 2em;
margin-inline-end: 5%;
}
body {
font: 1.4em/1.3 "Gill Sans", "Gill Sans MT", Calibri, sans-serif;
margin: 2em 3em;
}
需要了解更多,可以阅读有关MDN上的逻辑属性和值的更多信息。
更多编程相关知识,请访问:编程学习!! 以上就是关于CSS margin的一些你需要知道的知识点的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
