在一行内 一个无内容的行内元素 与有文字 的行内元素在一起 通常会 有文字的会下沉 原因在于 对齐的基线不一样。
无内容的行内元素的底部 需与 有文字的文字底部 在一条水平线上所以出现下沉现象
e.g:
解决方案:
1.我们可以在有文字 的一行 加上“vertical-align:top;”的属性;
2.在无文字的行内元素 加上   并设置相同的line-height;
CSS 水平对齐
在 CSS 中,可以使用多种属性来水平对齐元素。
对齐块元素
块元素指的是占据全部可用宽度的元素,并且在其前后都会换行。
块元素的例子:
对于文本对齐,请参见 CSS 文本一章。
在本教程中,我们将向您展示出于布局目的如何水平对齐块级元素。
使用 margin 属性来水平对齐
可通过将左和右外边距设置为 "auto",来对齐块元素。
注释:除非已经声明了 !DOCTYPE,否则使用 margin:auto 在 IE8 以及更早的版本中是无效的。
把左和右外边距设置为 auto,规定的是均等地分配可用的外边距。结果就是居中的元素:
实例
.center
{
margin-left:auto;
margin-right:auto;
width:70%;
background-color:#b0e0e6;
}
提示:如果宽度是 100%,则对齐没有效果。
注释:在 IE5 中,对于块元素存在一个外边距处理方面的 BUG。如需使上面的例子在 IE5 中有效,请添加一些额外的代码。
使用 position 属性进行左和右对齐
对齐元素的方法之一是使用绝对定位:
实例
.right
{
position:absolute;
right:0px;
width:300px;
background-color:#b0e0e6;
}
注释:绝对定位元素会被从正常流中删除,并且能够交叠元素。
跨浏览器兼容性问题
当像这样对齐元素时,对
元素的外边距和内边距进行预定义是一个好主意。这样可以避免在不同的浏览器中出现可见的差异。当使用 position 属性时,IE8 以及更早的版本存在一个问题。如果容器元素(在我们的案例中是
实例
body
{
margin:0;
padding:0;
}
.container
{
position:relative;
width:100%;
}
.right
{
position:absolute;
right:0px;
width:300px;
background-color:#b0e0e6;
}
使用 float 属性来进行左和右对齐
对齐元素的另一种方法是使用 float 属性:
实例
.right
{
float:right;
width:300px;
background-color:#b0e0e6;
}
跨浏览器兼容性问题
当像这样对齐元素时,对
元素的外边距和内边距进行预定义是一个好主意。这样可以避免在不同的浏览器中出现可见的差异。当使用 float 属性时,IE8 以及更早的版本存在一个问题。如果省略 !DOCTYPE 声明,那么 IE8 以及更早的版本会在右侧增加 17px 的外边距。这似乎是为滚动条预留的空间。当使用 float 属性时,请始终设置 !DOCTYPE 声明:
实例
body
{
margin:0;
padding:0;
}
.right
{
float:right;
width:300px;
background-color:#b0e0e6;
}
标签:块级,元素,float,width,right,对齐,margin,CSS
来源: https://www.cnblogs.com/degkr/p/13726420.html
display: flex | inline-flex ;
display
确定是否启用flexbox布局,flexbox布局下的子元素无论是内联元素的还是块状元素都会flex流的布局方式进行空间分配
flexDirection: row | row-reverse | column | column-reverse;
用来声明主轴的方向和在主轴上排列的方向
values | description |
---|---|
row(默认) | 子元素在ltr排版方式下从左向右排列;在rtl排版方式下从右向左排列 |
row-reverse | 与row排列方向相反,在ltr排版方式下从右向左排列;在rtl排版方式下从左向右排列 |
column | 类似于row但是是顶部到底部 column-reverse:类似于row-reverse但是是底部到顶部 |
flexWrap: nowrap | wrap | wrap-reverse;
flex-wrap属性定义如果主轴上不下如何换行。
values | description |
---|---|
nowrap(默认) | 子元素以单行显示,在ltr下自左向右;在rtl下自右向左 |
wrap | 子元素可以以多行显示,在ltr下自左向右;在rtl下自右向左 |
wrap-reverse | 子元素可以以多行显示,与wrap相反 |
justifyContent: flex-start | flex-end | center | space-between | space-around;
主轴方向上的对齐方式
values | description |
---|---|
flex-start(默认) | 子元素从一行的起始处开始放置 |
flex-end | 子元素会从一行的结尾处开始放置 |
center | 子元素会集中在一行的中央 |
space-between | 子元素会被均匀的分布在行内,两端与父容器无间隙 |
space-around | 子元素会均匀的按照等距离分布在一行 |
效果如下图
alignItems: flex-start | flex-end | center | baseline | stretch;
与主轴垂直的方向成为侧轴,alignItems
用来定义侧轴方向上的对齐方式
values | description |
---|---|
flex-start | 子元素在侧轴起点边的外边距紧靠住该行在侧轴起始的边 |
flex-end | 子元素在侧轴起点边的外边距紧靠改行在侧轴结尾的边 |
center | 子元素会被放置在侧轴的中央 |
baseline | 子元素会根据他们的基线对齐 |
stretch(默认) | 在侧轴方向上拉伸子元素以致填充满flexbox容器。 |
效果如下图
alignContent: flex-start | flex-end | center | space-between | space-around | stretch;
根据在侧轴上的额外空间来排列容器的行,alignContent与alignItems的作用类似,但是只对多行的flex布局才有效果,对单行布局没有效果
values | description |
---|---|
flex-start | 行会紧靠容器的起始位 |
flex-end | 行紧靠容器的结束位 |
center | 行紧靠容器的中间位 |
space-between | 每行会均匀分布;首行在容器起始处而最后行在容器结束处 |
space-around | 每行根据相同的距离均匀的分布 |
stretch(默认) | 每行将会伸展以占用剩余的空间 |
使用效果如下图
flexFlow: ‘flex-direction’ ‘flex-wrap’
相当于同时设置两个属性:
flex: flex-grow flex-shrink flex-basis;
flex属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性, 默认值分别是"0 1 auto",其中第二个和第三个参数(flex-shrink、flex-basis)是可选参数
values | description |
---|---|
flex-grow | 一个数字,规定项目将相对于其他灵活的项目进行扩展的量。 默认值 0 |
flex-shrink | 一个数字,规定项目将相对于其他灵活的项目进行收缩的量。默认值 1 |
flex-basis | 项目的长度。合法值:“auto”、“inherit” 或一个后跟 “%”、“px”、“em” 或任何其他长度单位的数字。默认值 auto |
宽度 = 弹性宽度 * ( flexGrow / sum( flexGorw ) )
alignSelf : 'auto | flex-start | flex-end | center | baseline | stretch';
alignSelf
属性允许单个元素有与其他元素不一样的对齐方式,可覆盖alignItems
属性。默认值为auto,表示继承父元素的alignItems
属性,如果没有父元素,则等同于stretch。
在一行内 一个无内容的行内元素 与有文字 的行内元素在一起 通常会 有文字的会下沉 原因在于 对齐的基线不一样。
无内容的行内元素的底部 需与 有文字的文字底部 在一条水平线上所以出现下沉现象
e.g:
解决方案:
1.我们可以在有文字 的一行 加上“vertical-align:top;”的属性;
2.在无文字的行内元素 加上   并设置相同的line-height;
转载于:https://www.cnblogs.com/RonnieQin/p/7866887.html
今天在工作的时候想要将盒子对齐,将div设置成了inline-block,结果盒子并没有对齐
<div class="box">
<div class="first child"></div>
<div class="second child">2</div>
<div class="third child"></div>
</div>
样式:
.box {
border: 2px solid skyblue;
height: 200px;
}
.child {
display: inline-block;
width: 100px;
height: 100px;
margin-right: 10px;
}
.first {
background-color: green;
}
.second {
background-color: purple;
}
.third {
background-color: orange;
}
结果并没有对齐: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
我们知道,行内块元素默认对齐方式是基线对齐 verticle-align:base-line
对于一个inline-block行内块元素,如果内部没有inline内联元素,或者overflow不是visible,则该元素的基线就是它margin的底边缘
上面例子绿色和黄色盒子的基线是他们的底边,紫色盒子的基线由数字2决定了,所以他们基线对齐之后就乱了
方法1:加 verticle-align: top / middle / bottom**
给盒子加上verticle-align就好了
.child {
vertical-align: top;
}
方法2:添加浮动:float ,只是浮动脱离标准流,不那么好控制**
.child { float: left}
方法3: 添加内容(字符串等内容)容就好
,不那么好控制**
.child { float: left}
方法3: 添加内容(字符串等内容)容就好