3

CSS 样式之内容居中方法

 2 years ago
source link: https://knightyun.github.io/2018/05/22/css-content-center
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

HTML中要实现某一内容水平居中显示,要通过设置css样式来实现,主要分为行内元素块状元素两种情况,块状元素又可分为块状定宽块状不定宽两种情况,接下来依次介绍分析。

像 a、span、i 这类元素叫做行内元素,文本图片也是行内元素。行内元素水平居中方法简单,只需要给行内元素的父元素设置 text-align: center; css样式就内实现内容水平居中,例如: html:

<div class = "txt">居中内容</div>
.txt {
	text-align: center;
}

文本内容的父元素就是 div ,这样就内实现水平居中,效果如下:

居中内容

块状定宽元素

常见块状元素有 div, p, h 等,定宽即为其设置固定宽度值 width,这时我们可以为元素设置 margin-leftmargin-right 来实现水平居中,也可以简写为 margin: 0 auto;,例如: html:

<div class = "txt">居中内容</div>
.txt {
	width: 100px;
	margin: 10px auto;
}

实现效果如下:

居中内容

块状不定宽

有时候我们不能限制块状元素的宽度,就是块状不定宽元素,主要有三种方法,接下来一次介绍。

1、加入 table 标签

利用 table 标签的长度自适应性,长度根据内容自动调整,然后通过设置 margin: auto; 实现水平居中,例如: html:

<table>
	<tbody>
		<tr>
			<td>
			<div class = "txt">居中内容</div>
			</td>
		</tr>
	</tbody>
</table>
.txt {
	margin: auto;
}

效果如下:

居中内容
2、设置为行内元素

就是通过设置 display: inline; 将块状元素设置为行内元素,然后就是像行内元素一样设置 text-align: center; 来是内容水平居中,例如: html:

<div class = "txt">居中内容</div>
.txt {
	display: inline;
	text-align: center;
}
居中内容

注:

使用这种方法虽然可以不用像table增加无语义标签,但是改变了display,所以会少了一些功能,例如不能设置宽度。

3、设置浮动和相对定位

这种方法设置就相对复杂,同时设置浮动相对定位来实现元素的水平居中。 首先设置父元素

float: left; 
position: relative; 
left: 50%;

然后设置子元素

position: relative;
left: -50%;

通过代码应该好理解,就是通过50%那个关键位置来实现水平居中效果,因为50%是界面的中央位置,将父元素右移,直到左边框移到中线位置,在将子元素向左移,这样子元素不就居中了吗。

这里要注意的是分别设置父元素50%子元素-50%。 实现效果如下:

居中内容

说完水平居中接着说垂直居中,这里主要又分为两种情况:父元素高度确定的单行文本父元素高度确定的多行文本

对于父元素高度确定的单行文本,可以通过设置父元素heightline-height 高度一致来实现。

这里可以这样理解,height 是元素的高度,例如文本字体的高度,line-height 是行高,例如文本的行间距,一行文本中,行间距被分为两部分,分别位于这行文本的顶部底部(因为行间距是两行之间的距离),所以设置 heightline-height 一样大的话,line-height 就被均分为两部分,分别位于元素顶部和底部,这样中间设置为 height 的元素不就实现垂直居中了吗 ^_^ .

例如: html:

<div class = "txt">居中内容</div>
.txt {
	height: 200px;
	line-height: 200px;
}

效果如下:



居中内容



这里需要注意的是关键词“单行文本”,如果使用这种方法但是一行文本超过宽度限制的话,某些内容就会脱离元素块,子元素有多行的话,这几行就会并排居中,并保持设置的行高。

对于父元素高度确定的文本图片等内容设置垂直居中,主要有两种方法。

1、使用 table 标签

对元素使用table标签,包括 tbody,tr,td,然后对父元素设置 vertical-align: middle; 样式,就能使 inline-block 类型的子元素垂直居中显示。

因为 td 标签默认设置了 vertical-align: middle,所以也可以不用单独设置 vertical-align。 例如: html:

<table>
	<tbody>
		<tr>
			<td class="txt">
				<p>居中内容</p>
				<p>居中内容</p>
				<p>居中内容</p>
			</td>
		</tr>
	</tbody>
</table>
.txt {
        height: 300px;
	background-color: #ccc;
}

这里的父元素就是 td,父元素的高度必须确定,就要为其设置 height。

注意这里的 p 元素是 inline 类型的,所以设置 vertical-align: middle 的话会出现错误,若果是图片元素 img 的话,就可以设置 vertical-align: middle,但是由于 td 标签默认,所以都可以不写。

效果如下:



居中内容



2、设置 table-cell

第二种方法是把要垂直居中显示的元素的父元素设置为table-cell (表格单元)类型:display: table-cell;,然后设置 vertical-align: middle就能实现元素垂直居中。

但是这个方法存在兼容性问题,chrome, firefox, IE8以上才支持这个操作。

例如: html:

<div class="txt">
	<p>居中内容</p>
	<p>居中内容</p>
	<p>居中内容</p>
</div>
.txt {
        height: 300px;
	background-color: #ccc;
	display: table-cell;
	vertical-align: middle;
}

同样,要为父元素 div 设置高度 height

效果如下:



居中内容



这种方法除了兼容性问题外,同时也改变了 display类型,会在某些方面带来不便。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK