CSS에서 여백 대 패딩을 사용하는 경우 [닫기]


2355

CSS를 작성할 때, 경우에 사용하는 결정에 사용되어야 할 특정 규칙이나 지침이 margin때 사용하는 방법은 padding?


padding초점 영역<a> 을 늘리고 싶을 때 태그에 사용하십시오 .
Josh Habdas가

답변:


1586

TL; DR : 기본적으로 테두리 나 배경이 있고 표시되는 상자 내부의 공간을 늘리려는 경우를 제외하고는 모든 곳에서 여백을 사용합니다.

패딩과 여백의 가장 큰 차이점은 세로 여백이 자동 축소되고 패딩이 그렇지 않다는 것입니다.

안쪽에 패딩이있는 두 요소를 고려하십시오 1em. 이 패딩은 요소의 일부로 간주되며 항상 유지됩니다.

따라서 첫 번째 요소의 내용, 첫 번째 요소의 패딩, 두 번째 요소의 패딩, 두 번째 요소의 내용으로 끝납니다.

따라서 두 요소의 내용이 2em분리됩니다.

이제 해당 패딩을 1em 여백으로 바꿉니다. 여백은 요소 외부에있는 것으로 간주되며 인접한 항목의 여백이 겹칩니다.

따라서이 예에서는 첫 번째 요소의 내용 1em과 결합 된 여백, 두 번째 요소의 내용으로 끝납니다 . 따라서 두 요소의 내용은 서로 1em다릅니다.

이것은 1em어떤 요소가 옆에 있는지에 관계없이 요소 주위에 간격 을 말하고 싶다는 것을 알 때 정말 유용 할 수 있습니다 .

다른 두 가지 큰 차이점은 클릭 영역과 배경 색상 / 이미지에는 패딩이 포함되지만 여백은 포함되지 않는다는 것입니다.

div.box > div { height: 50px; width: 50px; border: 1px solid black; text-align: center; }
div.padding > div { padding-top: 20px; }
div.margin > div { margin-top: 20px; }
<h3>Default</h3>
<div class="box">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>

<h3>padding-top: 20px</h3>
<div class="box padding">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>

<h3>margin-top: 20px; </h3>
<div class="box margin">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>


51
+1 타이포그래피 및 단락, 제목 및 목록의 순서를 스타일링 할 때 인접한 여백 붕괴 동작으로 인해 여백이있는 요소를 배치하는 것이 거의 항상 좋습니다.
Pete B

17
왜 세로 여백이 붕괴되고 가로 여백은 그렇지 않습니까? 즉 많은 사람들이 혼동 할 수
마르코스 페레이라

16
수직 여백은 블록 요소에 대해서만 축소됩니다. 인라인 블록 요소의 경우 여백이 수직 및 수평으로 추가됩니다. 따라서 블록 요소가 컨테이너를 채우므로 가로 여백이 축소되지 않는 문제가 확실하지 않습니다.
Mike

2
"왜 가로 여백은 그렇지 않으면 세로 여백이 무너 지는가?" 플로트를 사용하지 않고 블록 요소를 나란히 배치 할 수있는 메커니즘이 없습니다. 여백이 절대로 붕괴되지 않습니다 (수직조차도). 인라인 및 내용 (공백, 텍스트)은 중요하거나 테이블, flexbox, 열 사이의 간격에 특별한 동작이있는 열과 같은 다른 것들입니다. 즉 , 가능한 경우에도 수평 마진 붕괴 사용될 있는 곳은 없습니다
thomasrutter

5
또한 패딩이 요소의 전체 너비 / 높이에 포함되어 box-sizing: border-box;있으므로 width: 100px; padding-left: 20px;전체 너비가 100px이지만 box-sizing: content-box;컨텐츠 너비 계산에서 패딩이 분리되는 경우와 달리 컨텐츠 영역은 20px 줄어 듭니다. 내용 상자에서 총 너비가 120px입니다.
Jomar Sevillejo

1494

안쪽 여백은 안쪽에 있고 여백은 블록 요소 바깥쪽에 있습니다.

  • 여백을 사용하여 블록을 외부와 분리하십시오.
  • 안쪽 여백을 사용하여 내용물을 블록 가장자리에서 멀리 이동하십시오.

여기에 이미지 설명을 입력하십시오


63
그러나 정답은 아래 @pavon입니다. 인접한 요소의 여백이 겹치는 반면 패딩은 겹치지 않습니다. 즉, 총 분리는padding(A) + padding(B) + max(margin(A), margin(B))
necromancer

