文章目录
1.绝对定位
1)
属性:position
值:absolute
<style>
p.abs{
position: absolute;
left: 150px;
top: 50px;
}
</style>
<p >正常文字1</p>
<p >正常文字2</p>
<p class="abs" >绝对定位的文字3</p>
<p >正常文字4</p>
<p >正常文字5</p>
被定义了absolution的块相当于是被放进了一个新创建的界面中,但是与原本界面一同显示
如果在一个被定义absolution的块中添加了一个被定义了absolution的块,则被定义了absolution的块的基准定位就是这个父块
<style>
p.abs{
position: absolute;
left: 100px;
top: 50px;
}
.absdiv{
position: absolute;
left: 150px;
top: 50px;
width:215px;
border: 1px solid blue;
}
</style>
<div>
<p >正常文字a</p>
<p >正常文字b</p>
<p >正常文字c</p>
<p >正常文字d</p>
<p >正常文字e</p>
<p >正常文字f</p>
<p >正常文字g</p>
</div>
<div class="absdiv">
这是一个定位了的div
<p class="abs" >绝对定位的文字</p>
</div>
如果在一个未被定义absolution的块中添加了一个被定义了absolution的块,则被定义了absolution的块的基准定位就是最近的一个被定义了absolution的父块
<style>
p.abs{
position: absolute;
left: 100px;
top: 50px;
}
</style>
<div>
<p >正常文字a</p>
<p >正常文字b</p>
<p >正常文字c</p>
<p >正常文字d</p>
<p >正常文字e</p>
<p >正常文字f</p>
<p >正常文字g</p>
</div>
<div>
这个div没有定位
<p class="abs" >绝对定位的文字</p>
</div>
2)元素重叠
对块进行absolution定义,就可以实现元素的重叠显示,在对块进行z-index定义,就可以定义块的显示优先级
属性:z-index
值:数值
<style>
img#i1{
position: absolute;
left: 60px;
top: 20px;
z-index:1;
}
img#i2{
position: absolute;
left: 60px;
top: 120px;
z-index:-1;
}
</style>
<div>
<p >正常文字a</p>
<p >正常文字b</p>
<p >正常文字c</p>
<p >正常文字d</p>
<p >正常文字e</p>
<p >正常文字f</p>
<p >正常文字g</p>
</div>
<img id="i1" src="https://how2j.cn/example.gif" />
<img id="i2" src="https://how2j.cn/example.gif" />
2.相对定位
与绝对定位不同的是,相对定位并不会把这个块与原本的块分离,而是在原本的位置基础上进行移动,也不会改变其他块的位置
属性:position
值:relative
<style>
p.r{
position: relative;
left: 150px;
top: 50px;
}
</style>
<p >正常文字1</p>
<p >正常文字2</p>
<p class="r" >相对定位的文字3</p>
<p >正常文字4</p>
<p >正常文字5</p>
3.浮动
1)文字向右浮动
文字右顶格,就把原本的位置让出来了,下一排的文字就会占用原本的位置
属性:float
值:right
<style>
.f{
float:right;
}
</style>
<div >正常文字1</div>
<div >正常文字2</div>
<div class="f">浮动的文字</div>
<div >正常文字4</div>
<div >正常文字5</div>
2)文字向左浮动
文字会左顶格,同时下一排的文字会跟随在原本这一排的文字的后面
属性:float
值:left
<style>
div.float{
float:left;
}
</style>
<div>正常文字1</div>
<div class=float>浮动的文字</div>
<div>正常文字4</div>
<div>正常文字5</div>
3)文字围绕图片
对图片进行float:left的设置,就可以使文字环绕
<style>
.f{
float:left;
}
div{
width:320px;
}
</style>
<div >
<img src="https://how2j.cn/example.gif"/>
<p> 当图片不浮动时,文字就会换行出现在下面
当图片不浮动时,文字就会换行出现在下面
当图片不浮动时,文字就会换行出现在下面
当图片不浮动时,文字就会换行出现在下面
当图片不浮动时,文字就会换行出现在下面
当图片不浮动时,文字就会换行出现在下面
</p>
</div>
<div >
<img class="f" src="https://how2j.cn/example.gif"/>
<p> 当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
</p>
</div>
3)在已经使图片左浮动了之后,使文字不环绕图片显示
可以对文字设置clear:left即达到不允许浮动元素出现在左边的效果
<style>
.f{
float:left;
}
div{
width:320px;
}
.clearp{
clear:left;
}
</style>
<div >
<img class="f" src="https://how2j.cn/example.gif"/>
<p> 当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
当图片浮动时,文字围绕着图片
</p>
</div>
<div >
<img class="f" src="https://how2j.cn/example.gif"/>
<p class="clearp"> 当图片浮动时,文字却不想围绕图片
当图片浮动时,文字却不想围绕图片
当图片浮动时,文字却不想围绕图片
当图片浮动时,文字却不想围绕图片
</p>
</div>
4)水平排列div
默认情况下div是会换行排列的
使用float:left就可以实现水平排列
但是如果超出了父容器,还是会换行
<style>
div#floatingDiv{
width:200px;
}
div#floatingDiv div{
float:left;
}
</style>
默认的div排列是会换行的
<div>
菜单1
</div>
<div>
菜单2
</div>
<div>
菜单3
</div>
如果使用float就可以达到水平排列的效果,通常会用在菜单,导航栏等地方
如果超出了父容器,还会有自动换行的效果
<div id="floatingDiv">
<div>
菜单1
</div>
<div>
菜单2
</div>
<div>
菜单3
</div>
<div>
菜单4
</div>
<div>
菜单5
</div>
<div>
菜单6
</div>
</div>
3.显示方式
1)隐藏
display:none
使得元素被隐藏并且不占用位置
<style>
div.d{
display:none;
}
</style>
<div>可见的div1</div>
<div class="d">隐藏的div2,使用display:none隐藏</div>
<div>可见的div3</div>
2)块级
display:block;使这个元素转换为块级元素
块级元素会自动顶格,自动换行,并且可以设定width和height
内联元素不会默认换行,也不能设置width和height
div默认为块级元素
span默认为内联元素
可以通过display:block;强制使span转换为块级元素
<style>
div,span{
border: 1px solid lightgray;
margin:10px;
width:200px;
height:100px;
}
.d{
display:block;
}
</style>
<div>普通的div块</div>
<span>这是普通span</span> <span>这是普通span</span> <span>这是普通span</span>
<span class="d">这是span,被改造成了块级元素</span>
3)内联
display:inline
内联元素前后没有换行,并且在其上的width和height也无效。 其大小由其中的内容决定
<style>
div,span{
boder: 1px solid lightgray;
margin:10px;
width:200px;
height:100px;
}
.s{
display:inline;
}
</style>
<span>这是个普通的span</span>
<span>这是个普通的span</span>
<span>这是个普通的span</span>
<div class=s>这是内联化的div</div>
4)内联-块级
内联默认不换行,但是不能设定大小
块级默认换行,但是可以设定大小
有时候,需要元素处于同一行,同时还能指定大小,这个时候,就需要用到内联-块级 inline-block
<style>
span{
display:inline-block;
border: 1px solid lightgray;
margin:10px;
width:100px;
}
</style>
像这样 ,每个都能设置宽度 ,同时还能在同一行。
<br>
<span>盖伦</span>
<span>蒙多医生</span>
<span>奈德丽</span>
<span>蒸汽机器人</span>
4.水平居中
1)内容居中
可以通过设置属性 align=“center”
也可以通过style=“text-align:center”设置
<style>
div{
border:1px solid lightgray;
margin:10px;
}
</style>
<div align="center">
通过设置属性align="center" 居中的内容
</div>
<div style="text-align:center">
通过样式style="text-align:center" 居中的内容
</div>
2)元素居中
默认情况下div是占满宽度的,所以无法设置居中,可以先设置div宽度,再通过设置margin:0 auto;使div元素居中
span是不能通过margin: 0 auto;居中
<style>
div{
border: solid 1px lightgray;
margin: 10px;
}
span{
border: solid 1px lightskyblue;
}
</style>
<div> 默认情况下div会占用100%的宽度,所以无法观察元素是否居中</div>
<div style="width:300px;margin:0 auto">
设置本div的宽度,然后再使用样式 margin: 0 auto来使得元素居中</div>
<span style="width:300px;margin:0 auto">
span 是内联元素,无法设置宽度,所以不能通过margin:0 auto居中</span>
<div style="text-align:center">
<span>span的居中可以通过放置在div中,然后让div text-align实现居中</span>
</div>
5.左侧固定
对一个div设置float:left,那么它就会左顶格,并且下一个div会在他的右侧显示,但是,如果下个div的宽度和高度与这个div不一致,那么就无法在右侧显示,这里我们就需要用到overflow:hidden
给一个元素中设置overflow:hidden,那么该元素的内容若超出了给定的宽度和高度属性,那么超出的部分将会被隐藏,不占位。
<style>
.left{
width:200px;
float:left;
background-color:pink
}
.right{
overflow:hidden;
background-color:lightskyblue;
}
</style>
<div class="left">左边固定宽度</div>
<div class="right">右边自动填满</div>
6.垂直居中
1)line-height
适合单独一行垂直居中
<style>
#d {
line-height: 100px;
}
div{
border:solid 1px lightskyblue;
}
</style>
<div id="d">line-height 适合单独一行垂直居中</div>
2)内边距方式
<style>
#d {
padding: 30 0;
}
div{
border:solid 1px lightskyblue;
}
</style>
<div id="d">多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 多行内容 </div>
3)table方式
先通过display:table-cell;将div用单元格显示,然后借助单元格的垂直居中vertical-align:middle
这样图片也可以居中
<style>
#d {
display: table-cell;
vertical-align: middle;
height:200px;
}
div{
border:solid 1px lightskyblue;
}
</style>
<div id="d">
<img src="https://how2j.cn/example.gif">
</div>
7.贴于下方
将父div设置为relative,子div设置absolution的同时设置bottom:0
<style>
#div1
{
position: relative;
height: 300px;
width: 90%;
background-color: skyblue;
}
#div2
{
position: absolute;
bottom: 0;
height: 30px;
width: 100%;
background-color: lightgreen;
}
</style>
<div id="div1">
<div id="div2"> 无论蓝色div高度如何变化,绿色div都会贴在下面
</div>
</div>
8.块之间的空格
1)块之间空格
如果在编写span的时候使用了换行,那么生成的span之间就会存在空格
<style>
span{
border-bottom:2px solid lightgray;
}
</style>
<div class="continue">
<span>连续的span</span><span>连续的span</span><span>连续的span</span><span>连续的span</span>
</div>
<div class="nocontinue">
<span>有换行的span</span>
<span>有换行的span</span>
<span>有换行的span</span>
</div>
2)解决办法
使用float:left解决
float使用完毕之后,记得在下面加上 *<div style=“clear:both” /div>*用于使得后续的元素,不会和这些span重复在一起
<style>
div.nocontinue span{
border-bottom:2px solid lightgray;
float:left;
}
</style>
<div class="nocontinue">
<span>有换行的span</span>
<span>有换行的span</span>
<span>有换行的span</span>
</div>
<div style="clear:both"></div>
<div>后续的内容</div>