Làm thế nào để tôi sắp xếp theo chiều dọc một cái gì đó trong thẻ span?


144

Làm cách nào để "x" được căn chỉnh theo chiều dọc ở giữa nhịp?

.foo {
    height: 50px;
    border: solid black 1px;
    display: inline-block;
    vertical-align: middle;
}

<span class="foo">
   x
</span>

Câu trả lời:


218

Sử dụng line-height:50px;thay vì chiều cao. Điều đó sẽ làm các trick ;)


1
Tuyệt vời! Nó hoạt động với bất kỳ loại thẻ. Trong trường hợp của tôi, đã làm việc với <img>.
Felipe Conde

21
Vấn đề là khi văn bản kết thúc tốt đẹp. Với hai dòng, khoảng này sẽ được hiển thị với chiều cao 100px.
Norberto Yoan

nếu văn bản của bạn kết thúc tốt đẹp hãy thử câu trả lời của tôi @NorbertoYoan
Hashbrown

ditto cho @Sumit (trùng lặp vì vấn đề với các bình luận của SO )
Hashbrown

Đây không phải là câu trả lời được bình chọn hàng đầu, giải pháp có thể đưa ra một số kết quả không mong muốn khác tùy thuộc vào nội dung.
rafaelmorais

113

Xin lưu ý rằng line-heightcách tiếp cận không thành công nếu bạn có một câu dài trong spanđó ngắt dòng vì không có đủ không gian. Trong trường hợp này, bạn sẽ có hai dòng có khoảng cách với chiều cao của N pixel được chỉ định trong thuộc tính.

Tôi bị mắc kẹt khi tôi muốn hiển thị một hình ảnh với văn bản được căn giữa theo chiều dọc ở bên phải của nó, hoạt động trong một ứng dụng web đáp ứng. Là một cơ sở, tôi sử dụng cách tiếp cận được đề xuất bởi Eric Nickus và Felipe Tadeo.

Nếu bạn muốn đạt được:

máy tính để bàn

và điều này:

di động

.container {
    background: url( "https://i.imgur.com/tAlPtC4.jpg" ) no-repeat;
    display: inline-block;
    background-size: 40px 40px; /* image's size */
    height: 40px; /* image's height */
    padding-left: 50px; /* image's width plus 10 px (margin between text and image) */
}

.container span {
    height: 40px; /* image's height */
    display: table-cell;
    vertical-align: middle;
}
<span class="container">
    <span>This is a centered sentence next to an image</span>
</span>


chiều cao của dyanmic là gì
Alberto Acuña

39

Đây là cách đơn giản nhất để làm điều đó nếu bạn cần nhiều dòng. Gói spanvăn bản của bạn trong một văn bản khác spanvà chỉ định chiều cao của nó với line-height. Bí quyết để nhiều dòng được đặt bên trong span's line-height.

<span class="textvalignmiddle"><span>YOUR TEXT HERE</span></span>
.textvalignmiddle {
    line-height: /*set height*/;
}

.textvalignmiddle > span {
    display: inline-block;
    vertical-align: middle;
    line-height: 1em; /*set line height back to normal*/
}

BẢN GIỚI THIỆU

Tất nhiên bên ngoài spancó thể là một divhoặc whathaveyou


2
spans, giống như bất kỳ yếu tố nội tuyến nào khác, có thể chứa bất kỳ yếu tố nội tuyến HTML nào . Bất kể, tôi đã viết rằng đó textvalignmiddlecó thể là một divđiều rất cần thiết (và bạn có thể đặt nó thành display:inline;nếu bạn không thích sử dụng spans)
Hashbrown

Ý tôi là họ không nên có. Chúng là để chứa văn bản. Khác sử dụng một div.
JorgeeFG

3
spanlà bộ chứa nội tuyến chung cho html và không có nhiều gợi ý chỉ là văn bản; `Nó có thể được sử dụng để nhóm các thành phần cho mục đích tạo kiểu ...`. Tôi khuyên bạn nên đọc thông số kỹ thuật trước khi áp dụng các tiêu chuẩn mã hóa cá nhân của bạn lên những người khác nói rằng chúng là sự thật
Hashbrown

3
dù bằng cách nào, dòng hội thoại này không mang tính xây dựng theo nghĩa kỹ thuật cho câu hỏi và không phải ý kiến ​​trong SO là gì
Hashbrown

Làm việc cho tôi quá. Đã sử dụng một yếu tố khác với span.
sô cô la

27

Cách flexbox:

.foo {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 50px;
}

kể từ khi .foomột nhịp display: flex-inlinesẽ phù hợp hơn
koala

7
Ý của bạn là "nội tuyến-flex"?
Tim Gerhard

5

Tôi cần điều này cho các liên kết, vì vậy tôi đã bọc span bằng thẻ a và div, sau đó căn giữa thẻ span

HTML

<div>
    <a class="tester" href="#">
        <span>Home</span>
    </a>
</div>

CSS

.tester{
    display: inline-block;
    width: 9em;
    height: 3em;
    text-align: center;
}
.tester>span{
    position: relative;
    top: 25%;
}

Cảm ơn vì điều này, tôi ghét làm phiền với CSS, tôi đã dành cả ngày để cố gắng tập trung vào một yếu tố theo chiều dọc khi tôi bắt gặp câu trả lời của bạn ở đây. Bạn là một người cứu rỗi cuộc sống!
Todd Nestor

5

CSS và hình ảnh trung tâm dọc

Tôi đã tạo một bản demo cho trung tâm hình ảnh dọc và văn bản tôi cũng đã thử nghiệm trên firefox, chrome, safari, internet explorer 9 và 8.

Nó rất ngắn và dễ dàng css và html, Vui lòng kiểm tra mã bên dưới và bạn có thể tìm thấy đầu ra trên màn hình.

HTML

<div class="frame">
    <img src="capabilities_icon1.png" alt="" />
</div>

CSS

  .frame {
        height: 160px;      
        width: 160px;
        border: 1px solid red;
        white-space: nowrap;
        text-align: center; margin: 1em 0;
    }

    .frame::before {
        display: inline-block;
        height: 100%;
        vertical-align: middle;
        content:"";
    }

    img {
        background: #3A6F9A;
        vertical-align: middle;
    }

Đầu ra nhập mô tả hình ảnh ở đây


2

cái này hiệu quả với tôi (Keltex cũng nói như vậy)

.foo {
height: 50px;
...
}
.foo span{
vertical-align: middle; 
}

<span class="foo"> <span>middle!</span></span>

1

Thuộc tính css thẳng đứng không làm những gì bạn mong đợi. Bài viết này giải thích 2 cách để sắp xếp theo chiều dọc một phần tử bằng css.


1

Đặt padding-top thành một giá trị phù hợp để đẩy x xuống, sau đó trừ đi giá trị bạn có cho padding-top từ chiều cao.

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.