9
좋은 습관이 있습니다. 빨간색 테두리 를 사용 하여 여백과 여백을 확인하십시오. 때때로 우리는 <a>패딩과 여백으로 둘러싸인 일부 텍스트를 보유 하는와 같은 것을 엉망으로 만들 수 있습니다. 이 트릭을 사용하여 클릭 할 수있는 공간을 확인하십시오.
p3nchan

588

예제, 다이어그램, 심지어 '직접 시도해보기'로 이것을 설명하는 최고가 여기 있습니다 .

아래 그림은 그 차이에 대한 즉각적인 시각적 이해를 제공한다고 생각합니다.

여기에 이미지 설명을 입력하십시오

명심해야 할 것은 표준 호환 브라우저 ( IE quirks는 예외입니다 )는 콘텐츠 부분 만 주어진 너비로 렌더링하므로 레이아웃 계산에서이를 추적하십시오. 또한 테두리 상자는 부트 스트랩 3을 지원 하는 컴백을 보여 줍니다.



91

질문에 대한 더 많은 기술적 설명이 있지만 , 사용시기와 방법을 선택하는 데 도움이되는 여백과 패딩 에 대해 생각할 방법을 찾고 있다면 도움이 될 것입니다.

블록 요소를 벽에 걸려있는 그림과 비교하십시오.

  • 브라우저 창에서 바로 벽과 같다.
  • 내용은 단지 사진과 같다.
  • 이익률은 바로 액자 사진 사이의 벽 공간 같다.
  • 패딩은 단지 사진 주위에 매트 같다.
  • 테두리 단지 프레임의 경계 같다.

여백과 패딩을 결정할 때 벽의 다른 것들과 관련하여 요소를 배치 할 때 여백 을 사용 하고 요소 자체의 모양을 조정할 때 패딩 을 사용하는 것이 좋습니다. 여백은 요소의 크기를 변경하지 않지만 패딩은 일반적으로 요소를 1 더 크게 만듭니다 .

1 이 기본 상자 모델은 box-sizing속성 으로 변경할 수 있습니다 .


사실 나는 box-sizing: border-box"콘텐츠를위한 공간을 더 작게 만드는" 것에 동의하지 않습니다 . 여기에 동일한 패딩을 유지하고 "Active"를 추가 한 다음 호버에 "Deactivate"를 추가하면 2 개의 상자가있는 바이올린이 box-sizing있습니다. 여전히 상자를 확장합니다. 상자를 확장 할 수있는 가장 긴 패딩을 최대로 늘렸다
vapcguy

3
안녕하세요, 입력 해 주셔서 감사합니다. 내 선언은 일반적으로 요소에 너비 또는 높이가 선언되고 선언되지 않은 크기의 요소가 실제로 영향을받지 않습니다 border-box( jsfiddle.net/8yravLmL/1 참조 ). 혼란을 피하기 위해 대답을 더 미묘하게 만들 것입니다.
stvnrynlds

86

마진 vs 패딩 :

  1. 요소에서 여백은 해당 요소와 페이지의 다른 요소 사이의 거리를 만들기 위해 사용됩니다. 패딩은 내용과 요소의 경계 사이의 거리를 만드는 데 사용됩니다.

  2. 여백은 패딩이 요소의 일부인 요소의 일부가 아닙니다.

아래 여백 대 패딩 에서 추출한 이미지를 참조하십시오 -CSS 속성

여백 vs 패딩


다소 모호한 것이 아니라 경계를 참조하십시오. '여백은 안쪽에있는 동안 여백은 블록 요소의 바깥쪽에 있습니다.' 무엇의 외부 / 내부? 외부 / 내부는 정적 위치를 나타내며, 포함하는 요소의 크기에 영향을 미치지 않습니다. 이 대답은 나를 위해 그것을 명확히했습니다.
nicodemus13.

51

에서 https://www.w3schools.com/css/css_boxmodel.asp

다른 부분에 대한 설명 :

  • 내용 -텍스트와 이미지가 나타나는 상자의 내용

  • 패딩 -컨텐츠 주변의 영역을 지 웁니다. 패딩은 투명하다

  • 테두리 -패딩 및 내용을 둘러싼 테두리

  • 여백 -테두리 외부의 영역을 지 웁니다. 여백은 투명하다

CSS 박스 모델의 일러스트

