day03 CSS定位 布局

目录

CSS定位

介绍

流定位

浮动定位

浮动过程

导航栏

相对定位

绝对定位

定位属性​编辑

z-index

父相子绝

固定定位

flex布局

基本概念

定义容器​编辑​编辑

flex属性

flex-direction

justify-content

align-items

flex-wrap

间隙

项目属性​编辑

order

flex-grow

flex-shrink

align-self

图标

使用方式

图标调整

具体使用


CSS定位

介绍

流定位

元素的默认显示规则,块元素上下排列 行内元素水平排列 通过margin跳转元素之间的位置

浮动定位

浮动过程

  • 元素浮动后脱离普通流定位,自身会释放位置,底下的元素会占用该元素的位置

  • 当两个浮动元素进行左浮或右浮时,会按照先来后到,水平排列

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            #div1{
                width: 100px;
                height: 100px;
                background-color: red;
                float: left;
            }
            
            #div2{
                width: 130px;
                height: 130px;
                background-color: cadetblue;
                float: left;
            }
            
            #div3{
                width: 150px;
                height: 150px;
                background-color: deeppink;
                clear: both;
            }
            
            
        </style>
    </head>
    <body>
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">div3</div>
    </body>
</html>

导航栏

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            
            ol{
                list-style-type: none;
            }
            
            ol li{
                width: 80px;
                height: 50px;
                line-height: 50px;
                float: left;
                background-color: cadetblue;
                color: #fff;
                text-align: center;
            }
            
            ol li:hover{
                background-color: darkcyan;
                color: cornflowerblue;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
        
        <ol>
            <li>首页</li>
            <li>电视剧</li>
            <li>电影</li>
            <li>动漫</li>
            <li>综艺</li>
            <li>纪录片</li>
        </ol>
    </body>
</html>

相对定位

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            #div1{
                width: 100px;
                height: 100px;
                background-color: red;
                position: relative;
                left: 150px;
                top:30px;
                z-index: 10;
            }
            
            #div2{
                width: 130px;
                height: 130px;
                background-color: cadetblue;
                position: relative;
                left: 40px;
                top:30px;
                z-index: 15;
            }
            
            #div3{
                width: 150px;
                height: 150px;
                background-color: deeppink;
                position: relative;
                z-index: 20;
            }
        </style>
    </head>
    <body>
        
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">div3</div>
    </body>
</html>

绝对定位

定位属性

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            #div1{
                width: 100px;
                height: 100px;
                background-color: red;
            
            }
            
            #div2{
                width: 130px;
                height: 130px;
                background-color: cadetblue;
            }
            
            #div3{
                width: 200px;
                height: 200px;
                background-color: deeppink;
                position: relative;
                left: 50px;
            }
            
            #div3 div{
                width: 100px;
                height: 100px;
                border: 2px solid black;
                position: absolute;
                left: 20px;
            }
        </style>
    </head>
    <body>
        
        <div id="div1">div1</div>
        <div id="div2">div2</div>
        <div id="div3">
            <div></div>
            
        </div>
        
    </body>
</html>

z-index

元素都必须定位才能使用z-index

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            /* 绝对定位:释放原来的位置 */
            img{
                width: 150px;
                height: 150px;
            }
            
            #img1{
                position: absolute;
                left: 50px;
                top:80px;
                z-index: 20;
            }
            #img2{
                position: absolute;
                z-index: 30;
            }
            
            #img3{
                position: absolute;
                left:90px;
                top:30px;
                z-index: 40;
            }
        </style>
    </head>
    <body>
        <img src="../../img/1.jpg" id="img1">
        <img src="../../img/2.jpg" id="img2">
        <img src="../../img/3.jpg" id="img3">
    </body>
</html>

父相子绝

使用绝对定位时,一般要给父级进行相对定位,子级使用绝对定位,子级位置相对于最近的已经定位的父级元素偏移

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            /* 绝对定位:释放原来的位置 */
            #div1{
                width: 120px;
                height: 120px;
                border: 2px solid cadetblue;
                position: relative;
                left: 180px;
            }
            
            
            #div2{
                width: 120px;
                height: 120px;
                border: 2px solid red;
        
            }
            /*相对于div1的位置偏移 */
            #div1 div{
                width: 60px;
                height: 60px;
                border: 2px solid red;
                position: absolute;
                left: 20px;
            }
        </style>
    </head>
    <body>
        <div id="div1">
            <div>
                
            </div>
            
        </div>
        <div id="div2"></div>
    </body>
</html>

固定定位

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            div{
                width: 40%;
                height: 600px;
                padding-bottom: 500px;
                background-color: cadetblue;
            }
            
            button{
                position: fixed;
                left: 1500px;
                top:400px;
            }
            
        </style>
    </head>
    <body>
        <div></div>
        <button>回到顶部</button>
    </body>
</html>

flex布局

2009年,W3C 提出了一种新的方案 Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

弹性框布局模块,可以更轻松地设计灵活的响应式布局结构,而无需使用浮动或定位。

布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为Flex布局。

基本概念

采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项(flex item)

使用flex,必须要定义容器

定义容器

flex属性

以下5个属性设置在容器上。

  • flex-direction

  • justify-content

  • flex-wrap

  • flex-flow

  • align-items

flex-direction

