2016-02-19 13 views
7

Tôi đang làm việc trên một dự án và tôi đang sử dụng display: table và table-row với overflow auto. Nhưng nó không có gì hoạt động như mong đợi trong Firefox (và IE).display: table-row & overflow: tự động hiển thị các hành vi khác nhau trong Chrome, Firefox (và IE)

Trong Chrome, nó hoạt động như mong đợi.

this câu hỏi về StackOverflow, có vẻ khá giống với vấn đề của tôi, nhưng không có câu trả lời hoặc mẫu nào được đưa ra.

Tôi đã cố gắng tạo lại điều này trong JSbin và Fiddle, nhưng điều đó không hiệu quả.

Để minh họa cho hành vi trong Chrome và Firefox Tôi đã thực hiện hai screengrabs:

Desired behaviour in Chrome

Undesired behaviour in Firefox

Tôi cũng đã thiết lập một ví dụ HTML quy mô nhỏ, có thể được tìm thấy here . Bạn có thể tái tạo bằng cách mở trang web trong Chrome và Firefox và mở rộng vùng văn bản cho đến khi các vùng chứa phía dưới tràn trang.

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>

Nó rất bực bội, tôi hy vọng ai đó biết những gì xảy ra.

+0

Tôi không biết chắc chắn nếu nó có bất cứ điều gì để làm với thực tế rằng hộp bảng vô danh đang được tạo trên khắp nơi để giữ bố trí với nhau (.textArea sống trong một ô bảng ẩn danh trong một hàng trong bảng ẩn danh trong .tableWrapper và .content div sống trong một ô bảng ẩn danh bên trong .content). – BoltClock

+0

@BoltClock Bạn có ý tưởng cách sửa lỗi này không? –

+0

@Patrick Hofman: Không, buồn thay. – BoltClock

Trả lời

1

nếu bạn là okay với flex, bạn có thể sử dụng nó: (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

Xin cảm ơn! Nhưng trong dự án quy mô lớn, sẽ có một bảng bên trong thùng chứa dưới cùng với cuộn ngang. Với giải pháp này, trước tiên bạn phải cuộn xuống để có thể cuộn ngang. '.content div' sẽ có tràn: auto, not '.content'. Nếu hành vi này có thể xảy ra với flex, tôi đang nghe! Để minh họa thêm ý tôi, đây là những gì tôi muốn: Từ: http://www.joshuahazelaar.nl/tablerow/1.png đến http://www.joshuahazelaar.nl/tablerow/2.png – Goombah

+1

@Goombah thêm một tiêu đề trong nội dung và thêm vào một mức độ thấp hơn, xem đoạn mã cập nhật nếu đáp ứng yêu cầu cuối cùng của bạn. Không chắc tôi hiểu những gì bạn tìm kiếm. :) một fiddle để chơi với https://jsfiddle.net/x59n7Lek/ và một chân trang quá https://jsfiddle.net/x59n7Lek/1/ –

0

Điều này dường như làm các trick. Hy vọng nó hữu ích.

\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>

Các vấn đề liên quan