CSS 세로 정렬이 float에서 작동하지 않습니다.


85

어떻게 사용할 수 있습니다 vertical-align뿐만 아니라 float의 div속성? 은 vertical-align내가 사용하지 않는 경우 벌금을 작동합니다 float. 하지만 플로트를 사용하면 작동하지 않습니다. float:right마지막 div에를 사용하는 것이 중요합니다 .

모든 div에서 float를 제거하면 다음을 시도하고 있습니다.

<div class="wrap">
    <div class="left">First div, float left,  has more text.</div>
    <div class="left2">Second div, float left </div>
    <div class="right">Third div, float right</div>
</div>

CSS :

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    float:left;
    vertical-align: middle;  
    display:inline-block

}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua;
    float:left;
    vertical-align: middle;   
    display:inline-block
}

.right{
    width: 150px;
    background: orange;
    float:right;
    vertical-align: middle;
    display:inline-block
}

JSFiddle

답변:


92

줄 높이를 설정해야합니다.

<div style="border: 1px solid red;">
<span style="font-size: 38px; vertical-align:middle; float:left; line-height: 38px">Hejsan</span>
<span style="font-size: 13px; vertical-align:middle; float:right; line-height: 38px">svejsan</span>
<div style="clear: both;"></div>

http://jsfiddle.net/VBR5J/


31
line-height모든 요소에 대해 동일한 값으로 설정하면 vertical-align쓸모가 없습니다. ( jsfiddle.net/VBR5J/448 )
— Éderson T. Szlachta

<button>요소에 대해 작동하지 않습니다 . 대신 <span>A는 <button>.
— Green

14
이 대답은 틀 렸습니다. vertical-align div은 개별 요소가 아닌 CONTAINER ( ) 에 속합니다 . 정확한 솔루션 - 수직 배향 가능한 요소를 부유 - 모두 넣는 것이다 vertical-align및 line-height컨테이너에서 : <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">. vertical-align:middle; line-height: 38px;스팬 스타일에서 제거 하십시오.
— ToolmakerSteve

1
방금 내가 제안한 것이 답변의 바이올린에서 부동 스팬에 대해 작동하지만 일부 요소에는 작동하지 않는다는 것을 발견했습니다 (부동 라디오 입력에 실패했습니다).
— ToolmakerSteve

1
@ToolmakerSteve가 잘못되었으며이 대답은 잘못되었습니다. 수직 정렬은 인라인 요소, 인라인 블록 또는 표 셀에만 적용됩니다 (후자는 이상합니다). 'float'를 추가하면 en 요소가 블록 요소가됩니다. 그래도 줄 높이를 사용하고 수직 정렬을 무시하는 것이 해결책이 될 수 있습니다.
— commonpike

15

편집 :

수직 정렬 CSS 속성은 인라인 블록 또는 인라인 테이블 셀 소자의 수직 정렬을 지정한다.

수직 정렬 이해를 위해이 문서 읽기


1
inline-block요소에도 적용됩니다 .
— Rolf

1
업데이트되었습니다. 나는 그것을 놓쳤다. 언급 해 주셔서 감사합니다.
— Ahsan Khurshid

3
이것은 대답이 아닙니다
— Serzhan Akhmetov

이 링크가 질문에 답할 수 있지만 여기에 답변의 필수 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 무효화 될 수 있습니다. - 리뷰에서
— Utsav Patel

8

수직 정렬은 실제로 플로팅 요소에서 작동하지 않습니다. float는 문서의 정상적인 흐름에서 요소를 들어 올리기 때문입니다. 변형, 디스플레이 : 테이블, 절대 위치, 라인 높이, js (마지막 수단) 또는 일반 오래된 HTML 테이블 (콘텐츠가 실제로 표 형식). 이 문제에 대한 열띤 논쟁이 있음을 알게 될 것입니다.

그러나 다음은 3 개 div를 수직으로 정렬하는 방법입니다.

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    display:inline-block;
    vertical-align: middle; 
}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua; 
    display:inline-block;
    vertical-align: middle; 
}

.right{
    width: 150px;
    background: orange;
    display:inline-block;
    vertical-align: middle; 
}

고정 너비, 디스플레이 : 인라인 블록 및 플로팅이 필요한 이유를 잘 모르겠습니다.


솔루션을 얻는 방법을 보여주기 위해 답변에 코드를 추가 할 수 있습니까?
— abarisone 2015

또한 "정답"은 깨지기 쉽습니다. 지구상에서 19 명이 어떻게 투표했는지 궁금합니다.
— Gabriel

3
질문은 "그는 float : right on the last element"가 필요하므로 마지막 요소가 컨테이너의 오른쪽을 따라 있어야 할 수도 있습니다. 답변에서 그 목표를 달성하는 방법은 무엇입니까?
— fly.x

좋은 대답, 그리고 너무 분명합니다! Flexbox 옵션이 누락되었습니다.
— Luillyfe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.