내 div 여백이 겹치는 이유는 무엇이며 어떻게 수정할 수 있습니까?


81

이 div의 여백이 겹치는 이유를 이해할 수 없습니다.

.alignright {float: right}
#header .social {margin-top: 50px;}
#header .social a {display: inline-block;}
#header .social .fb {width: 64px; height: 1px; padding-top: 60px; overflow: hidden;}
#header .social .twit {width: 64px; height: 1px; padding-top: 60px; overflow: hidden;}
#header .contact {margin: 20px 70px 20px 0; font-size: 14px; font-weight: bold;}
#header .contact span {color: #FFFFFF;}
#header .search {margin: 10px 0 0;}
<div class="alignright">
    <div class="social">
        <a href="#" class="twit"></a>
        <a href="#" class="fb"></a>
    </div><!-- social -->
    <div class="contact">
        Get in Touch: <span>+44 10012 12345</span>            
    </div><!-- contact -->
    <div class="search">
        <form method="post" action="">
            <input type="text" value="" name="s" gtbfieldid="28">
        </form>
    </div><!-- search -->
</div>

그림


2
: 당신은 상황을 흥미 포맷에 대한이 문서 찾을 수 tjkdesign.com/articles/...
jensgram을

1
거기에서 사용하는 규칙 중 일부가 누락 된 것 같습니다. .alignright 내의 모든 요소도 부동입니까?
Joel Glovier 2010 년

답변:


80

마진이 무너진 것 같아요. 첫 번째 요소의 하단과 두 번째 요소의 상단 사이의 가장 큰 여백 만 고려됩니다.

예를 들어 두 단락 사이에 너무 많은 공간이없는 것은 매우 정상입니다.

두 개의 인접한 요소로이를 피할 수 없으므로 더 큰 여백을 확대하거나 줄여야합니다.

편집 : cf. W3C

다음과 같은 경우에만 두 개의 여백이 인접합니다.

  • 둘 다 동일한 블록 형식화 컨텍스트에 참여하는 인플 로우 블록 레벨 상자에 속합니다.
  • 라인 박스 없음, 클리어런스 없음, 패딩 없음 및 테두리 없음
  • 둘 다 수직으로 인접한 상자 모서리에 속합니다.

따라서 float요소를 흐름에서 제거하는 붕괴가 없습니다 .


마진을 원하는만큼 낮추십시오.
Kissaki 2010 년

편집 됨, 더 큰 여백 확대 또는 축소 또는 패딩 사용
MatTheCat

8
요소를 플로팅하면 둘 다에 대한 여백이 적용된다는 것을 알았습니다.
Atif Mohammed Ameenuddin 2011 년

10
나는 float끔찍한 부작용을 일으킬 수 있으므로 해킹 으로 사용 하는 것을 조심할 것 입니다. 나는 float원칙적 으로 사용 하는 것을 경계 합니다.
Andrew

hr에 높이를 주면 in flow block level box가됩니까? 그것을 시도
마누엘 에르난데스에게

49

여백은 패딩 (특정 너비에 패딩)과는 반대로 "최소 거리로 수행"입니다.

모든 요소에 그 거리를 두지는 않습니다.

보시다시피, get in touch 블록 하단 여백은 입력 상자에 마징됩니다. 이것이 여기서 활성화 된 마진입니다. 다른 여백, 입력의 상단 여백은 더 작고 실제로 요소를 밀어내는 블록 요소에 도달하지 않기 때문에 효과가 없습니다 . 2 개의 여백이 겹치고 서로 영향을주지 않습니다.


1

패딩을 사용할 수없고 실제로 여백이 겹치지 않도록해야하는 경우 한 가지 트릭이 있습니다.

.btn {
    /* hack for a 2px margin */
    border-top: 2px #fff solid;
    /* this is important if you have a background-color
    and don't want to see it underneath the transparent border*/
    background-clip: padding-box;
}

데모를 위해이 스 니펫을 실행하십시오.


0

조심 display: flex부모 요소에.

.flex {
  display: flex;
  flex-direction: column;
}

.block {
  display: block;
}


/* css for example only */
div {
  padding: 1em;
  background: #eee;
}
p {
  font-size: 20px;
  margin: 1em 0;
  background: pink;
  padding: 5px;
}
p:first-child {
  margin-top: 0;
}
<h1>display: flex</h1>
<div class="flex">
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor.</p>
  <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor.</p>
  <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
</div>
<h1>display: block</h1>
<div class="block">
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor.</p>
  <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
  <p>Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Curabitur blandit tempus porttitor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p>
  <p>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
</div>


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.