响应式3 * 3平方div网格,无滚动条

时间:2015-08-09 20:27:13

标签: html css

我想要一个没有滚动条的响应式9x9 div网格。 div网格应根据可见的浏览器窗口调整大小。我已将"How to maintain the aspect ratio of a div using only CSS""Grid of responsive squares"合并:

HTML

<div class="stretchy-wrapper">
   <div class="inner">
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">
                       98%
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
       <div class="square">
           <div class="content">
               <div class="table">
                   <div class="table-cell numbers">               
                       3.9/5
                   </div>
               </div>
           </div>
       </div>
    </div>
</div>

CSS

@import url(http://fonts.googleapis.com/css?family=Lato:400,900);  /* <-- Just for the demo, Yes I like pretty fonts... */

.square {
    float:left;
    position: relative;
    width: 30%;
    padding-bottom : 30%; /* = width for a 1:1 aspect ratio */
    margin:1.66%;
    background-color:#1E1E1E;
    overflow:hidden;
}

.content {
    position:absolute;
    height:90%; /* = 100% - 2*5% padding */
    width:90%; /* = 100% - 2*5% padding */
    padding: 5%;

}
.table{
    display:table;
    width:100%;
    height:100%;
}

body {
    font-size:20px;
    font-family: 'Lato',verdana, sans-serif;
    color: #fff;
    text-align:center;
    background:#ECECEC;
}

.numbers{
    font-weight:900;
    font-size:100px;
}

div.stretchy-wrapper {
    width: 100%;
    padding-bottom: 56.25%; /* 16:9 */
    position: relative;

    background: lightgrey;
}

div.stretchy-wrapper > .inner {
    position: absolute;
    top: 0; bottom: 0; left: 0; right: 0;

    color: white;
    font-size: 24px;
    text-align: center;
}

然而,div仍然会扩展到最大宽度,从而导致滚动条:Fiddle

什么是css技巧,div只扩展到最大可见宽度或高度?所以我没有滚动条?

1 个答案:

答案 0 :(得分:3)

使用Flexbox和vmin

解决了这个问题

<强> CSS

    .container {
        margin: 0 auto;
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        justify-content: space-around;
        align-items: center;
        align-content: space-around;

        height: 93vmin;
        width: 93vmin;
        background: lightgrey;
    }
    .cell {
        height: 30vmin;
        width: 30vmin;
        background-color:#1E1E1E;
    }

<强> HTML

<div class="container">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>

    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>

    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
</div>

Full Screen Fiddle

Fiddle

Recommended read about flexbox