修真院Web工程师零基础全能课
本节课内容:
CSS行内块级元素布局和定位
主讲人介绍
沁修,葡萄藤技术总监
项目经验丰富,擅长H5移动项目开发。
专注技术选型、底层开发、最佳代码实践规范总结与推广。
直播录屏版
传送门:https://v.qq.com/x/page/l0675...
1.行内块级元素布局
上一节里面我们讲到了float浮动布局以及它的一些使用方法,在这一节里会将到行内块级元素布局的方法。
html的元素最开始是只有行内元素和块级元素两种,大多数元素都是块级元素,其特点是独占一行,会尽量占满浏览器的宽度。
但这两种元素在布局上比较无力,因此人们开始利用float浮动,这一最开始用于文字环绕的属性来进行布局。
这样的布局方式时至今日依然有不少的使用场景,但它的缺点也是非常明显的,它破坏了文档流造成高度塌陷,是一种hack的方式。
那么我们还有没有其他的方法来完成布局呢?
答案当然是有的,行内块级元素inline-block。
当为元素设置display为inline-block时,该元素就成为一个行内块级元素,既可以在一行内放置多个这样的元素,又可以为它设置宽高内外边距等属性。
比如当我们要完成九宫格布局的代码是这样的:
<style media="screen">
body {
margin: 0;
font-size: 0;
}
div {
display: inline-block;
background-color: orange;
border-radius: 5px;
width: 30vw;
height: 30vw;
margin: 1.5vw 0 0 1.5vw;
}
</style>
</head>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
这样的布局方式也是会有一些去诶按的,比如IE6,7上支持会有一些问题。
解决办法其一是将inline元素直接写成{display: inline-block;}
其二是将block元素写成{display: inline-block; display: inline;}
另外换行符也会有空格间隙的问题
解决办法其一是去掉空格换行符直接连写,但这样代码不太美观。
其二是对父级元素加上font-size:0,这样字体大小为0的情况下空格也不再占据空间因此间隙问题得以解决。
2.定位
定位position,这个属性的目的是更改盒子与环境的位置关系。它有4种属性值:
属性说明static该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。relative相对定位的元素是在文档中的正常位置偏移给定的值,但是不影响其他元素的偏移。absolute
相对定位的元素并未脱离文档流,而绝对定位的元素则脱离了文档流。
绝对定位元素相对于最近的非 static 祖先元素定位。当这样的祖先元素不存在时,则相对于ICB(inital container block, 初始包含块)。
fixed
固定定位
和绝对定位类似,但元素的基准块是viewport视窗。
这种定位常用于创建在滚动屏幕上还有固定元素的地方。
relative的使用可以看如下例子:
<style>
div {
display: inline-block;
width: 100px;
height: 100px;
background-color: red;
color: #fff;
text-align: center;
line-height: 100px;
font-size: 30px;
}
div:nth-child(2) {
position: relative;
top: 20px;
left: 20px;
border: 1px solid #333;
}
</style>
<body>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</body>
页面效果如下:
可以看出来在设置relative之后,可以对该元素设置left,right的方位的属性,并且不会影响该元素在文档流中的位置。
absolute的使用可以看如下例子:
<style media="screen">
.parent {
padding: 50px;
background: #eee;
width: 500px;
height: 300px;
}
.child {
background: #ccc;
/ position: relative; /
}
.item {
display: inline-block;
width: 50px;
height: 50px;
background: yellow;
}
.item:nth-child(3) {
position: absolute;
background: red;
left: 10px;
top: 10px;
}
</style>
<body>
<div class="parent">
<div class="child">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
</body>
其展示效果如下:
可以看出来,absolute绝对定位会向上在祖先级元素里寻找有relative的元素,以它作为定位的基准,如果祖先级元素里都没有relative,那它会以根元素作为基准。
fixed的使用可以看如下例子:
<style media="screen">
body {
margin: 0;
}
header {
position: fixed;
top: 0;
width: 100%;
background: rgba(38, 135, 182, 0.85);
text-align: center;
line-height: 2.6em;
color: #fff;
}
header > i {
float: left;
}
footer {
position: fixed;
bottom: 0;
width: 100%;
background: rgba(65, 65, 65, 0.47);
line-height: 2.6em;
text-align: center;
}
</style>
<body>
<header>
奇妙的文章
</header>
<footer><button>点击就送</button></footer>
<section>
文案分工
形成场景规范角色规范
李晴找到位置
<p>
summis fabulas elit ne iis o amet quae eram id sint non ad sunt singulis ne ne
aliquip non appellat.
</p>
<p>
Illum probant firmissimum. Eu qui quae culpa dolore, anim ad fabulas non elit ut
expetendis nulla commodo laborum eu elit deserunt des
</p>
<p>
Quamquam magna iis possumus eruditionem, litteris praetermissum an litteris.
Ullamco sempitern
</p>
<p>
Et quid commodo coniunctione, proident sed tempor. Quo quamquam aut commodo qui
magna sed nostrud ut export
</p>
<p>
Appellat illum excepteur ne de officia graviterque et commodo se ullamco, in nam
domesticarum.
</p>
<p>
Eram ubi probant ad culpa, eu ab elit eram esse ut dolor probant qui fore quae
hic amet e eiusmod a sint.
</p>
<p>
Quis domesticarum singulis sunt proident ex elit laboris o fugiat anim. Eram o
iudicem e e fore offendit commodo.
</p>
<p>
Ex sunt incididunt fidelissimae ita doctrina qui quis. Laborum ea aute laboris.
Fabulas dolore ullamco, labore offendit quo tempor eram.Non noster graviterque,
ut sunt mandaremus excepteur. E quid occaecat commodo, a quid duis se consequat.
E malis ea quorum.
</p>
<p>
Duis quibusdam est exquisitaque, sed nostrud graviterque de tempor ita id enim
vidisse.
</p>
<p>
E duis aliquip concursionibus, proident ex irure, labore ea possumus id
incurreret sed eram. Quem deserunt quo aute quis,.
</p>
</section>
</body>
其展示效果如下:
可以看出来当对元素设置了fixed之后,它的绝对定位是相对于屏幕来讲的。
因此只要灵活运用定位,能为我们的布局增加不少色彩,实现更加丰富的网页开发
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。