CSS布局

本文详细介绍了CSS布局的各种技巧,包括绝对定位、相对定位、浮动布局、显示方式(隐藏、块级、内联、内联-块级)、水平与垂直居中、左侧固定、贴于下方以及解决块之间空格的方法。重点讲解了如何通过position、float和display属性来实现各种布局效果。
摘要由CSDN通过智能技术生成

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>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值