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-block과 text-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.