当前位置: 首页 > Web前端 > CSS

CSS元素居中指南

时间:2023-03-31 11:57:50 CSS

如有错误,欢迎指正。更多内容查看GitHub1.元素分类首先,你需要知道元素分为三种:行内元素(inlineelements)、块级元素、行内块级元素。1、行内(inline)元素可以和其他元素一起占据一个行高、行高、内外边距。宽度不能更改为内容占用的宽度,也不能更改为容纳文本或其他内联元素。2.块级元素独占一个行高和行高。可以更改内部和外部边距。如果未设置宽度,则宽度默认为容器的100%。它可以容纳内联元素和块级元素。3.内联块级元素可以与其他元素行内。常用内联(inline)元素:a——锚点b——粗体br——换行符cite——参考代码——计算机代码em——强调i——斜体img——图片输入——输入框标签——表格标签span——常用内联容器,定义块内文本strike-dashstrong-boldemphasissub-subscriptsup-superscripttextarea-多行文本输入框文档分区表单-表单部分-页面部分h1-主标题h2-副标题h3-3级标题h4-4级标题h5-5级标题h6-6级标题hr-水平分隔标题-标题菜单-菜单列表ol-排序listul-非排序列表p-段落table-表格常见的内联块级元素有:img-图片input-输入例如:img{display:inline-block;}2.水平居中1、内联元素水平居中(1)父元素的内联元素是块级元素使用text-align:centerp{background-color:cyan;text-align:center;

我是内联文本

可以看到块级元素p的默认宽度是整个容器的100%,它持有的文本是一个内联元素,并且它使用text-align:center水平居中。text-align:center只对行内元素有效,包括行内块级元素。比如对inline、inline-block、inline-table、inline-flex元素也是有效的,因为inline-block的值会把内层的div显示为内嵌元素和块,所以外层的属性text-aligndiv将使内部div居中。2.块级元素水平居中(1)单个块使用margin:0auto有时需要居中的不是文本,而是整个块。我们希望通过将边距设置为“自动”来使左右边距相等。这通常用于固定宽度的块,如果块本身是灵活的,它会占据整个宽度,当然居中效果可能不明显,因为它占据了整个宽度。无论块级元素或父元素居中的宽度如何,这都有效。.block{宽度:200px;保证金:0自动;background-color:aquamarine;我是block,设置宽度看居中效果,不要设置宽度填满整个可用宽度
(2)Block-level父级为块级元素的元素水平居中1)使用具有自适应左右边距的表格布局。因为块级元素设置为表格布局,所以块级成为内部单元格。child-3{显示:表格;margin:0auto;块级元素(display:table)+(margin:0auto)
2)当多个块级元素在一行中居中时,你想要more当一个块级元素在一行中居中时,有两种方式:第一种:将块级元素变为内联块级元素:display:inline-block当多个块级元素变为内联块时级元素,可以使用居中内联元素的方法text-align:center;居中:.box{文本对齐:居中;背景颜色:海蓝宝石;}.inline-block{宽度:100px;高度:50px;边框:1px#333纯色;显示:inline-block;块级别1

块级别2

块级3

设置每个块级元素的宽高只是为了显示效果。第二种方法:使用flexlayout.box{display:flex;证明内容:居中;}.box-child{宽度:100px;高度:50px;文本对齐:居中;内联文本居中边框:1px#333solid;blocklevel1

blocklevel2

块级3

3)多个块级元素在一列居中,也属于块级水平居中块级别。.boxp{margin:0auto;}.box-child{width:100px;高度:50px;文本对齐:居中;//是让行内文本在块级元素中居中border:1px#333solid;块级别1

块级别2

块级3

(3)定位块级元素:parent阶段childabsolute+transform父元素使用相对定位,子元素使用绝对定位。相对定位有指定的top、bottom、left、right。子元素的对象使用绝对定位在相对定位的父元素的基础上进行偏移。如果没有相对定位的父元素,则偏移量基于文档。由于绝对定位不在文档流中,因此最好尽可能避免使用它。对使用绝对定位的元素进行居中时,如果元素的尺寸是固定的,经过偏移后,只需要使用外边距进行补偿即可。步骤如下:setleft:50%onthecenteredelement,使元素的左边缘与父元素的50%线对齐。添加负边距,元素宽度的一半,让一半元素向左移动,中心点与父元素的50%线对齐。使用转换时,需要兼容的浏览器。.parent{position:relative;}/*注意兼容性*/.child-4-1{position:absolute;左:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}定位块级元素(父子)3.浮动元素水平居中浮动float是CSS中最常用的布局技术。当使用float:left设置元素样式时,后面的元素将被重新格式化。文档流是指内容的顺序以及元素之间的排列方式。如果浮动元素没有设置宽度,它将折叠到内容的宽度。如果之后的元素小于剩余空间,它将向右移动。请记住,设置为display:block的元素需要具有固定宽度,否则它将占据一行。您可以通过在样式表中为元素提供明确的属性来防止元素重新格式化。比如clear:both,clear:left和clear:right,你也可以使用clear:none来覆盖默认行为。因为浮动的子元素会导致父元素折叠,您可能会想创建新元素来添加clear:以防止这种行为。虽然这可行,但我们希望保留标记语义,因此只能使用CSS来实现。可以使用伪元素::afterclearfix创建一个清晰的浮点数:.container::after{clear:both;内容:'';display:table;}float适用于大型容器,不适用于文本元素,因为它很难对齐。使用display:inline-block比较合适,参考上面的内联元素水平居中。想让浮动元素居中怎么办?它只向左和向右浮动,而不会向中间浮动。这就需要一条中线,所以给浮动元素设置一个父元素,以父元素的中线作为居中标准。(1)浮动元素指定宽度:phase+halfofnegativewidthmargin如果浮动元素需要指定宽度,浮动时需要用一半宽度来补偿负margin。.child{位置:相对;向左飘浮;宽度:250px;左:50%;margin-left:-125px;指定宽度:子位置左浮动,负半宽边距(2)浮动元素不指定宽度:父子相左浮动,50%左右。父母{位置:相对;//相位float:left;//左浮动left:50%;//左50%}.child-2-2--p{position:relative;//相位float:left;//左浮动right:50%;//右50%不指定宽度:父子向左浮动,左右各50%(3)通用浮动元素(有或没有固定宽度):flex.parent{display:flex;justify-content:center;}.chlid{float:left;有无定宽:flex下面是一个示例效果:3.垂直居中1.内联元素垂直居中(1)单行内联元素1)使用padding有时inline/text元素可以垂直居中显示只是因为它们的顶部和底部的Padding相同。.parent{padding-top:10px;padding-bottom:10px;}.child{背景色:cornflowerblue;显示:弹性;弹性方向:列;证明内容:居中;高度:50px;1.单行内联元素使用相同的top和bottompadding来实现垂直居中2)使用行高。如果没有padding可以选择,可以使用rowheight.parent{background-color:aquamarine;}.child{height:50px;行高:50px;1.单行内联元素使用行高实现垂直居中(二)多行内联元素1)使用display:table多行内联元素也可以使用上下相同的padding实现一个居中效果,但如果这不起作用,也许文本所在的元素可以是一个表格单元格,可以是字面上的表格单元格,也可以是用CSS创建的表格单元格。.parent{高度:100px;背景色:青色;显示:表格;}.child{显示:表格单元格;vertical-align:middle;3.使用display:table(Loremipsum,dolorsitametconsecteturadipisicingelit.Vel,quosratione,eaaccusantiumv??oluptas)多行内联元素的parent

2)使用flex要记住,只有父容器有高度固定时才能实现。.parent{背景颜色:cornflowerblue;显示:弹性;弹性方向:列;证明内容:居中;高度:100px;4.多行内联元素的父级使用flex-direction:column(Loremipsum,dolorsitametconsecteturadipisicingelit.Vel,quosratione,eaaccusantiumv??oluptas)

3)使用伪元素.parent{位置:相对;背景颜色:蓟;}.parent::before{内容:'';vertical-align:middle;}.child{display:inline-block;vertical-align:middle;5.多行内联元素的父级使用伪元素(Loremipsum,dolorsitametconsecteturadipisicingelit.Vel,quosratione,eaaccusantiumv??oluptas)

2,块级元素垂直居中(1)固定height:parentandchild+50%+高度的负一半margin.parent{position:relative;背景色:珊瑚色;}.child{位置:绝对;高度:25px;顶部:50%;margin-top:-12.5px;1。parent阶段,childabsolute+指定高度+top50%+负高度的半边距(2)未知高度:三种方法1)parent阶段childabsolute+upper50%+upperoffset50%.parent{位置:相对;背景色:珊瑚色;}.child{位置:绝对;顶部:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);1、parent阶段,child绝对+指定高度+top50%+负高度的半边距2)父表格布局+子表格单元格+vertical-align:middle.parent{display:table;}.child{display:table-cell;vertical-align:middle;未知高度:parenttable-cell+childvertical-align:middlemargin3)parentflex+对齐项目:center.parent{显示:flex;align-items:center;未知高度:parentflex+align-items:center4)Parentflex+flex-direction+justify-content.parent{display:flex;弹性方向:列;justify-content:center;Unknownheight:parentflex+flex-direction+justify-content下面是全部效果垂直居中:4.水平和垂直居中1.固定宽高:parentphase+childabsolutetopleft50%negativemargintopleftnegativehalfheight.parent{position:relative;}.child{width:500px;高度:100px;位置:绝对;顶部:50%;左:50%;margin:-50px00-250px;父子+变换2.未知宽高:父子+transform.parent{position:relative;}.child{position:absolute;左:50%;顶部:50%;转换:翻译(-50%,-50%);}parent香子觉+变换3、parentflex+justify-content+align-items.parent{display:flex;证明内容:居中;对齐项目:居中;fatherflex+justify-content+align-items4,fathergrid/flex+childmagin:auto.parent{/*display:flex;*/显示:网格;高度:50px;background-color:darksalmon;}.child{margin:auto;fathergrid/flex+childmagin:auto5,父表格单元格位置+垂直对齐+文本对齐.parent{显示:表格单元格;垂直对齐:中间;text-align:center;parenttable-cellposition+vertical-align+text-align6、parentchildline+顶部、底部、左侧、右侧0+margin:auto.parent{position:relative;}.child{position:absolute;顶部:0;左:0;右:0;底部:0;左右0