【问题标题】:How do I make a CSS grid unresponsive?如何使 CSS 网格无响应?
【发布时间】:2019-03-14 20:50:43
【问题描述】:

我正在尝试制作一个 CSS Grid,当其中的元素发生变化时,它不会改变高度/宽度。我有以下代码:

    <center><div class="grid-container">
        <div id="item1" onmouseover="makeVisible('item1Center')" onmouseout="makeInvisible('item1Center')">Item 1
        </div>
        <div id="item2" onmouseover="makeVisible('item2Center')" onmouseout="makeInvisible('item2Center')">Item 2</div>
        <div id="item3" onmouseover="makeVisible('item3Center')" onmouseout="makeInvisible('item3Center')">Item 3</div>
        <div id="item4" onmouseover="makeVisible('item4Center')" onmouseout="makeInvisible('item4Center')">Item 4</div>
        <div id="item5" onmouseover="makeVisible('item5Center')" onmouseout="makeInvisible('item5Center')">Item 5</div>
        <div id="item6" onmouseover="makeVisible('item6Center')" onmouseout="makeInvisible('item6Center')">Item 6</div>
        <div id="itemCenter">
            <div id="item1Center" style="display: none;" onmouseover="makeVisible('item1Center')" onmouseout="makeInvisible('item1Center')">Item 1</div>
            <div id="item2Center" style="display: none;" onmouseover="makeVisible('item2Center')" onmouseout="makeInvisible('item2Center')">Item 2</div>
            <div id="item3Center" style="display: none;" onmouseover="makeVisible('item3Center')" onmouseout="makeInvisible('item3Center')">Item 3</div>
            <div id="item4Center" style="display: none;" onmouseover="makeVisible('item4Center')" onmouseout="makeInvisible('item4Center')">Item 4</div>
            <div id="item5Center" style="display: none;" onmouseover="makeVisible('item5Center')" onmouseout="makeInvisible('item5Center')">Item 5</div>
            <div id="item6Center" style="display: none;" onmouseover="makeVisible('item6Center')" onmouseout="makeInvisible('item6Center')">Item 6</div>
            <div id="itemPlaceholder"><img src="img/placeholder.jpg"></div>
        </div>
    </div></center>

我有以下处理一些悬停的脚本:

<script type="text/javascript">
        function makeVisible(id) {
            document.getElementById(id).style.display = 'block';
            document.getElementById('itemPlaceholder').style.display = 'none';
        }
        function makeInvisible(id) {
            document.getElementById(id).style.display = 'none';
            document.getElementById('itemPlaceholder').style.display = 'block';
        }
    </script>

还有以下 CSS:

#item1  { grid-area: topLeft; }
#item2  { grid-area: midLeft; }
#item1  { grid-area: botLeft; }
#item1  { grid-area: topRight; }
#item1  { grid-area: midRight; }
#item1  { grid-area: botRight; }
#itemCenter { grid-area: centered; }

.grid-container {
    display: grid;
    grid-template-areas: 
        'topLeft centered centered centered topRight'
        'midLeft centered centered centered midRight'
        'botLeft centered centered centered botRight';
    grid-gap: 5px;
    padding: 10px;
    width: 50vw;
    height: 50vh;
}

.grid-container > div {
    background-color: #E2D4B7;
    text-align: center;
    padding: 20px 0;
    font-size: 30px;
}

我的问题是,当悬停在“item”元素上并且“mainItem”div 内的内容发生变化时,整个网格会适应它并且元素的大小会发生变化。我想让网格中的每个元素都有固定的高度和宽度,我该怎么做呢?

