CSS Căn chỉnh dọc không hoạt động với float


85

Làm thế nào tôi có thể sử dụng vertical-aligncũng như floattrong các divthuộc tính? Các vertical-alignhoạt động tốt nếu tôi không sử dụng float. Nhưng nếu tôi sử dụng phao, thì nó không hoạt động. Điều quan trọng đối với tôi là sử dụng float:rightcho div cuối cùng.

Tôi đang thử làm theo, nếu bạn xóa float khỏi tất cả các div thì nó sẽ hoạt động tốt:

<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

Câu trả lời:


92

Bạn cần đặt chiều cao dòng.

<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
nếu bạn đặt line-heightvới cùng một giá trị cho tất cả các phần tử thì vertical-alignsẽ vô dụng. ( jsfiddle.net/VBR5J/448 )
Éderson T. Szlachta

Không hoạt động cho <button>các phần tử. Thay vì <span>là a <button>.
Màu xanh lá cây

14
Câu trả lời này là sai. vertical-align thuộc về CONTAINER (the div) không thuộc về các phần tử riêng lẻ. Các giải pháp chính xác - có khả năng chuyển dọc được xếp thẳng nổi yếu tố - là đặt cả hai vertical-alignline-heighttrên CONTAINER: <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">. LOẠI BỎ vertical-align:middle; line-height: 38px;khỏi các kiểu nhịp.
Thợ làm công cụ Đến

1
Tôi vừa phát hiện ra rằng những gì tôi đề xuất hoạt động cho các nhịp thả nổi trong câu trả lời của câu trả lời, nhưng không phù hợp với một số phần tử (không thành công với đầu vào vô tuyến thả nổi).
Thợ làm công cụ Đến

1
@ToolmakerSteve sai và câu trả lời này sai. Vertical-align chỉ áp dụng cho các phần tử nội tuyến, khối nội dòng hoặc ô bảng (cái sau chỉ là kỳ lạ). Thêm một 'float' làm cho phần tử en trở thành một phần tử khối. Tuy nhiên, sử dụng chiều cao dòng (và bỏ qua căn chỉnh theo chiều dọc) có thể là một giải pháp.
commonpike

15

Đã chỉnh sửa:

Các vertical-align thuộc tính CSS xác định sự liên kết dọc của một inline, inline-block hoặc yếu tố table-cell.

Đọc bài viết này để hiểu về căn chỉnh theo chiều dọc


1
Nó cũng áp dụng cho inline-blockcác phần tử.
Rolf

1
Đã cập nhật. Tôi đã bỏ lỡ điều đó. Cảm ơn vì đã đề cập.
Ahsan Khurshid

3
đây không phải là câu trả lời
Serzhan Akhmetov

Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. - Từ đánh giá
Utsav Patel

8

Căn chỉnh dọc không hoạt động với các phần tử nổi. Đó là bởi vì float nâng phần tử khỏi luồng thông thường của tài liệu. Bạn có thể muốn sử dụng các kỹ thuật căn chỉnh theo chiều dọc khác, như các kỹ thuật dựa trên chuyển đổi, hiển thị: bảng, định vị tuyệt đối, chiều cao dòng, js (có thể là phương sách cuối cùng) hoặc thậm chí là bảng html cũ đơn giản (có thể là lựa chọn đầu tiên nếu nội dung thực tế là dạng bảng). Bạn sẽ thấy rằng có một cuộc tranh luận sôi nổi về vấn đề này.

Tuy nhiên, đây là cách bạn có thể căn chỉnh theo chiều dọc 3 div của BẠN:

.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; 
}

Không chắc tại sao bạn cần cả chiều rộng cố định, hiển thị: inline-block và float.


Bạn có thể thêm một số mã vào câu trả lời của mình để chỉ ra cách đạt được giải pháp không?
abarisone

Ngoài ra, "câu trả lời đúng" rất dễ bị phá vỡ ... nó khiến tôi tự hỏi làm thế nào trên Trái đất có 19 người bình chọn nó.
Gabriel

3
câu hỏi cho biết "anh ta cần phao: ngay trên phần tử cuối cùng", vì vậy anh ta có thể cần phần tử cuối cùng nằm dọc theo bên phải của vùng chứa. làm thế nào để đạt được mục tiêu đó trong câu trả lời của bạn?
fly.x

Câu trả lời tốt, và bên cạnh đó rất rõ ràng! Nó chỉ thiếu tùy chọn Flexbox.
Luillyfe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.