代码之家  ›  专栏  ›  技术社区  ›  UbuntuCore

CSS网格将剩余的可用空间用于

  •  0
  • UbuntuCore  · 技术社区  · 6 年前

    如何在CSS-GRID中实现类似“所有元素之间”的功能?在不为每个元素定义所有这些区域的情况下,是否可以这样做?

    <div id="menu">
        <div class="element"><a class="active" href="#home">A</a></div>
        <div class="element"><a href="#home">B</a></div>
        <div class="element"><a href="#home">C</a></div>
        <div class="element"><a href="#home">D</a></div>
    </div>
    
    #menu
    {
        display: grid;
        grid-template-rows: 100%;
        grid-template-columns: 25% <all_elements> 25%;
        grid-template-areas: "... <all_elements> ...";      
    }
    

    <div container>
        placeholder
        div menu
        placeholder
    </div>
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   SuperDJ Franklin Rivero    6 年前

    使用CSS网格,您可以执行以下操作:

    #menu
    {
        display: grid;
        grid-template-columns: repeat(4, 1fr); 
        padding: 0 25%;
    }
    
    .element {
      grid-column: auto;
    }
    <div id="menu">
        <div class="element"><a class="active" href="#home">A</a></div>
        <div class="element"><a href="#home">B</a></div>
        <div class="element"><a href="#home">C</a></div>
        <div class="element"><a href="#home">D</a></div>
    </div>

    当列的数量未指定时,还可以使用:

    grid-template-columns: repeat(auto-fill, minmax(50px, 1fr));
    

    有关这些功能的更多信息:

    https://css-tricks.com/auto-sizing-columns-css-grid-auto-fill-vs-auto-fit/ https://developer.mozilla.org/en-US/docs/Web/CSS/repeat

    var menu = document.getElementById('menu');
    
    var elements = document.getElementsByClassName('element');
    
    menu.style.setProperty( '--columns', elements.length );
    #menu
    {
        display: grid;
        grid-template-columns: repeat(var(--columns), 1fr); 
        padding: 0 25%;
    }
    
    .element {
      grid-column: auto;
    }
    
    :root {
      --columns: 4; /* Default amount of columns */
    }
    <div id="menu">
        <div class="element"><a class="active" href="#home">A</a></div>
        <div class="element"><a href="#home">B</a></div>
        <div class="element"><a href="#home">C</a></div>
        <div class="element"><a href="#home">D</a></div>
        <div class="element"><a href="#home">E</a></div>
        <div class="element"><a href="#home">F</a></div>
    </div>
        2
  •  2
  •   Temani Afif    6 年前

    使用flexbox可以轻松完成此操作:

    #menu {
      display: flex;
      border:1px solid;
    }
    #menu > * {
      flex:1;
      border:1px solid red;
    }
    #menu:before,
    #menu:after {
      content:"";
      width:25%;
    }
    <div id="menu">
      <div class="element"><a class="active" href="#home">A</a></div>
      <div class="element"><a href="#home">B</a></div>
      <div class="element"><a href="#home">C</a></div>
      <div class="element"><a href="#home">D</a></div>
    </div>