너비가 각각 50 % 인 두 개의 인라인 블록 요소가 한 행에 나란히 맞지 않습니다.


87
<!DOCTYPE html>
<html>
<head>
<title>Width issue</title>
<style type="text/css">
body {
    margin: 0;
}
#left {
    width: 50%;
    background: lightblue;
    display: inline-block;
}
#right {
    width: 50%;
    background: orange;
    display: inline-block;
}
</style>
</head>
<body>
    <div id="left">Left</div>
    <div id="right">Right</div>
</body>
</html>

JSFiddle : http://jsfiddle.net/5EcPK/

위 코드는 #left div와 #right div를 나란히 하나의 행에 배치하려고합니다. 그러나 위의 JSFiddle URL에서 볼 수 있듯이 이것은 사실이 아닙니다.

div 중 하나의 너비를 49 %로 줄이는 문제를 해결할 수 있습니다. http://jsfiddle.net/mUKSC/를 참조하십시오 . 그러나 이것은 두 div 사이에 작은 간격이 나타나기 때문에 이상적인 솔루션이 아닙니다.

문제를 해결할 수있는 또 다른 방법은 두 div를 모두 플로팅하는 것입니다. http://jsfiddle.net/VptQm/을 참조하십시오 . 이것은 잘 작동합니다.

그러나 나의 원래 질문은 남아 있습니다. 두 div가 인라인 블록 요소로 유지 될 때 왜 나란히 맞지 않습니까?

답변:


139

inline-block요소를 사용할 때 항상 whitespace 해당 요소 사이문제가 있습니다 (이 공간은 약 4px 너비입니다).

따라서 divs둘 다 너비가 50 %이고 그 whitespace(~ 4px) 너비가 100 % 이상이므로 끊어집니다. 문제의 예 :


이를 해결하는 몇 가지 방법이 있습니다.

1. 이러한 요소 사이에 공백이 없습니다.

2. HTML 주석 사용

3. 부모 font-size를로 설정 한 0다음 inline-block요소에 값 추가

4. 그들 사이에 음수 여백 사용 ( 바람직하지 않음 )

5. 폐쇄 각도 감소

6. 특정 HTML 닫기 태그 건너 뛰기 ( 참조를 위해 @thirtydot에게 감사드립니다 )


참조 :

  1. CSS 트릭에서 인라인 블록 요소 사이의 공간 싸움
  2. 인라인 블록 요소 사이의 공백 제거 by David Walsh
  3. 인라인 블록 요소 사이의 공간을 제거하는 방법은 무엇입니까?

으로 MarcosPérezGude는 @ 말했다가장 좋은 방법은 사용하는 것입니다 rem, 그리고 몇 가지 기본 가치를 font-sizehtml(처럼 태그 HTML5Boilerplate ). 예:

html{
    font-size: 1em;
}

.ib-parent{             /* ib -> inline-block */
    font-size: 0;
}

.ib-child{
    display: inline-block;
    font-size: 1rem;
}

업데이트 : 거의 2018 년입니다. flexbox 또는 더 나은 CSS 그리드 레이아웃을 사용 하세요.


3
@hoosierEE 말도 안돼. 요소 사이의 공간은 괜찮습니다. 인라인 블록 요소가 텍스트 줄에 배치되기 때문입니다. 줄에 공백을 넣으면 공백이 생깁니다. 따라서 그것이 문제라고 생각하더라도 행동은 정확합니다 (Vucko가 틀렸다고 부름).
Marcos Pérez Gude

2
@ MarcosPérezGude에 동의합니다.이 동작은 정확합니다. 내 게시물에서 볼 수 있듯이 공백을 제거하는 몇 가지 방법이 있습니다 (저는 HTML 주석을 사용하여 공백을 제거합니다). 당신이 그 공백을 마음 경우에, 당신은 항상 사용할 수 있습니다 flexbox, table/table-row/table-cell또는 사용 float.
Vucko

2
나는 인라인 블록을 완벽하게 사용합니다. 내 일반적인 접근 방식은 parent { font-size:0; } child {font-size: 1rem; }입니다. REMS으로 지금 가장 쉬운 방법입니다
마르코스 페레스 Gude

탭이 여전히 공백으로 구문 분석된다는 것은 약간 성가신 일입니다. 닫는 태그 수정을 삭제하는 것을 본 적이 없습니다. 불안정하거나 부작용이 있습니까?
MintWelsh

또한 border꺼져 있는지 확인하십시오 . div를 떠 다니는 경우 공간을 추가 할 수 있습니다.
evolross

22

css3의 좋은 대답은 다음과 같습니다.

white-space: nowrap;

부모 노드 및 :

white-space: normal;
vertical-align: top;

div (또는 기타)에서 50 %

예 : http://jsfiddle.net/YpTMh/19/

편집하다:

다른 방법이 있습니다.

font-size: 0;

부모 노드의 경우 자식 노드에서 재정의


7

두 div 사이의 공백이 공백으로 해석되기 때문입니다. <div>아래 그림과 같이 태그를 줄에 넣으면 문제가 해결됩니다 .

<div id="left"></div><div id="right"></div>


4

인라인 블록 대신 블록으로 만드십시오. 이것은 그들 사이의 공백을 무시하는 div를 렌더링합니다.

display:block;

또는 태그 사이의 공백 제거

<div id='left'></div><div id='right'></div>

또는 추가

margin: -1en;

렌더링 된 단일 공간이 차지하는 공간을 줄이기 위해 div 중 하나에.


2

아래 코드를 확인하십시오 :

body {
    margin: 0;
}
#left {
    width: 50%;
    background: lightblue;
    display: inline-block;
    float:left;
}
#right {
    width: 50%;
    background: orange;
    display: inline-block;
    float:left;
}
<div id="left">Left</div>
<div id="right">Right</div>



1

인라인 요소를 보유하는 div에 css display : inline을 추가하여 수행 할 수 있습니다.

여백을 음수 값으로 사용하여 제거하는 동안이 특정 요소에 추가해야합니다. 클래스에 추가하면이 클래스가 사용 된 장소에 영향을 미칩니다.

따라서 display : inline을 사용하는 것이 더 안전 할 것입니다.


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