CSS布局

5 篇文章 0 订阅
5 篇文章 0 订阅

CSS布局学习笔记

1.绝对定位
属性:position 值:absolute
通过制定left,top绝对定位一个元素。
(1)设置了绝对定位的元素,相当于该元素被从原文档中删除了。

<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>

(2)绝对定位是基于最近的一个绝对定位了的父容器。
实例代码:

<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>

(3)通过绝对定位可以把一个元素放在另一个元素上,这样位置就重复了。重复了,就存在一个谁掩盖谁的问题。 这个时候就可以使z-index属性, 当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>

讲一个有趣的事情:
在这里插入图片描述
这是一个小练习。练习代码如下:

<!-- 相对定位和绝对定位的练习。 -->
<style>
    p.abs{
        position: absolute;
        top: 67px;
    }

    p.rel{
        position: relative;
        left: 150px;
    }
</style>

<p >正常文字1</p>
<p >正常文字2</p>
<!-- 相对定位文字3相对于本来的位置定位,向右平移150px单位 -->
<p class="rel">相对定位文字3</p>
<!-- 正常文字4相对于body定位,因为上面没有一个是已经绝对定义的。 -->
<p class="abs" >正常文字4</p>
<p >正常文字5</p>

3.浮动
浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
属性:float 值: left,right

(1)文字向右浮动:浮动后,坑位让出来,并且是在原来的高度的基础上,向右浮动。

<style>
  .f{
    float: right;
  }
</style>

<div>正常文字1</div>
<div>正常文字2</div>
<div class="f">向右浮动的文字</div>
<div>正常文字4</div>
<div>正常文字5</div>

在这里插入图片描述
(2)文字向左浮动:向左浮动后,会把“坑”让出来,这个时候"正常的文字4“ 就会过来试图占这个坑,但是,发现 “浮动的文字”并没有走,结果,就只好排在它后面了。

<style>
  .f{
    float:left;
  }
   
  </style>
   
  <div >正常文字1</div>
  <div >正常文字2</div>
  <div class="f">浮动的文字</div>
  <div >正常文字4</div>
  <div >正常文字5</div>

在这里插入图片描述
(3)图片浮动
当图片不浮动时,文字就会换行出现在下面;当图片浮动时,文字围绕着图片。和步骤2一样,当图片浮动的时候,就会让出这个“坑”出来,这个时候文字就试图去填补这个“坑”。
实例代码:

<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>

(4)文字不想围绕图片
不允许出现浮动元素。
属性:clear 值: left right both none
如果p左边出现了浮动的元素,如此例,则设置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>

在这里插入图片描述

(5)默认的div排列是会换行的,如果使用float就可以达到水平排列的效果,通常会用在菜单,导航栏等地方。如果超出了父容器,还会有自动换行的效果。

<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>

4.显示方式
元素的display显示方式有多种,隐藏、块级、内联、内联-块级。
常用的有四种:
display:none 隐藏 示例代码
display:block 块级 示例代码
display:inline 内联 示例代码
display:inline-block 内联-块级

(1)display:none; 使得被选择的元素隐藏,并且不占用原来的位置。

(2)display:block; 表示块级元素
块级元素会自动换行,其上的width和height也能够生效。

<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>

效果如下:
在这里插入图片描述
备注:此处span块的width和height属性跟随div的变化。
也可以单独设置style属性。

span{
    width: 400px;
    height: 200px;
  }

当使用block时,该代码段有效。

(3)内联元素
display:inline; 表示内联元素
内联元素前后没有换行,并且在其上的width和height也无效。 其大小由其中的内容决定。