실제 예 (값을 변경하여 재생) : https://www.w3schools.com/css/tryit.asp?filename=trycss_boxmodel


1
감사. 그림은 천 단어의 가치가 있습니다!
Catbuilts

33

여기에 방법을 보여줍니다 일부 HTML입니다 paddingmargin클릭 가능성에 영향을 미칠 및 배경 채우기는. 객체는 패딩에 대한 클릭을 수신하지만 객체 여백의 영역을 클릭하면 상위로 이동합니다.

$(".outer").click(function(e) {
  console.log("outer");
  e.stopPropagation();
});

$(".inner").click(function(e) {
  console.log("inner");
  e.stopPropagation();
});
.outer {
  padding: 10px;
  background: red;
}

.inner {
  margin: 10px;
  padding: 10px;
  background: blue;
  border: solid white 1px;
}
<script src="http://code.jquery.com/jquery-latest.js"></script>

<div class="outer">
  <div class="inner" style="position:relative; height:0px; width:0px">

  </div>
</div>


1
: 당신은 jsfiddle에 유사한 코드를 실행할 수 있습니다 jsfiddle.net/fschwiet/y74Nz/3
프랭크 Schwieterman

31

여백에 대한 것은 요소의 너비에 대해 걱정할 필요가 없다는 것입니다.

무언가를 줄 때와 마찬가지로 ' 맞춤 ' 을 유지하고 주변의 다른 요소를 방해하지 않도록 {padding: 10px;}요소의 너비를 20px 로 줄여야 합니다.

그래서 나는 일반적으로 패딩을 사용하여 모든 ' packed' 를 얻은 다음 약간의 조정을 위해 여백을 사용합니다.

알아야 할 또 다른 사항은 다른 브라우저에서 패딩이 더 일관되며 IE는 음수 마진을 잘 처리하지 못한다는 것입니다.


27

여백은 요소 주변 (영역 바깥 쪽)의 영역을 지우지 만 패딩은 요소의 내용 (테두리 내부) 영역을 지 웁니다.

여기에 이미지 설명을 입력하십시오

요소가 외부 여백에 대해 알지 못하므로 동적 웹 컨트롤을 개발하는 경우 가능하면 패딩 대 여백을 사용하는 것이 좋습니다.

때로는 여백을 사용해야합니다.


22

이 사이의 차이점을 알고 좋은 margin과를 padding. 몇 가지 차이점이 있습니다.

  • 여백은 요소의 외부 공간 이며 패딩은 요소의 내부 공간 입니다.

  • 여백은 요소의 테두리 외부 공간이며 패딩은 요소의 테두리 내부 공간입니다.

  • 여백은 auto : 값을 허용 margin: auto하지만 패딩을 자동으로 설정할 수 없습니다.

  • 여백은 임의의 숫자로 설정할 수 있지만 패딩은 음수가 아니어야합니다.

  • 요소의 스타일을 지정할 때 여백은 영향을받지 않고 (예 : 배경색) 영향을받습니다.


18

한 가지주의 할 점은 자동 축소 여백이 성 가시고 (요소에 배경색을 사용하지 않는 경우) 패딩을 사용하는 것이 더 쉬운 것입니다.


15

고급 마진 대 패딩 설명

padding요소에 내용을 배치하는 데 사용 하는 것은 부적절합니다 . 당신은 해야한다 활용할 margin자식 요소 대신. Internet Explorer와 같은 오래된 브라우저 marginInternet Explorer 4 에서 완벽하게 작동하는 경우를 제외하고는 상자 모델을 잘못 해석했습니다 .

사용하기 padding 적합한 경우 두 가지 예외 가 있습니다.

  1. 입력 요소와 같은 하위 요소를 포함 할 수없는 인라인 요소에 적용됩니다 .

  2. 당신은 공급 업체가 * 기침 * 모질라는 * 기침 * 당신이 것을 수정하고 (당신이 W3C와 WHATWG 편집자들과 정기적 교류를 유지하는 정도) 확신을 거부 높은 기타 브라우저 버그를 보상하는 있어야 작동하는 솔루션이 솔루션을 보상하는 버그 이외의 다른 스타일에는 영향을 미치지 않습니다.

너비가 100 % 인 경우 padding: 50px;효과적으로 얻을 수 width: calc(100% + 100px);있습니다. 이후 margin되어 있지 받는 추가 width예기치 않은 레이아웃 문제 원인 당신이 사용하지 않을 경우 marginchild elements대신 padding요소에 직접.