【问题讨论】:

    标签: javascript html css css-grid


    【解决方案1】:

    您的网格项不会留在原地,因为它们没有定义宽度 - 你可以让它们采用比例宽度使用grid-template-columns: repeat(5, 1fr)grid-template-rows: 1fr 1fr 1fr 使宽度保持不变。

    还将图像更改为 背景图像,使其停留在网格项内 - 参见下面的演示:

    function makeVisible(id) {
      document.getElementById(id).style.display = 'block';
      document.getElementById('itemPlaceholder').style.display = 'none';
    }
    
    function makeInvisible(id) {
      document.getElementById(id).style.display = 'none';
      document.getElementById('itemPlaceholder').style.display = 'block';
    }
    #item1 {
      grid-area: topLeft;
    }
    
    #item2 {
      grid-area: midLeft;
    }
    
    #item1 {
      grid-area: botLeft;
    }
    
    #item1 {
      grid-area: topRight;
    }
    
    #item1 {
      grid-area: midRight;
    }
    
    #item1 {
      grid-area: botRight;
    }
    
    #itemCenter {
      grid-area: centered;
    }
    
    .grid-container {
      display: grid;
      grid-template-columns: repeat(5, 1fr); /* ADDED */
      grid-template-rows: 1fr 1fr 1fr; /* ADDED */
      grid-template-areas: 'topLeft centered centered centered topRight' 'midLeft centered centered centered midRight' 'botLeft centered centered centered botRight';
      grid-gap: 5px;
      padding: 10px;
      width: 50vw;
      height: 50vh;
    }
    
    .grid-container>div {
      background-color: #E2D4B7;
      text-align: center;
      padding: 20px 0;
      font-size: 30px;
    }
    
    #itemPlaceholder {  /* ADDED */
      background: url(https://via.placeholder.com/400) no-repeat;
      background-size: contain;
      background-position: center;
      height: 100%;
    }
    <center>
      <div class="grid-container">
        <div id="item1" onmouseover="makeVisible('item1Center')" onmouseout="makeInvisible('item1Center')">Item 1
        </div>
        <div id="item2" onmouseover="makeVisible('item2Center')" onmouseout="makeInvisible('item2Center')">Item 2</div>
        <div id="item3" onmouseover="makeVisible('item3Center')" onmouseout="makeInvisible('item3Center')">Item 3</div>
        <div id="item4" onmouseover="makeVisible('item4Center')" onmouseout="makeInvisible('item4Center')">Item 4</div>
        <div id="item5" onmouseover="makeVisible('item5Center')" onmouseout="makeInvisible('item5Center')">Item 5</div>
        <div id="item6" onmouseover="makeVisible('item6Center')" onmouseout="makeInvisible('item6Center')">Item 6</div>
        <div id="itemCenter">
          <div id="item1Center" style="display: none;" onmouseover="makeVisible('item1Center')" onmouseout="makeInvisible('item1Center')">Item 1</div>
          <div id="item2Center" style="display: none;" onmouseover="makeVisible('item2Center')" onmouseout="makeInvisible('item2Center')">Item 2</div>
          <div id="item3Center" style="display: none;" onmouseover="makeVisible('item3Center')" onmouseout="makeInvisible('item3Center')">Item 3</div>
          <div id="item4Center" style="display: none;" onmouseover="makeVisible('item4Center')" onmouseout="makeInvisible('item4Center')">Item 4</div>
          <div id="item5Center" style="display: none;" onmouseover="makeVisible('item5Center')" onmouseout="makeInvisible('item5Center')">Item 5</div>
          <div id="item6Center" style="display: none;" onmouseover="makeVisible('item6Center')" onmouseout="makeInvisible('item6Center')">Item 6</div>
          <div id="itemPlaceholder"></div>
        </div>
      </div>
    </center>

    【讨论】:

    • 非常感谢您的帮助!
    【解决方案2】:

    您可以使用属性的 grid-template-columns 和 grid-template-rows 将固定的宽度和高度应用于网格

    https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns

    https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-rows

    【讨论】:

    • 不鼓励仅链接的答案。您应该以问题中的代码为起点,以直接回答原始问题的方式总结文章。
    猜你喜欢
    • 2016-06-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2018-02-22
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多