2016-02-19 87 views
7

我正在處理一個項目,並使用display:table and table-row with overflow auto。但在Firefox(和IE)中沒有預期的那樣。display:table-row&overflow:在Chrome,Firefox(和IE)中自動顯示不同的行爲

在Chrome中,它表現得應該如此。

There's this問題在StackOverflow,這似乎很相似我的問題,但沒有答案或樣品給出。

我試圖重現這在JSbin和小提琴,但沒有奏效。

爲了說明在Chrome和Firefox的我已經做了兩個screengrabs行爲:

Desired behaviour in Chrome

Undesired behaviour in Firefox

我還建立了一個小規模的HTML例子,可以發現here 。您可以通過在Chrome和Firefox中打開網站並擴展textarea,直到底部容器溢出頁面來進行復制。

代碼

html, 
 
body { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
    overflow: hidden; 
 
} 
 
.tableWrapper { 
 
    display: table; 
 
    height: 100%; 
 
    background: darkgrey; 
 
    table-layout: fixed; 
 
    width: 800px; 
 
    margin: 0 auto; 
 
} 
 
.textArea { 
 
    background: #F9F9F9; 
 
    padding: 10px 10px 5px 10px; 
 
    margin: 10px; 
 
} 
 
.content { 
 
    display: table-row; 
 
    height: 100%; 
 
    margin: 10px; 
 
} 
 
.content div { 
 
    display: block; 
 
    overflow: auto; 
 
    height: calc(100% - 20px); 
 
    height: -webkit-calc(100% - 20px); 
 
    height: -moz-calc(100% - 20px); 
 
    background: #ADE6DF; 
 
    margin: 10px; 
 
} 
 
.content p { 
 
    background: white; 
 
    margin: 10px; 
 
    padding: 5px; 
 
}
<div class="tableWrapper"> 
 
    <div class="textArea"> 
 
    <textarea></textarea> 
 
    </div> 
 
    <div class="content"> 
 
    <div> 
 
     <p> 
 
     Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam 
 
     erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim 
 
     mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo 
 
     ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. 
 
     </p> 
 
     <p> 
 
     Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam 
 
     erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim 
 
     mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo 
 
     ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. 
 
     </p> 
 
    </div> 
 
    </div> 
 
</div>

這是非常令人沮喪,我希望有人知道發生了什麼。

+0

我不知道某些如果它有什麼關係正在發生各地保持佈局在一起(.textArea住在一處匿名錶盒的事實在.tableWrapper中的匿名錶格中的匿名錶格單元格,以及.content div位於.content中的匿名錶格單元格中)。 – BoltClock

+0

@BoltClock你有一個想法如何解決這個問題? –

+0

@Patrick Hofman:不好意思。 – BoltClock

回答

1

