2015-11-02 29 views
1

在flex容器中,我有兩位內容。雙方都包含多行文字。我希望排列雙方頂線的基線。我已經轉向align-items: baseline來實現這一目標,但不幸的是,它並沒有真正產生預期的結果。有時瀏覽器很簡單,似乎根本沒有對齊它們。你可以看到不同的結果如下:對齊多行文本的項目基線

不齊:

<div style="display:flex;align-items:baseline"> 
 
    <table> 
 
    <tbody> 
 
     <tr> 
 
     <td>text</td> 
 
     </tr> 
 
     <tr> 
 
     <td>text2</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
    <div>text3</div> 
 
</div>

上:

<div style="display:flex;align-items:baseline"> 
 
    <div> 
 
    <div>text</div> 
 
    <div>text2</div> 
 
    </div> 
 
    <div>text3</div> 
 
</div>

理想情況下,我想以便能夠簡單地指示包含我希望對齊的基線的文本的元素。但我可能會解決任何解決方案,始終將文本頂端的底線對齊。

目前,我沒有使用align-items: baseline,我只是簡單地使用了一定量的填充來使它們對齊,這並不理想。我怎樣才能讓瀏覽器對齊我?

+0

你到底要對齊什麼?所有的文字?嵌套物品有自己的定位方案和對齊方式,你期望什麼? – Amit

+0

我想要對齊兩邊文本頂行的基線。 – Puppy

回答

1

問題是table cells have vertical-align: middle by default

因此,你應該把它切換爲baseline

#wrapper { 
 
    display: flex; 
 
    align-items: baseline; 
 
} 
 
td { 
 
    vertical-align: baseline; 
 
} 
 
/* Some additional styles to display the baseline: */ td { font-size: 200%; } #wrapper:after { content: ''; position: absolute; left: 0; right: 0; border-top: 1px solid red; }
<div id="wrapper"> 
 
    <table> 
 
    <tr><td>text</td></tr> 
 
    <tr><td>text2</td></tr> 
 
    </table> 
 
    <div>text3</div> 
 
</div>

+0

大聲笑!我完全忘了'vertical-align'有一個'baseline'值。我剛剛使用了'text-top',它也起作用。感謝提醒+1。 –

+0

@Michael_B我猜這很容易忘記,因爲(通常)它是默認值 – Oriol

+0

是的,我現在看到了。當處理內聯元素時,「baseline」是「vertical-align」的初始值。然而,正如你在你的回答中的評論和狀態中所建議的那樣,「middle」是表格單元格的默認值。我相信你是對的,因爲兩個答案都證明了這一點。但是,我剛剛搜索並找不到任何有關此初始值的正式文檔。我檢查了[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align)和[spec](http://www.w3.org/TR/CSS2/ tables.html),但沒有看到任何東西。它在哪裏說這個? –