如何使用CSS创建一行具有流体间距的对齐元素?

时间:2012-12-25 03:18:03

标签: css cross-browser fluid-layout multiple-columns justify

如何使用text-align:justifydisplay: flexcolumn-count和/或其他CSS属性创建一行具有自动宽度的块元素?

2 个答案:

答案 0 :(得分:3)

使用以下组件:

  • 行的text-align:justify容器
  • 每列的inline-block容器
  • inline-block占位符width:100%以展开内部

`

    /*Row container is justified*/
    #container { width: 100%; text-align: justify; }

    /*Column container and placeholder are inline-block*/
    object, span { display: inline-block; }

    /*Placeholder is stretched to enforce shrink-wrapping*/
    span { width: 100%; }
 
      <!--row-->
      <div id="container">
        <!--column-->
        <object>
          <!--content-->
          <div>
          foo
          </div>
        </object>
        <object>
          <div>
          bar
          </div>
        </object>
        <object>
          <div>
          baz
          </div>
        </object>
        <object>
          <div>
          bop
          </div>
        </object>
        <object>
          <div>
          bip
          </div>
        </object>
        <!--placeholder-->
        <span></span>
      </div>

或者使用带有嵌套text-align:justifyinline-block行的column-count容器,其中column-count是一个等于子元素数量的数字:

#main, #container { width: 100%; }
#main { text-align: justify; }
#container { display:inline-block; } 
#container { -moz-column-count: 5; -webkit-column-count: 5; column-count: 5;}
<!--full width container-->
<div id="main">

<!--justified inline-block row-->
  <div id="container">
     <!--columns-->
      <div>
      foo
      </div>
      <div>
      bar
      </div>
      <div>
      baz
      </div>
      <div>
      bop
      </div>
      <div>
      bip
      </div>
  </div>
</div>

带有display:flex; flex-direction: row的全宽容器和带有flex:auto的列:

#flex-container {
	display: -webkit-flex;
	display: flex;
	-webkit-flex-direction: row;
	flex-direction: row;
  width: 100%;
}

#flex-container > .flex-item {
	-webkit-flex: auto;
	flex: auto;
}
<div id="flex-container">
    <div class="flex-item">Foo</div>
    <div class="flex-item">Bar</div>
    <div class="flex-item">Baz</div>
    <div class="flex-item">Bop</div>
    <div class="flex-item">Bip</div>
</div>

对于display:gridauto中的每一栏,

grid-template-columns justify-content: space-between {/ 1}}:

#grid-container {
  display: grid;
  grid-template-columns: auto auto auto auto auto;
  justify-content: space-between;
  }
    <div id="grid-container">
        <div>Foo</div>
        <div>Bar</div>
        <div>Baz</div>
        <div>Bop</div>
        <div>Bip</div>
    </div>

对于display: inline-gridauto中的每一栏,

grid-template-columns text-align: justify {/ 1}}:

#grid-container {
  display: inline-grid;
  grid-template-columns: auto auto auto auto auto;
  width: 100%;
  text-align: justify;
  }
    <div id="grid-container">
        <div>Foo</div>
        <div>Bar</div>
        <div>Baz</div>
        <div>Bop</div>
        <div>Bip</div>
    </div>

  

块级元素生成一个主要的块级框,其中包含后代框和生成的内容,也是任何定位方案中涉及的框。

     

除了主框:'list-item'元素之外,某些块级元素可能会生成其他框。这些额外的盒子相对于主盒子放置。

     

未替换的内联块和未替换的表格单元格是块容器,但不是块级别的容器。

     

非内联框的内联级框(例如替换的内联级元素,内联块元素和内联表元素)称为原子内联级框,因为它们作为单个参与其内联格式化上下文不透明的盒子。

     

当一行上的内联级别框的总宽度小于包含它们的行框的宽度时,它们在行框内的水平分布由'text-align'属性决定。如果该属性的值为“justify”,则用户代理也可以在内联框中展开空格和单词(但不包括内联表和内联块框)。

<强>参考

答案 1 :(得分:1)

你可以试试这个:

  • text-align:justify用于容器;
  • :after用于容器;
  • 使用display:inline-block到列;
  • 在最后一个之前添加一些休息时间;

HTML

<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>7</li>
  <li>8</li>
  <li>9</li>
  <li>10</li>
  <li>11</li>
  <li>12</li>
  <li>13</li>
  <li>14</li>
  <li class="break"></li>
  <li class="break"></li>
  <li class="break"></li>
  <li class="break"></li>
</ul>

CSS

ul {
  list-style: none outside none;
  margin:0;
  padding: 0;

  text-align: justify;
  font-size: 0.1px; /*hide whitespace between elements*/
}
ul:after{
  content: '';
  display: inline-block;
  width: 100%;
}
li {
  display: inline-block;
  width: 200px;
  height: 200px;
  background: hsla(20,50%,85%,09);
  padding: 0;
  margin: 10px;

}
.break {
   height: 0;
}

请查看demo。详情请点击here