Căn chỉnh CSS theo chiều dọc của các thành phần khối nội tuyến / nội tuyến


142

Tôi đang cố gắng để có được một số inlineinline-blockcác thành phần được sắp xếp theo chiều dọc trong một div. Làm thế nào mà spantrong ví dụ này khăng khăng bị đẩy xuống? Tôi đã thử cả hai vertical-align:middle;vertical-align:top;, nhưng không có gì thay đổi.

HTML:

<div>
  <a></a><a></a>
  <span>Some text</span>
</div>

CSS:

a {
    background-color:#FFF;
    width:20px;
    height:20px;
    display:inline-block;
    border:solid black 1px;
}

div {
    background:yellow;
    vertical-align:middle;
}
span {
    background:red;
}

KẾT QUẢ:
nhập mô tả hình ảnh ở đây

VĨ CẦM


lưu ý rằng điều này sẽ không xảy ra nếu <a>các thành phần có chứa một số văn bản bên trong chúng nhìn thấy liên kết này
S.Serpooshan

Câu trả lời:


270

vertical-alignáp dụng cho các phần tử được căn chỉnh, không phải phần tử cha của chúng. Để sắp xếp theo chiều dọc con của div, thay vào đó, hãy làm điều này:

div > * {
    vertical-align:middle;  // Align children to middle of line
}

Xem: http://jsfiddle.net/dfmx123/TFPx8/1186/

LƯU Ý : vertical-alignliên quan đến dòng văn bản hiện tại, không phải chiều cao đầy đủ của cha mẹ div. Nếu bạn muốn phụ huynh divlà cao hơn và vẫn có những yếu tố theo chiều dọc làm trung tâm, thiết lập divcủa line-heighttài sản thay vì nó height. Theo liên kết jsfiddle ở trên cho một ví dụ.


Điều này dừng hoạt động nếu bạn chỉ định một chiều cao cho bên ngoài div.
Abhranil Das

4
@AbhranilDas vertical-alignliên quan đến dòng văn bản hiện tại, không phải là phần tử cha. Để làm cho công việc này như bạn muốn, hãy đặt div line-heightthay vì của nó height.
Diego


5

Đơn giản chỉ cần nổi cả hai yếu tố để đạt được kết quả tương tự.

div {
background:yellow;
vertical-align:middle;
margin:10px;
}

a {
background-color:#FFF;
width:20px;
height:20px;
display:inline-block;
border:solid black 1px;
float:left;
}

span {
background:red;
display:inline-block;
float:left;
}

Vấn đề với việc thả chúng sang trái là chúng sẽ quấn sang dòng tiếp theo khi trình duyệt quá nhỏ. Đôi khi bạn cần các mục để duy trì nội tuyến thậm chí vượt ra ngoài giới hạn trình duyệt và do đó, inline-blocklà giải pháp duy nhất.
Jake Wilson

Mặc dù vấn đề bao bọc đó có thể là một vấn đề, tôi muốn nói rằng đây là một giải pháp thực sự tốt cho những trường hợp mà việc bọc là ổn. Nó thanh lịch, nói lên tinh thần của hiệu ứng mong muốn và không yêu cầu sửa đổi cho phụ huynh.
Crispen Smith

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.