039CSS3之2D转换

一、简介

转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果

  • 移动:translate
  • 旋转:rotate
  • 缩放:scale

转换(transform)你可以简单理解为变形

二、二维坐标系

2D转换是改变标签在二维平面上的位置和形状的一种技术,先来学习二维坐标系

在这里插入图片描述

三、2D转换之移动translate

1、简介

2D移动是2D转换里面的一种功能,可以改变元素在页面中的位置,类似定位。
在这里插入图片描述

2、语法
transform: translate(x,y); 或者分开写
transform: translateX(n);
transform: translateY(n);
3、注意
  • 定义 2D 转换中的移动,沿着 X 和 Y 轴移动元素
  • translate最大的优点:不会影响到其他元素的位置
  • translate中的百分比单位是相对于自身元素的 translate:(50%,50%);
  • 对行内标签没有效果
4、demo案例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
         /* 移动盒子位置的三种方法: 
         1、定位   
         2、盒子的外边距
         3、2d转换移动 */

        div{
            width: 200px;
            height: 200px;
        }
        div:nth-of-type(1){
            background-color: #ccc;
            /* x就是x轴上移动位置 y 就是y轴上移动位置 中间用逗号分隔*/
            /* transform: translate(x, y); */
            /* transform: translate(100px, 100px); */
            /* 1. 我们如果只移动x坐标 */
            /* transform: translate(100px, 0); */
            /* transform: translateX(100px); */
            /* 2. 我们如果只移动y坐标 */
            /* transform: translate(0, 100px); */
            /* transform: translateY(100px); */
            transform: translate(100px,100px);
        }
        div:nth-of-type(2){
            background-color: green;
        }
    </style>
</head>
<body>
    <div></div>
    <div></div>
</body>
</html>

效果:
在这里插入图片描述

5、盒子实现水平居中和垂直居中案例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            position: relative;
            width: 500px;
            height: 500px;
            background-color: #ccc;
            margin: 100px auto;
        }
        p{
            position: absolute;
            top: 50%;
            left: 50%;
            width: 100px;
            height: 100px;
            background-color: green;
            /* 方法1:让外边距向左偏移自身宽度和高度的一半 */
            /* margin-left: -50px;
            margin-top: -50px; */
            /* 方法2:使用2d转换的移动功能 */
            /* translate中的百分比单位是相对于自身元素的 translate:(50%,50%); */
            transform: translate(-50%,-50%);
        }
    </style>
</head>
<body>
    <div>
        <p></p>
    </div>
</body>
</html>

效果:
在这里插入图片描述

四、2D转换之旋转rotate

1、简介

2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转。

在这里插入图片描述

2、语法
transform:rotate(度数)
3、注意
  • rotate里面跟度数, 单位是 deg 比如 rotate(45deg) , deg的全称为degree 美 [dɪˈɡriː] 意思是度数
  • 角度为正时,顺时针,负时,为逆时针
  • 默认旋转的中心点是元素的中心点
4、案例1
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
            div{
                width: 500px;
                height: 500px;
                margin: 100px auto;
            }
            div img{
                width: 100%;
                height: 100%;
                border-radius: 50%;
                border: 5px solid #ccc;
                /* 过渡写到本身上,谁做动画给谁加 */
                transition: all 2s;
            }
            div img:hover{
                /* 顺时针旋转45度 */
                transform: rotate(45deg);
            }
    </style>
</head>
<body>
    <div>
        <img src="./media/pic.jpg" alt="">
    </div>
</body>
</html>

效果:
在这里插入图片描述

5、案例2:利用2d转换之旋转制作CSS三角
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            position: relative;
            width: 500px;
            height: 100px;
            border: 4px solid #ccc;
            margin: 100px auto;
        }
        div::after{
            position: absolute;
            top: 30px;
            right: 50px;

            content: '';
            width: 10px;
            height: 10px;
            border-right: 2px solid #ccc;
            border-bottom:  2px solid #ccc;
            /* 将右边框和下边框旋转45度 */
            transform: rotate(45deg);
        }
    </style>
</head>
<body>
    <div>

    </div>
</body>
</html>

效果:
在这里插入图片描述

五、2D转换之中心点transform-origin

1、简介

我们可以设置元素转换的中心点

2、语法
transform-origin: x y;
3、注意
  • 注意后面的参数 x 和 y 用空格隔开
  • x y 默认转换的中心点是元素的中心点 (50% 50%)
  • 还可以给x y 设置 像素 或者 方位名词 (top bottom left right center)
