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


85

어떻게 사용할 수 있습니다 vertical-align뿐만 아니라 floatdiv속성? 은 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-alignline-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.