<style>
  div,span{
     border: 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。对内联元素or外联元素都能改造。

<style>
  span{
     display:inline-block;
     border: 1px solid lightgray;
     margin:10px;
     width:100px;
  }
  </style>
  像这样 ,每个都能设置宽度 ,同时还能在同一行。
  <br>
   
  <span>盖伦</span>
  <span>蒙多医生</span>
  <span>奈德丽</span>
  <span>蒸汽机器人</span>

在这里插入图片描述
(5)其他
其他的显示方式像
list-item 显示为列表
table 显示为表格
inline-table 显示为前后无换行的表格
table-cell 显示为单元格

5.元素居中

<style>
  div{
     border: solid 1px lightgray;
     /* 设置外边距10px */
     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>

在这里插入图片描述
一个小疑问:底部居中怎么实现?

<style>
  div{
    background-color: tan;
    width: 98%;
    text-align: center;
    padding-top: 30px;
    padding-bottom: 30px ;
  }
  div.buttom{
    position:absolute;
    bottom: 10px;
  }
  span.special{
    margin-right: 100px;
  }
</style>

<div class="buttom">
  <span class="special">
    <a href="">公司简介</a>
  </span>
  <span class="special">
    <a href="">公司动态</a>
  </span>
  <span class="special">
    <a href="">产品介绍</a>
  </span class="special">
  <span class="special">
    <a href="">联系我们</a>
  </span>
  <span>
    <a href="">关于我们</a>
  </span>
</div>

6.左侧固定

<style>
    .left{
      width:200px;
      float:left;
      background-color:pink
     }
     .right{
       overflow:hidden;
       background-color:lightskyblue;
     }
   </style>
    
   <div class="left">左边固定宽度</div>
    
   <div class="right">右边自动填满</div>

右边自动填满,宽度根据窗口大小自己调整。
在这里插入图片描述
设置右边的高度为200px,如下:

<style>
    .left{
      width:200px;
      float:left;
      background-color:pink
     }
     .right{
       overflow:hidden;
       background-color:lightskyblue;
     }
   </style>
    
   <div class="left">左边固定宽度</div>
    
   <div class="right" style="height: 100px;">右边自动填满</div>

在这里插入图片描述
将overflow一行注释掉,得到:

<style>
    .left{
      width:200px;
      float:left;
      background-color:pink
     }
     .right{
       /* overflow:hidden; */
       background-color:lightskyblue;
     }
   </style>
    
   <div class="left">左边固定宽度</div>
    
   <div class="right" style="height: 100px;">右边自动填满</div>

在这里插入图片描述
感受一下对比和效果。
overflow:hidden的作用并不是刚好补满剩下的,把这个去掉,也可以观察到补满剩下的效果。 补满剩下效果是float:left做到的,.right会自动补满剩下的。

关于overflow的更多内容

overflow的作用:溢出隐藏、清除浮动、解决外边距塌陷等等。

7.垂直居中
(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)display:table-cell
首先通过display: table-cell;把div用单元格的形式显示,然后借用单元格的垂直居中vertical-align: middle; 来达到效果。
这样对图片也可以居中,上一步 line-height就不能对图片居中。

<style>
    div{
        display: table-cell;
        height: 200px;
        vertical-align: middle;
        border: skyblue solid 1px;
        /* margin-right: 10px; */
    }
</style>

<div>div板块1</div>
<div>div板块2</div>

在这里插入图片描述
备注:当修改了display:table-cell。就不能设置margin属性了。

8.左右固定,中间自适应布局

<style>
    .left{
      width:200px;
      float:left;
      background-color:pink
     }
     .right{
      width:200px;
      float:right;
      background-color:pink
     }
     .center {margin:0 200px;   background-color:lightblue}
   </style>
     
   <div class="left">左边固定宽度</div>
   <div class="right">左边固定宽度</div>
    <div class="center">中间自适应</div>
    
   </head>
    
   <body>
    
   </html>

备注:margin:0 200px和overflow:hidden可以达到相同的效果。

<style>
    .left{
        float: left;
        background-color: skyblue;
        width: 200px;
    }
    .right{
        /* 这里不设置宽度 */
        float: right;
        background-color: skyblue;
    }
    .center{
        overflow: hidden;
        background-color: tan;
    }
</style>

<div class="left">这是左边的空间</div>
<div class="right">这是右边的空间</div>
<div class="center">这是中间的空间</div>

同时,注意left,right,center的顺序。如果按照左中右的顺序,不能达到预期的效果。

因为浏览器解析的顺序会影响显示效果。

如果按左右中的顺序,浏览器会先把左右两个float的元素渲染出来,这两个元素是浮动的 不占空间,因此后面的center元素会放到上面的位置上,而居中是由margin设置的。

如果按左中右的顺序,浏览器先解析左边的float元素且不占空间,然后解析center时当做div解析,因为div是块级元素,所以会补足剩下的行,而后来的右float元素在这一行中没有空间了,只能挤到下一行了。

9.一个div始终贴在下方
首先把蓝色div设置为相对定位,然后把内部的绿色div设置为绝对定位, bottom: 0表示贴在下面。如果不把div设置为相对定位,效果不一样。

<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>

外层div相对定位: 因为内层div视它为父元素。 而它相对定位后别人还能占坑。
内层绝对定位:保证一直在外层的底部,而不是想对他自身。
子绝父相。

10.span之间存在空格,用float解决。

<style>
    span.solve{
        float: left;
    }
</style>

多个span块连续编写不会出现空格:
<span>没有空格的span</span><span>没有空格的span</span><span>没有空格的span</span>
<br>
<br>多个span块回车编写会出现空格:
<span>有空格的span</span>
<span>有空格的span</span>
<span>有空格的span</span>
<br>
<br>用float来解决空格的问题:
<span class="solve">没有空格的span</span>
<span class="solve">没有空格的span</span>
<span class="solve">没有空格的span</span>
<br>
<br>最后要记得清除浮动保持下面的内容不重复在一起。
<div style="clear: both;color: grean;"></div>
<div>后续内容</div>

一个空白的div块不会占空间。因此

<div style="clear: both;color: grean;"></div>

不会占据一行的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值