我想有3个div对齐在一个容器div,就像这样:

[[LEFT]       [CENTER]        [RIGHT]]

容器div是100%宽(没有设定宽度),中心div在调整容器大小后应该保持在中心。

所以我设置:

#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}

但它变成了:

[[LEFT]       [CENTER]              ]
                              [RIGHT]

任何建议吗?


当前回答

有一些技巧可以用于对齐元素。

01. 使用桌子戏法

.container { 显示:表; } .left { 背景:绿色; 显示:表格单元; 宽度:33.33大众; } .center { 背景:黄金; 显示:表格单元; 宽度:33.33大众; } 铃声{ 背景:灰色; 显示:表格单元; 宽度:33.33大众; } < div class = "容器" > < div class = "左" > 左 < / div > < div class = "中心" > 中心 < / div > < div class = "正确" > 正确的 < / div > < / div >

02. 使用弹性技巧

.container { 显示:flex; justify-content:中心; 对齐项目:中心; } .left { 背景:绿色; 宽度:33.33大众; } .center { 背景:黄金; 宽度:33.33大众; } 铃声{ 背景:灰色; 宽度:33.33大众; } < div class = "容器" > < div class = "左" > 左 < / div > < div class = "中心" > 中心 < / div > < div class = "正确" > 正确的 < / div > < / div >

03. 使用浮动把戏

.left { 背景:绿色; 宽度:100 px; 浮:左; } .center { 背景:黄金; 宽度:100 px; 浮:左; } 铃声{ 背景:灰色; 宽度:100 px; 浮:左; } < div class = "容器" > < div class = "左" > 左 < / div > < div class = "中心" > 中心 < / div > < div class = "正确" > 正确的 < / div > < / div >

其他回答

如果左边、中间和右边的div有不同的宽度,你可以这样完成:

  #container {
    position: relative;
    width: 100%;
    text-align: center;
  }

  #left {
    position: absolute;
    left: 0px;
  }

  #right {
    position: absolute;
    right: 0px;
  }

  #center {
    display: inline-block;
  }

如果你的中心DIV是文本,你不需要#center CSS。

使用CSS网格

layout { display: grid; grid-template-columns: repeat(3,1fr); } start-column { justify-self: start; } center-column { justify-self: center; } end-column { justify-self: end; } <layout> <start-column> <button>Start</button> </start-column> <center-column> <p>Center Donec non urna ipsum. Nullam euismod, lacus ac malesuada varius, mauris erat ullamcorper erat, eget dignissim tortor felis et sapien. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi faucibus turpis et augue dapibus bibendum.</p> </center-column> <end-column> <a href="#">End</a> </end-column> </layout>

使用Flexbox水平对齐三个div

下面是一个CSS3方法,用于在另一个div中水平对齐div。

#container { display: flex; /* establish flex container */ flex-direction: row; /* default value; can be omitted */ flex-wrap: nowrap; /* default value; can be omitted */ justify-content: space-between; /* switched from default (flex-start, see below) */ background-color: lightyellow; } #container > div { width: 100px; height: 100px; border: 2px dashed red; } <div id="container"> <div></div> <div></div> <div></div> </div>

js小提琴

justify-content属性有五个值:

flex-start(默认) flex-end 中心 之间的空间 空间

在所有情况下,三个div都在同一行上。有关每个值的描述,请参见:https://stackoverflow.com/a/33856609/3597276


flexbox的好处:

最少的代码;非常有效的 对中,无论是垂直还是水平,都是简单易行的 等高列简单易行 调整伸缩元素的多个选项 这是响应 与浮动和桌子不同,它们提供的布局容量有限,因为它们从未用于建筑布局, flexbox是一种现代(CSS3)技术,具有广泛的选项。


欲了解更多关于flexbox的信息,请访问:

调整伸缩项目的方法 使用CSS灵活的盒子~ MDN Flexbox ~ CSS-Tricks的完整指南 什么Flexbox?!~ YouTube视频教程


浏览器支持:除IE < 10外,所有主流浏览器都支持Flexbox。一些最新版本的浏览器,如Safari 8和IE10,需要使用厂商前缀。要快速添加前缀,请使用Autoprefixer。更多细节在这个答案中。

你可以试试这个:

你的html代码是这样的:

<div id="container">
  <div id="left"></div>
  <div id="right"></div>
  <div id="center"></div>
</div>

你的CSS代码是这样的:

#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}

所以,它的输出应该是这样的:

[[LEFT]       [CENTER]        [RIGHT]]

使用Bootstrap 3我创建了3个等宽的div(在12列布局中,每个div 4列)。 这样,即使左/右部分的宽度不同(如果它们没有溢出列的空间),您也可以保持中心区域居中。

HTML:

<div id="container">
  <div id="left" class="col col-xs-4 text-left">Left</div>
  <div id="center" class="col col-xs-4 text-center">Center</div>
  <div id="right" class="col col-xs-4 text-right">Right</div>
</div>

CSS:

#container {
  border: 1px solid #aaa;
  margin: 10px;
  padding: 10px;
  height: 100px;
}
.col {
  border: 1px solid #07f;
  padding: 0;
}

CodePen

为了创建没有库的结构,我从Bootstrap CSS复制了一些规则。

HTML:

<div id="container">
  <div id="left" class="col">Left</div>
  <div id="center" class="col">Center</div>
  <div id="right" class="col">Right</div>
</div>

CSS:

* {
  box-sizing: border-box;
}
#container {
  border: 1px solid #aaa;
  margin: 10px;
  padding: 10px;
  height: 100px;
}
.col {
  float: left;
  width: 33.33333333%;
  border: 1px solid #07f;
  padding: 0;
}
#left {
  text-align: left;
}
#center {
  text-align: center;
}
#right {
  text-align: right;
}

科普彭