如果你是好使用Flex,你可以用它:(https://jsfiddle.net/x59n7Lek/ - https://jsfiddle.net/x59n7Lek/1/

* { 
 
    box-sizing: border-box; 
 
} 
 

 
html, 
 
body { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
    overflow: hidden; 
 
} 
 

 
.tableWrapper { 
 
    display: flex; 
 
    flex-direction: column; 
 
    height: 100%; 
 
    background: darkgrey; 
 
    table-layout: fixed; 
 
    width: 800px; 
 
    margin: 0 auto; 
 
    max-width: 100%; 
 
    /*for the demo snippet */ 
 
    max-height: 100%; 
 
    /* maybe you still want to see the content if textarea is too big ? */ 
 
    overflow: auto; 
 
} 
 

 
.textArea { 
 
    display: flex; 
 
    flex-direction: column; 
 
    flex: 1; 
 
    background: #F9F9F9; 
 
    padding: 10px 10px 5px 10px; 
 
    margin: 10px; 
 
} 
 

 
textarea { 
 
    height: 100%; 
 
    /* optionnal */ 
 
} 
 

 
.content { 
 
    margin: 10px; 
 
    min-height: 220px; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
.content div { 
 
    flex: 1; 
 
    overflow: auto; 
 
    display: block; 
 
    background: #ADE6DF; 
 
    margin: 10px; 
 
} 
 

 
.content p, footer,header { 
 
    background: white; 
 
    margin: 10px; 
 
    padding: 5px; 
 
}
<div class="tableWrapper"> 
 
    <div class="textArea"> 
 
    <textarea></textarea> 
 
    </div> 
 
    <div class="content"> 
 
    <header>preview a bit small, test snippet in full page mode then resize window for behaviors</header> 
 
    <div> 
 
     <p> 
 
     Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam 
 
     erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim 
 
     mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo 
 
     ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. 
 
     </p> 
 
     <p> 
 
     Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam 
 
     erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim 
 
     mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo 
 
     ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. 
 
     </p> 
 
    </div> 
 
    <footer>footer</footer> 
 
    </div> 
 
</div>

+0

謝謝!但在大型項目中,底部容器中會有一個水平滾動的表格。有了這個解決方案,你首先必須向下滾動才能夠水平滾動。 '.content div'應該有溢出:auto,而不是'.content'。如果這種行爲可能與Flex,我在聽!爲了進一步說明我的意思,這是我想要的:從:http://www.joshuahazelaar.nl/tablerow/1.png到http://www.joshuahazelaar.nl/tablerow/2.png – Goombah

+1

@Goombah在內容中添加一個標題並將flex更上一層,如果該內容滿足您的最終結果,請參閱片段更新。不知道我明白你在找什麼。 :)一個小提琴玩https://jsfiddle.net/x59n7Lek/和頁腳https://jsfiddle.net/x59n7Lek/1/ –

0

這似乎這樣的伎倆。希望它有用。

\t html, 
 
\t body { 
 
\t \t height: 100%; 
 
\t \t margin: 0; 
 
\t \t padding: 0; 
 
\t \t overflow: hidden; 
 
\t } 
 
\t .tableWrapper { 
 
\t \t display: table; 
 
\t \t height: 100%; 
 
\t \t background: darkgrey; 
 
\t \t table-layout: fixed; 
 
\t \t width: 800px; 
 
\t \t margin: 0 auto; 
 
\t } 
 

 
\t .content { 
 
\t \t display: table-row; 
 
\t \t height: 100%; 
 
\t } 
 

 
\t .content div { 
 
    display: block; 
 
    overflow: auto; 
 
\t \t /* 
 
\t \t \t height: calc(100% - 20px); 
 
\t \t \t height: -webkit-calc(100% - 20px); 
 
\t \t \t height: -moz-calc(100% - 20px); 
 
\t \t */ 
 
\t height: 100%; 
 
\t background: #ADE6DF; 
 
\t margin: 10px; 
 
\t max-height: 80vh; 
 
\t min-height: 80vh; 
 
\t overflow: auto; 
 
\t } 
 
\t .content p { 
 
\t \t background: white; 
 
\t \t margin: 10px; 
 
\t \t padding: 5px; 
 
\t } 
 
\t .textArea { 
 

 
\t } 
 
\t .content p, footer,header { 
 
\t \t background: white; 
 
\t \t margin: 10px; 
 
\t \t padding: 5px; 
 
\t }
\t <div class="tableWrapper"> 
 
\t \t <div class="textArea"> 
 
\t \t <textarea></textarea> 
 
\t \t </div> 
 
\t \t <div class="content"> 
 
\t \t \t <div> 
 
\t \t \t \t <header>preview a bit small, test snippet in full page mode then resize window for behaviors</header> 
 

 
\t \t \t \t \t <p> 
 
\t \t \t \t \t Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. 
 
\t \t \t \t \t </p> 
 
\t \t \t \t \t <p> 
 
\t \t \t \t \t Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. Quisque eget ipsum lectus. Morbi ac vulputate velit. Phasellus condimentum nec orci eget sodales. Curabitur commodo ornare consequat. Proin vehicula mattis odio at feugiat. Nunc enim mi, viverra ut enim condimentum, malesuada fermentum felis. Aliquam erat volutpat. Fusce volutpat neque eget suscipit lobortis. 
 
\t \t \t \t \t </p> 
 

 
\t \t </div> 
 
    <footer>footer</footer> 
 

 
\t </div> 
 

 
</div>

相關問題