flex-direction属性决定flex项在主轴的排列方向

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}
.container{
width: 480px;
height: 480px;
border: 2px solid red;
display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/
flex-direction: row;
}
<div class="container">
  <div id="div1"></div>
  <div id="div2"></div>
  <div></div>
</div>

justify-content

justify-content属性定义了项目在主轴上的对齐方式。

.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}

.container{
width: 480px;
height: 480px;
border: 2px solid red;
display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/
flex-direction: row;
justify-content: space-evenly;/*子元素均等分布*/
}
<div class="container">
  <div id="div1"></div>
  <div id="div2"></div>
  <div></div>
</div>

align-items

align-items属性定义项目在交叉轴上如何对齐

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}

.container{
width: 480px;
height: 480px;
border: 2px solid red;
display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/
flex-direction: row;
justify-content: space-evenly;/*子元素均等分布*/
align-items: center;/*子元素垂直居中*/
}
<div class="container">
  <div id="div1"></div>
  <div id="div2"></div>
  <div></div>
</div>

flex-wrap

默认情况下,项目都排在一条线(又称”轴线”)上。

flex-wrap属性定义,如果一条轴线排不下,如何换行。

0

 .box{
   flex-wrap: nowrap | wrap | wrap-reverse;
 }
  • nowrap(默认):不换行

  • wrap:换行,第一行在上方。

  • wrap-reverse:换行,第一行在下方。

.container{
width: 480px;
height: 480px;
border: 2px solid red;
display: flex;/*定义容器 子元素会按照一定规则排列,子元素默认水平排列*/
flex-direction: row;
justify-content: space-evenly;/*子元素均等分布*/
align-items: center;/*子元素垂直居中*/
flex-wrap: wrap;/*宽度不够时自动换行*/
}
<div class="container">
  <div id="div1"></div>
  <div id="div2"></div>
  <div></div>
</div>

间隙

通过gap属性,可以调整项目之间的距离,但是使用时需要注意,当项目有最小距离,而gap值小于最小距离时不生效

column-gap:调整列之间的距离 单位px

row-gap:调整行之间的距离 单位px

gap:10px 20px 等价于 row-gap:10px;column-gap:20px;

项目属性

order

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0,可以为负数。

flex-grow

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。

如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            .container{
                width: 480px;
                height: 480px;
                border: 2px solid red;
                display: flex;
            }
            
            .container>div{
                width: 150px;
                height: 150px;
                border: 2px solid cadetblue;
                box-sizing: border-box;
            }
            
            #div1{
                flex-grow: 2;
            }
            
            #div2{
                flex-grow: 1;
            }
            
            #div3{
                flex-grow: 1;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div id="div1">div1</div>
            <div id="div2">div2</div>
            <div id="div3">div3</div>
        </div>
    </body>
</html>

flex-shrink

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            .container{
                width: 450px;
                height: 450px;
                border: 2px solid red;
                display: flex;
            }
            .container>div{
                width: 150px;
                height: 150px;
                border: 2px solid cadetblue;
                box-sizing: border-box;
            }
            
            #div1{
                flex-shrink: 0;/*div1不缩小 其他元素等比例缩小*/
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div id="div1">div1</div>
            <div id="div2">div2</div>
            <div id="div3">div3</div>
            <div id="div4">div4</div>
        </div>
    </body>
</html>

align-self

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。

默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            
            
            .container{
                width: 450px;
                height: 450px;
                border: 2px solid red;
                display: flex;
                align-items: center;
                
                
            }
            .container>div{
                width: 150px;
                height: 150px;
                border: 2px solid cadetblue;
                box-sizing: border-box;
            }
            
            #div1{
                flex-shrink: 0;/*div1不缩小 其他元素等比例缩小*/
                align-self: flex-start;
                margin-top: 30px;
            }
            #div4{
                align-self: flex-start;
                
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div id="div1">div1</div>
            <div id="div2">div2</div>
            <div id="div3">div3</div>
            <div id="div4">div4</div>
        </div>
    </body>
</html>

图标

使用Alibaba矢量图标库

https://www.iconfont.cn/

使用方式

点击图标添加购物车 将购物车中的图标添加至项目

引入初始的css

.icon {
width: 1em; height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
color:red;
}

使用svg引入图标

<svg class="icon" aria-hidden="true">
  <use xlink:href="#icon-iconfontapple"></use>
</svg>

图标调整

使用font-size调整图标大小

.icon {
    width: 1em; height: 1em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
    color:red;
    font-size: 26px;
}

具体使用

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="//at.alicdn.com/t/c/font_4165294_mpg01q44rmg.js"></script>
        <style>
            .icon {
                   width: 1em; height: 1em;
                   vertical-align: -0.15em;
                   fill: currentColor;
                   overflow: hidden;
                   font-size: 30px;
                   color: red;
                }
                
                .one{
                    width: 100px;
                    height: 50px;
                    display: flex;
                    align-items: center;
                }
        </style>
    </head>
    <body>
        
        <div class="one">
            <svg class="icon" aria-hidden="true">
                <use xlink:href="#icon-pingguo"></use>
            </svg>
            <div>苹果</div>
        </div>
        
        <svg class="icon" aria-hidden="true">
            <use xlink:href="#icon-search-1-copy"></use>
        </svg>
        
        <svg class="icon" aria-hidden="true">
            <use xlink:href="#icon-gouwudai"></use>
        </svg>
    </body>
</html>
  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值