당신이있어 경우에 따라서 하지 않는 두 가지 중 하나를 수행 하지 요소에 만에 패딩을 추가 당신이받을거야 보장하기 위해 직접 아이 / 어린이 요소 (들)의 예상 에서 동작 하는 모든 브라우저를.


흥미 롭습니다! 해당 공급 업체 버그에 대한 링크가 있습니까?
Alex Angas

1
@AlexAngas Hope Wikipedia가 효과가 있습니까? en.wikipedia.org/wiki/Internet_Explorer_box_model_bug
John

14

먼저 차이점과 각 책임이 무엇인지 살펴 보겠습니다.

1) 여백

CSS 여백 속성은 요소 주위에 공간을 생성하는 데 사용됩니다.
여백 속성은 테두리 외부의 공백 크기를 설정합니다. CSS를 사용하면 여백을 완전히 제어 할 수 있습니다.
요소의 각 측면 (위쪽, 오른쪽, 아래쪽 및 왼쪽)에 대한 여백을 설정하기위한 CSS 속성이 있습니다.


2) 패딩

CSS 패딩 속성은 내용 주위에 공간을 생성하는 데 사용됩니다.
안쪽 여백은 요소의 내용 (테두리 내부) 주변 영역을 지 웁니다.
CSS를 사용하면 패딩을 완전히 제어 할 수 있습니다. 요소의 각 측면에 패딩을 설정하기위한 CSS 속성이 있습니다 (위쪽, 오른쪽, 아래쪽 및 왼쪽).

따라서 여백 은 요소 주위에 공간이며, 패딩 은 요소의 일부인 내용 주위에 공간입니다.

여백 및 패딩

코드 맨 의이 이미지는 여백과 테두리가 어떻게 서로 바뀌는 지, 테두리 상자와 내용 상자가 어떻게 다른지 보여줍니다.

또한 각 섹션을 아래와 같이 정의합니다.

  • 내용 -텍스트, 이미지 또는 다른 요소와 같은 실제 내용이있는 상자의 내용 영역을 정의합니다.
  • 패딩 -기본 컨텐츠를 포함 상자에서 지 웁니다.
  • 테두리 -내용과 패딩을 모두 둘러 쌉니다.
  • 여백 -이 영역은 다른 요소와 분리되는 투명한 공간을 정의합니다.

이 답변은 다른 곳에서 복사하여 붙여 넣은 것으로 보입니다. "codemancers"의 포함 된 링크는 답변과 관련이 없습니다.
Alex Angas

2
알렉스, 그림과 강조 표시된 답변 중 일부는 코드 맨이 작성한 것입니다. 의견을 남기고 투표하기 전에 미리 확인하십시오
Alireza

8

나는 항상이 원칙을 사용합니다.

상자 모델 이미지

이것은 Firefox에서 요소 검사 기능의 박스 모델입니다. 양파처럼 작동합니다.

  • 콘텐츠가 중간에 있습니다.
  • 패딩은 내용과 태그 내부의 가장자리 사이의 공간입니다.
  • 국경과 그 사양
  • 여백은 태그 주위의 공간입니다.

따라서 여백이 클수록 컨텐츠가 포함 된 상자 주위에 더 많은 공간이 생깁니다.

패딩이 클수록 컨텐츠와 그 안에있는 상자 사이의 공간이 늘어납니다.

상자가 특정 값으로 설정된 경우 상자 크기를 늘리거나 줄이지 않습니다.


6

여유

여백은 일반적으로 요소 자체와 서라운드 사이에 공간을 만드는 데 사용됩니다.

예를 들어 탐색 표시 줄을 만들 때 화면 가장자리에 붙어 흰색 간격이 생기지 않도록 사용합니다.

나는 일반적으로 테두리 안에 요소가 <div>있거나 비슷한 것을 사용할 때 사용 하고 크기를 줄이려고하지만 다른 요소 사이의 거리 또는 여백을 유지하려고합니다.

간단히 말해서 상황에 따라 다릅니다. 그것은 당신이하려는 일에 달려 있습니다.


1

여백은 상자 외부에 있고 패딩은 상자 안에 있습니다.


이것은 질문에 대답하지 않습니다.
TylerH

그는 단지 ??? (? 사용 패딩에 마진과 때를 사용하는) 이것에 대해 질문 @TylerH
saurabhgoyal795

네, 그가 요청한 것입니다. 각각을 사용할 때 어떻게 대답합니까?
TylerH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.