CSS에서 display : inline-block 대 float : left 사용의 장점


127

일반적으로 여러 개 DIVs를 연속으로 원할 때를 사용 float: left하지만 이제는display:inline-block

여기에 링크 예 . 그 날 것으로 보인다 display:inline-block더 좋은 방법이다 align DIVs연속, 그러나 어떤 단점이있다? 이 접근 방식이 float트릭 보다 덜 인기있는 이유는 무엇 입니까?


특정 질문에 약 @Moak inline하지 inline-block. 그러나 관련의 첫 번째 좋다 : stackoverflow.com/a/11823622/918414
ThinkingStiff


2
예제 링크가 죽었습니다
information_interchange

답변:


156

3 단어 : inline-block더 좋습니다.

인라인 블록

display: inline-block접근 방식 의 유일한 단점 은 IE7 이하에서는 기본적 inline-block으로 이미있는 경우 에만 요소가 표시 될 수 있다는 것 inline입니다. 이것이 의미하는 바는 <div>요소를 사용하는 대신 요소를 사용해야한다는 것 <span>입니다. 의미 상 a <div>는 페이지를 나누는 것이고 a <span>는 페이지 의 범위를 덮기위한 것이므로 큰 의미 차이 가 없기 때문에 실제로 큰 단점은 아닙니다. 의 큰 장점은 display:inline-block다른 개발자가 나중에에서 코드를 유지하는 경우, 그것은 훨씬 더 많은 것을 분명하다는 것이다 display:inline-blocktext-align:right (A)보다 달성하기 위해 노력하고있다 float:left거나 float:right문. 의 나의 마음에 드는 혜택 inline-block방법은 사용하기 쉬운 것입니다 vertical-align: middle, line-height그리고text-align: center직관적 인 방식으로 요소를 완벽하게 중앙에 배치합니다. Mozilla 블로그 에서 크로스 브라우저 인라인 블록을 구현하는 방법에 대한 훌륭한 블로그 게시물을 찾았습니다 . 다음은 브라우저 호환성 입니다.

흙손

float메서드 를 사용하는 것이 페이지 레이아웃에 적합하지 않은 이유는 floatCSS 속성 이 원래 이미지 (잡지 스타일) 주위에 텍스트를 감싸도록 의도 된 것이기 때문이며 설계 상 일반적인 페이지 레이아웃 용도에 가장 적합하지 않기 때문입니다. 나중에 플로팅 요소를 변경할 때 페이지 흐름에 없기 때문에 위치 지정 문제가 발생할 수 있습니다 . 또 다른 단점은 일반적으로 clearfix가 필요하다는 것입니다. 그렇지 않으면 페이지의 측면이 손상 될 수 있습니다. clearfix는 플로팅 요소 뒤에 요소를 추가하여 부모 가 콘텐츠에서 스타일을 분리하는 것 사이의 의미 선을 가로 지르는 것을 막기 위해 요소를 추가해야 하므로 웹 개발의 안티 패턴입니다 .

위 링크에 언급 된 공백 문제는 white-spaceCSS 속성으로 쉽게 수정할 수 있습니다 .

편집하다:

SitePoint 는 웹 디자인 조언에 대한 매우 신뢰할 수있는 소스이며 저와 같은 의견을 가지고있는 것 같습니다.

CSS 레이아웃을 처음 사용하는 경우 상상력이 풍부한 방식으로 CSS 플로트를 사용하는 것이 기술의 높이라고 생각하면 용서받을 수 있습니다. 찾을 수있는만큼 많은 CSS 레이아웃 자습서를 사용했다면 수레 마스터 링이 통과 의례라고 생각할 수 있습니다. 당신은 독창성에 놀라고 복잡성에 놀라게 될 것이며 마침내 수레가 어떻게 작동하는지 이해하면 성취감을 얻게 될 것입니다.

속지 마십시오. 당신은 세뇌 당하고 있습니다.

http://www.sitepoint.com/give-floats-the-flick-in-css-layouts/

2015 업데이트-Flexbox는 최신 브라우저를 위한 좋은 대안입니다 .

.container {
  display: flex; /* or inline-flex */
}

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

더 많은 정보

2016 년 12 월 21 일 업데이트

Bootstrap 4는 IE9에 대한 지원을 제거하므로 행에서 부동 소수점을 제거하고 전체 Flexbox가됩니다.

Pull 요청 # 21389


4
"clearfix"는 이름 일뿐입니다. "수정"은 잘못된 기대치 및 / 또는 잘못된 브라우저 구현의 수정을 나타냅니다. 나는 (행복하게) 플로팅 / 클리어링에 대한 대안이 있다는 데 동의하지만 본질적으로 손상 되거나 고정 된 것은 없습니다 .
Tim Medora 2013 년

