## 一、position 子元素已知宽度 - 父元素设置为:position: relative; - 子元素设置为:position: absolute; **要点:子元素距上50%,距左50%,外边距设置为自身宽高的一半** ``` <div class="parent"> <div class="child"></div> </div> .parent { background: #f00; width: 400px; height: 400px; position: relative; } .child { background: #00f; width: 200px; height: 100px; position: absolute; left: 50%; top: 50%; margin: -50px 0 0 -100px; } ``` ## 二、position+transform 子元素已知宽度 - 父元素设置为:position: relative; - 子元素设置为:position: absolute; **要点:子元素添加 transform: translate(-50%,-50%);** ``` <div class="parent"> <div class="child"></div> </div> .parent { background: #f00; width: 400px; height: 400px; position: relative; } .child { background: #00f; width: 200px; height: 100px; position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); } ``` ## 三、flex布局 - 父元素可不设置宽高 - 子元素必须设置宽高 **要点:父元素添加 display: flex; justify-content: center; align-items: center;** ``` <div class="parent"> <div class="child"></div> </div> .parent { background: #f00; width: 400px; height: 400px; display: flex; justify-content: center; align-items: center; } .child { background: #00f; width: 200px; height: 100px; } ``` ## 四、table-cell布局 - 外层元素设置为 display: table; - 中间元素设置为 display: table-cell; - 内层元素设置为 display: inline-block; **要点:** - **三层元素嵌套** - **中间元素的table-cell相当于表格的td,td为行内元素,所以需要再嵌套一层** - **内嵌元素必须设置 display: inline-block;** - **中间元素table-cell的背景色会覆盖父元素的背景色** ``` <div class="box"> <div class="content"> <div class="inner"></div> </div> </div> .box { background: #f00; width: 400px; height: 400px; display: table; } .content { background: #00f; display: table-cell; vertical-align: middle; text-align: center; } .inner { background: #000; display: inline-block; width: 200px; height: 100px; } ```