4、案例1
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: #ccc;
            margin: 100px auto;
            /* 设置过渡动画 */
            transition: all 2s;
            /* 1.可以跟方位名词 */
            /* transform-origin: left bottom; */
            /* 2. 默认的是 50%  50%  等价于 center  center */
            /* 3. 可以是px 像素 */
            /* 把中心点设置在左下角 */
            /* 等价于transform-origin: left bottom; */
            transform-origin: 0px 200px;
        }
        div:hover{
            transform: rotate(360deg);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

效果:
在这里插入图片描述
这里需要注意的是,transform-origin: 0px 200px; 这条语句正确的做法是放到本身标签上,如果放到div:hover 上,会有意向不到的效果,可以自己去试试。

5、案例2
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        div{
            width: 300px;
            height: 300px;
            border: 1px solid #ccc;
            margin: 100px auto;

            overflow: hidden;
        }
        div::before{      
            display: block;
            width: 100%;
            height: 100%;
            background-color: green;

            content: '';          
            transform: rotate(90deg);
            transform-origin: left bottom;
            transition: all 3s;
        }
        /* 鼠标经过div 里面的before 复原 */
        div:hover::before{
            transform: rotate(0deg);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

效果:
在这里插入图片描述

六、2D转换之缩放scale

1、简介

缩放,顾名思义,可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小。
在这里插入图片描述

2、语法
transform:scale(x,y);
3、注意
  • 注意其中的x和y用逗号分隔
  • transform:scale(1,1) :宽和高都放大一倍,相当于没有放大
  • transform:scale(2,2) :宽和高都放大了2倍
  • transform:scale(2) :只写一个参数,第二个参数则和第一个参数一样,相当于 scale(2,2)
  • transform:scale(0.5,0.5):缩小
  • scale缩放最大的优势:可以设置转换中心点缩放,默认以中心点缩放的,而且不影响其他盒子
4、案例1
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        div{
            width: 100px;
            height: 100px;
            background-color: #ccc;
            margin: 100px auto;
            /* 过渡 */
            transition: all 2s;
            /* 还可以设置中心点进行缩放  左下角位置为中心点 */
            /* transform-origin: left bottom; */
        }
        div:hover{
            /* 1. 里面写的数字不跟单位 就是倍数的意思 1 就是1倍  2就是 2倍 */
            /* transform: scale(x, y); */
            /* transform: scale(2, 2); */
            /* 2. 修改了宽度为原来的2倍  高度 不变 */
            /* transform: scale(2, 1); */
            /* 3. 等比例缩放 同时修改宽度和高度,我们有简单的写法  以下是 宽度修改了2倍,高度默认和第一个参数一样*/
            /* transform: scale(2); */
            /* 4. 我们可以进行缩小  小于1 就是缩放 */
            /* transform: scale(0.5, 0.5); */
            /* transform: scale(0.5); */
            /* 5. scale 的优势之处: 不会影响其他的盒子 而且可以设置缩放的中心点*/
            transform: scale(2);
        }
    </style>
</head>
<body>
    <div></div>

</body>
</html>

效果:
在这里插入图片描述

5、案例2:图片放大
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        *{
            padding: 0;
            margin: 0;
        }
        div{
            /* 超出部分隐藏 */
            overflow: hidden;
            width: 225px;
            height: 137px;
            float: left;           
            border: 1px solid #ccc;         
        }
        div img{
            width: 100%;
            height: 100%;          
            /* 添加过渡效果 */
            transition: all 3s;
        }
        div img:hover{
            transform: scale(2);
        }
    </style>
</head>
<body>
    <div><img src="./media/scale.jpg" alt=""></div>
    <div><img src="./media/scale.jpg" alt=""></div>
    <div><img src="./media/scale.jpg" alt=""></div>
</body>
</html>

效果:
在这里插入图片描述

6、案例3:分页按钮放大
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        ul{
            margin: 100px auto;
        }
        ul li{
            float: left;
            width: 50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            border: 1px solid #ccc;
            border-radius: 50%;
            list-style: none;
            margin-right: 10px;
            cursor: pointer;
            /* 过渡 */
            transition: all .5s;
        }
        ul li:hover{
            transform: scale(1.2);
        }
    </style>
</head>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
    </ul>
</body>
</html>

效果:
在这里插入图片描述

七、2D转换之综合写法

  1. 同时使用多个转换,其格式为:transform: translate() rotate() scale() ...等,
  2. 其顺序会影转换的效果。(先旋转会改变坐标轴方向)
  3. 当我们同时有位移和其他属性的时候,记得要将位移放到最前

案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            line-height: 200px;
            text-align: center;
            background-color: #ccc;
            margin: 100px auto;
            transition: all 2s;
        }
        div:hover{
            /* 我们同时有位移和其他属性,我们需要把位移放到最前面 */
            transform: translate(100px,50px) rotate(90deg) scale(1.5);
        }
    </style>
</head>
<body>
    <div>小何</div>
</body>
</html>

效果:
在这里插入图片描述

八、2D转换总结

  • 转换transform 我们简单理解就是变形 有2D 和 3D 之分
  • 我们暂且学了三个 分别是 位移 旋转 和 缩放
  • 2D 移动 translate(x, y) 最大的优势是不影响其他盒子, 里面参数用%,是相对于自身宽度和高度来计算的
  • 可以分开写比如 translateX(x) 和 translateY(y)
  • 2D 旋转 rotate(度数) 可以实现旋转元素 度数的单位是deg
  • 2D 缩放 sacle(x,y) 里面参数是数字 不跟单位 可以是小数 最大的优势 不影响其他盒子
  • 设置转换中心点 transform-origin : x y; 参数可以百分比、像素或者是方位名词
  • 当我们进行综合写法,同时有位移和其他属性的时候,记得要将位移放到最前
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值