이 기사에서는 CSS 상자 모델을 이해하고 여백 축소란 무엇인지 소개합니다. 어떤 상황에서 마진 붕괴가 발생합니까? 그리고 해결책에 대해 이야기해 보세요.
CSS에서는 모든 요소가 하나씩 "상자"로 둘러싸여 있습니다. 블록 수준 상자(블록 상자
)와 인라인 상자(인라인 상자). block box
) 和 内联盒子 (inline box
)。
在 CSS 中,盒模型(box model)是在设计和布局时使用。
盒模型的定义可以分成这几部分:
width
和 height
.padding
相关属性设置。border
相关属性设置。margin
相关属性设置。块级盒子完整地应用了 CSS 盒模型,内联盒子只使用盒模型中定义的部分内容。
box-sizing
box-sizing
属性定义了浏览器应该如何计算一个元素的总宽度和总高度。
content-box
(默认值),即标准盒模型,width: 100px
指的是内容区会有 100px 宽。content(100px)
+ padding
+ border
border-box
,即替代(IE)盒模型,width: 100px
指的是 内容区 + 边框 + 内边距
的总和是 100px 宽。content
+ padding
+ border
= 100px
不论那种模型,margin 都是不计入实际大小 —— 当然,它会影响盒子在页面所占空间,但是影响的是盒子外部空间。
display
这里可以补充一个概念 -- 内部和外部显示类型。
display
属性的设置,比如 inline
或者 block
,来控制盒子的是内联还是块级。如果设置 display: flex
,在一个元素上,外部显示类型是 block
,但是内部显示类型修改为 flex
。 该盒子的所有直接子元素都会成为 flex
元素,会根据 弹性盒子(Flexbox
)规则进行布局。
还有一个特殊的值 -- display: inline-block
,它在内联和块之间提供了一个中间状态。这对于以下情况非常有用:不发生换行,但可以设定宽度和高度,也就是说实现了块级的部分效果:
width
和 height
属性会生效。padding
, margin
, 以及 border
会推开其他元素。HTML4 中,元素被分成两大类: inline
(内联元素) 与 block
(块级元素)。
一个行内元素只占据它对应标签的边框所包含的空间。
常见的行内元素有 a
、 b
、 span
、 img
、 strong
、 sub
sup
、 button
、 input
、 label
、 select
、 textarea
块级元素占据其父元素(容器)的整个空间,因此创建了一个“块”。通常浏览器会在块级元素前后另起一个新行。
常见的块级元素有 div
、ul
、ol
、 li
、 dl
、 dt
、 dd
、 h1
、 h2
、 h3
、h4
、 h5
、h6
、p
를 설정하여 설정할 수 있습니다. 너비
및 높이
.를 통해 설정됩니다. 패딩
관련 속성. 테두리
관련 속성을 통해 설정됩니다. margin
관련 속성을 통해 설정됩니다. box-sizing
box-sizing
속성은 브라우저를 정의합니다. 요소의 전체 너비와 전체 높이를 계산해야 합니다. 🎜content-box
(기본값)는 표준 상자 모델이며, 너비: 100px
는 콘텐츠를 나타냅니다. 영역 너비는 100px입니다. 내용(100px)
+ 패딩
+ 테두리
border-box
, 너비: 100px
는 콘텐츠 영역 + border + padding
의 합은 너비가 100px입니다. 내용
+ 패딩
+ 테두리
= 100px
🎜어떤 모델이든 여백은 실제 크기에 포함되지 않습니다. - 물론 페이지에서 상자가 차지하는 공간에 영향을 미칩니다. , 그러나 영향을 미치는 것은 상자의 외부 공간입니다. 🎜
display
inline
또는 display 속성을 설정합니다. code >block은 상자가 인라인인지 블록 수준인지 제어합니다. display: flex
를 설정하면 외부 디스플레이 유형은 block
이지만 내부 디스플레이 유형 유형이 flex
로 변경됩니다. 상자의 모든 직접 하위 요소는 flex
요소가 되며 유연한 상자(Flexbox
)의 규칙에 따라 배치됩니다. 🎜🎜인라인과 블록 사이의 중간 상태를 제공하는 특수 값인 display: inline-block
도 있습니다. 이는 다음 상황에 매우 유용합니다. 줄 바꿈이 발생하지 않지만 너비와 높이를 설정할 수 있으므로 일부 블록 수준 효과가 달성됩니다. 🎜너비
설정 및 높이
속성이 적용됩니다. padding
, margin
및 border
는 다른 요소를 밀어냅니다. block
(블록 수준 요소). 🎜a
, b
, span
, img
, strong
이 포함됩니다. >, 하위
sup
, 버튼
, 입력
, 라벨
, 선택
, textarea
🎜div
, ul
, ol
, li
, dl이 포함됩니다. 코드>, <code>dt
, dd
, h1
, h2
, h3
, >h4
, h5
, h6
, p
🎜Format (기본적으로) 인라인 요소는 래핑되지 않지만 블록 수준 요소는 래핑됩니다.
콘텐츠에서 (기본적으로) 인라인 요소는 데이터 및 기타 인라인 요소만 포함할 수 있습니다. 블록 수준 요소에는 인라인 요소와 기타 블록 수준 요소가 포함될 수 있습니다.
속성:
width
및 height
설정이 잘못되었습니다(line-height 설정 가능). width
和 height
设置无效(可以设置 line-height),padding
)、外边距(margin
) 和 边框(border
) 在 上下方向 不会对其他元素产生影响。width
和 height
属性可以发挥作用,padding
)、外边距(margin
) 和 边框(border
) 会将其他元素从当前元素周围“推开”块的上外边距(margin-top
)和下外边距(margin-bottom
)有时合并(折叠)为单个边距,其大小为单个边距的最大值(或如果它们相等,则仅为其中一个),这种行为称为 边距折叠。
2 个或多个毗邻的的普通流中的块元素垂直方向上的 margin 会折叠
创建了 BFC
的元素 和它的子元素/兄弟元素不会发生折叠
设置 padding
/ border
,一些具体的场景:
父元素的 margin-top
和子元素的 margin-top
发生重叠。
发生重叠是因为它们是相邻的,所以我们可以通过这一点来解决这个问题。我们可以为父元素设 border-top
、padding-top
值来分隔它们。
高度为 auto
的父元素的 margin-bottom
和子元素的 margin-bottom
发生重叠。
发生重叠一个是因为它们相 邻,一个是因为父元素的高度不固定。因此我们可以为父元素设置 border-bottom
、 padding-bottom
来分隔它们,也可以为父元素设置一个高度,max-height
和 min-height
也能解决这个问题。
是没有内容的元素,自身的 margin-top
和 margin-bottom
发生的重叠。
我们可以通过为其设置 border
、padding
或者高度来解决这个问题。
BFC
的因素float
(除了 none)overflow
(除了 visible)display
(table-cell / table-caption / inline-block)position
padding
), 여백(margin
) 및 테두리(border
)는 width
및 height
속성은 🎜🎜Padding(padding
), 외부 역할을 할 수 있습니다. 여백 간격(margin
) 및 테두리(border
)는 현재 요소에서 다른 요소를 "밀어냅니다" 🎜🎜🎜🎜🎜🎜🎜🎜margin-top
)과 아래쪽 여백(margin-bottom
)이 병합되는 경우가 있습니다(collapsed) ) )는 크기가 단일 여백의 최대값(또는 동일한 경우 그 중 하나만)인 단일 여백이며, 🎜margin collapsing🎜이라는 동작입니다. 🎜BFC
🎜를 생성한 요소와 해당 하위 요소/형제 요소는 접히지 않습니다.🎜🎜🎜🎜패딩
설정 / 테두리
, 일부 특정 시나리오: 🎜🎜🎜🎜상위 요소의 margin-top
이 하위 요소의 margin-top
과 겹칩니다. . 🎜🎜인접하기 때문에 겹침이 발생하므로 이를 이용하면 문제를 해결할 수 있습니다. 상위 요소에 대해 border-top
및 padding-top
값을 설정하여 이를 구분할 수 있습니다. 🎜🎜🎜🎜높이가 auto
인 상위 요소의 margin-bottom
이 하위 요소의 margin-bottom
과 겹칩니다. 🎜🎜하나는 인접해 있어서 겹치는 부분이 있고, 다른 하나는 상위 요소의 높이가 고정되어 있지 않아서 발생합니다. 따라서 상위 요소에 대해 border-bottom
및 padding-bottom
을 설정하여 이를 구분하거나 상위 요소의 높이를 max- 높이
및 최소 높이
도 이 문제를 해결할 수 있습니다. 🎜🎜🎜🎜은 콘텐츠가 없는 요소로, 자체 margin-top
과 margin-bottom
이 겹칩니다. 🎜🎜테두리
, 패딩
또는 높이를 설정하여 이 문제를 해결할 수 있습니다. 🎜🎜🎜🎜🎜BFC
🎜🎜🎜🎜float
를 트리거하는 요소(없음 제외)🎜🎜 오버플로
(표시 제외) 🎜🎜display
(table-cell / table-caption / inline-block) 🎜🎜position
(정적/상대 제외) 🎜🎜 🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜위 내용은 마진 붕괴란 무엇입니까? 어떤 상황에서 나타나나요? 어떻게 해결하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!