10
@Alex-별도의 줄에있는 인라인 블록 요소 사이의 공백을 제거하는 해킹이 아닌 브라우저 간 호환 방법이 있습니까? 수레 사용을 중단하고 싶지만이 문제에 대해 찾을 수있는 최고의 링크 ( 여기여기 )가 만족스럽지 않습니다. white-space속성에 대해 언급했습니다. 설명해 주시겠습니까?
antinome 2011

3
@Alex-감사합니다. 매우 멋지지만 언젠가 letter-spacing내 CSS의 다른 곳에서 커스터마이즈해도 깨지지 않기 때문에 float-with-modern-clearfix 접근 방식이 좀 더 유지 관리하기 쉽습니다 .
antinome 2011

1
부트 스트랩이 그리드 시스템에 여전히 float를 사용하는 이유는 무엇입니까? 레이아웃이 아닌가요?
AzDesign

2
인라인 블록은 요소 주위에 공백을 추가합니다. 그리드에 사용하거나이 공백을 원하지 않는 경우이를 설명하기 위해 추가 스타일 / HTML 해킹을 추가해야합니다. 참조 : css-tricks.com/fighting-the-space-between-inline-block-elements/...
kretzm

23

일반적 inline-block으로 더 낫다는 데 동의하지만 백분율 너비 를 사용하여 반응 형 그리드를 만드는 경우 (또는 픽셀 단위의 너비를 원하는 경우) 고려해야 추가 사항이 있습니다 .

inline-block총 폭이 100 % 또는 100 %에 가까운 그리드에 사용 하는 경우 HTML 마크 업 에 열 사이에 공백이 없는지 확인해야합니다 .

부동 소수점을 사용하면 걱정할 필요가 없습니다. 열은 공백이나 열 사이의 다른 내용 위에 떠 있습니다. 이 질문의 답변에는 코드를 추악하게 만들지 않고 HTML 공백을 제거하는 방법에 대한 몇 가지 좋은 팁이 있습니다 .

어떤 이유로 든 HTML 마크 업 (예 : 제한적인 CMS)을 제어 할 수없는 경우 여기에 설명 된 트릭을 시도하거나 인라인 블록 대신 부동 소수점을 사용해야 할 수 있습니다. font-size:0;열 컨테이너 와 같이 극한 상황에서만 사용해야하는 추악한 CSS 트릭도 있으며 각 열 내에서 글꼴 크기를 다시 적용 합니다.

예를 들면 :


공백 없음, 어쩌면 div+(whitespace) {display:none}또는 무언가에 대한 가능한 해결 방법이 있습니까?
NoBugs 2015-06-03

1
특히 링크 된 질문을보고 ... 첫 문장 후 세 번째 단락을 참조하십시오
user56reinstatemonica8

@NoBugs는 단순히 font-size : 0을 적용합니다. 포함하는 요소에 대해 인라인 블록 내의 요소에 특정 글꼴 크기를 설정하지 않았는지 확인하십시오 !!
Jai 2015 년

@Jai 정확히, 스타일링 / 뷰는 html / model을 만드는 과정에서 분리되어야하므로 나쁜 습관입니다. (당신이 준 서비스를 사용하는 경우 <div class="inlinething">hi</div> <div class="inlinething">there</div> more content here... ?)
NoBugs

4

div픽셀을 정확하게 정렬 하려면 float를 사용하십시오. inline-block항상 몇 픽셀을 잘라야하는 것 같습니다 (적어도 IE에서는)


6
인라인 블록은 인라인 요소와 같은 방식으로 공백을 고려하기 때문에 요소 사이에 공백을 사용하지 않아야하기 때문입니다. 인라인 블록 태그를 서로 밀접하게 유지하고 픽셀 문제가 없습니다.
Ben Sinclair

또한 이것은 요소의 기본 패딩 / 여백이있는 브라우저의 차이 일 수 있습니다 .. 적어도 과거에는 * {padding:0px; margin:0px; }이것이 제 코딩의 균형을 맞추는 데 도움이되므로 항상 해왔습니다
Angry 84

이것이 내가 궁금해하는 인라인 블록보다 Bootstrap (아마도 다른 사람들)이 그것을 사용하는 이유입니까?
NoBugs 2015-06-03

1

여기 에서 자세한 답변을 찾을 수 있습니다 .

그러나 일반적으로 float주변 요소와 inline-block요소를 선으로 지정하는 간단한 방법을 인식하고 관리해야합니다 .

감사


1

인라인 블록에 대한 한 가지 특성이 있지만 간단하지 않을 수 있습니다. 즉, CSS에서 세로 정렬의 기본값은 기준입니다. 이로 인해 예기치 않은 정렬 동작이 발생할 수 있습니다. 이 기사를보세요.

http://www.brunildo.org/test/inline-block.html

대신 float : left를 수행하면 div가 서로 독립적이며 여백을 사용하여 쉽게 정렬 할 수 있습니다.

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