AI智能
改变未来

CSS3入门与提高(六)——新增2D和3D属性

新增2D和3D属性

  • 2D变形(CSS3) transform
  • 移动 translate(x, y)
  • 缩放 scale(x, y)
  • 旋转 rotate(deg)
  • transform-origin可以调整元素转换变形的原点
  • 倾斜 skew(deg, deg)
  • 3D变形(CSS3) transform
    • translateX(x)
    • translateY(y)
    • translateZ(z)
    • 透视(perspective)
    • translateX(x)
    • translateY(y)
    • translateZ(z)
    • translate3d(x,y,z)
    • 开门案例
    • backface-visibility
    • 两面翻转
  • 动画(CSS3) animation
    • 小汽车案例
  • 伸缩布局(CSS3)
    • flex子项目在主轴的缩放比例,不指定flex属性,则不参与伸缩分配
    • flex-direction调整主轴方向(默认为水平方向)
    • justify-content调整主轴对齐(水平对齐)
    • align-items调整侧轴对齐(垂直对齐)
    • flex-wrap控制是否换行
    • align-content堆栈(由flex-wrap产生的独立行)多行垂直对齐方式齐
    • order控制子项目的排列顺序,正序方式排序,从小到大

    2D变形(CSS3) transform

    移动 translate(x, y)

    translate(x,y)水平方向和垂直方向同时移动(也就是X轴和Y轴同时移动)translateX(x)仅水平方向移动(X轴移动)translateY(Y)仅垂直方向移动(Y轴移动)

    水平移动100像素

    transform: translateX(100px);

    不是以父级宽度为准,以自己宽度为准,50%是走自己宽度的一半像素。

    transform: translate(50%)

    在绝对定位时,我们采用left和marggin-left是盒子水平居中,但是如果遇到盒子宽度为327px,我们应该将marggin-left属性改用transform:translate(50%)比较好。

    div {width: 200px;height: 200px;background-color: pink;/*transform: translate(100px)  水平移动100像素*//*transform: translate(50%)  translate 如果移动的距离是%不是以父级宽度为准,以自己宽度为准*//*transform: translate(50%);  y意思就是让div盒子 自己宽度200 的一半 走 100像素*//*已让我们让定位的盒子居中对齐*/position: absolute;left: 50%; /*以父级宽度为准*/top: 50%;/*margin-left: -100px; 需要计算不合适*/transform: translate(-50%, -50%);}

    缩放 scale(x, y)

    scale()的取值默认的值为1,当值设置为0.01到0.99之间的任何值,作用使一个元素缩小;而任何大于或等于1.01的值,作用是让元素放大

    section img {transition: all 0.2s;/*因为图片缩放了,实际图片做动画 所以过渡要给img 做动画  谁做动画,谁加过渡*/}section:hover img {  /*鼠标经过section 的时候 里面的img做 缩放*/transform: scale(1.2);}

    旋转 rotate(deg)

    可以对元素进行旋转,正值为顺时针,负值为逆时针;

    transform:rotate(45deg);

    注意单位是 deg 度数

    transform-origin可以调整元素转换变形的原点

    与rotate()搭配使用

    div{transform-origin: left top;transform: rotate(45deg);}/* 改变元素原点到左上角,然后进行顺时旋转45度 */

    如果是4个角,可以用 left top这些,如果想要精确的位置, 可以用 px 像素。

    div{transform-origin: 10px 10px;transform: rotate(45deg);}/* 改变元素原点到x 为10  y 为10,然后进行顺时旋转45度 */

    倾斜 skew(deg, deg)

    • 该实例通过skew方法把元素水平方向上倾斜30度,处置方向保持不变。
    • 可以使元素按一定的角度进行倾斜,可为负值,第二个参数不写默认为0。
    transform: skew(0, -30deg);/*水平向下倾斜*/transform:skew(30deg,0deg);/*水平向上倾斜*/

    3D变形(CSS3) transform

    注意和左手坐标系是不一样的

    translateX(x)

    就是沿着 x 立体旋转.

    img {display: block;margin: 100px auto;transition: all 1s;}img:hover {transform: rotateX(360deg);}

    translateY(y)

    沿着y轴进行旋转

    img {display: block;margin: 100px auto;transition: all 5s;}img:hover {transform: rotateY(360deg);}

    translateZ(z)

    沿着z轴进行旋转

    img {margin: 100px;transition: all 5s;}img:hover {transform: rotateZ(360deg);}

    透视(perspective)

    透视可以将一个2D平面,在转换的过程当中,呈现3D效果。

    • 透视原理: 近大远小 。
    • 浏览器透视:把近大远小的所有图像,透视在屏幕上。
    • perspective:视距,表示视点距离屏幕的长短。视点,用于模拟透视效果时人眼的位置
      perspective 一般作为一个属性,设置给父元素,作用于所有3D转换的子元素
    body {perspective: 1000px;  /*视距 距离 眼睛到屏幕的距离  视距越大效果越不明显 视距越小,透视效果越明显*/}img {margin: 100px;transition: all 5s;}img:hover {transform: rotateY(360deg);}

    translateX(x)

    仅水平方向移动**(X轴移动)

    transform: translateX(100px);

    translateY(y)

    仅垂直方向移动(Y轴移动)

    transform: translateY(100px);

    translateZ(z)

    仅垂直方向移动(Z轴移动)
    translateZ 越大,我们看到的物体越近,物体越大

    div:hover{transform: translateZ(300px);/*透视是眼睛到屏幕的距离 透视只是一种展示形式 是有3d效果的意*//*translateZ是物体到屏幕的距离 Z是来控制物体近大远小的具体情*/}

    translate3d(x,y,z)

    div:hover {/*transform: translate3d(x, y, z); x 和 y 可以是 px 可以是 %  但是z 只能是px*/transform: translate3d(100px, 100px, 300px);}

    开门案例

    body {}.door {width: 300px;height: 300px;margin: 100px auto;border: 1px solid gray;perspective: 1000px;background: url(\'images/dog.gif\') no-repeat cover;position: relative;}.door > div {box-sizing: border-box;border: 1px solid black;}.left {float: left;width: 50%;height: 100%;background-color: brown;transform-origin: left center;transition: 1s;position: relative;}.left::before {content: \'\';position: absolute;width: 20px;height: 20px;border-radius: 50%;top: 50%;right: 0px;transform: translateY(-10px);border: 1px solid whitesmoke;}.right {width: 50%;height: 100%;float: left;background-color: brown;transform-origin: right center;transition: 1s;position: relative;}.right::before {content: \'\';position: absolute;width: 20px;height: 20px;border-radius: 50%;top: 50%;left: 0px;transform: translateY(-10px);border: 1px solid whitesmoke;}.door:hover .left {transform: rotateY(-130deg);}.door:hover .right {transform: rotateY(130deg);}

    backface-visibility

    backface-visibility 属性定义当元素不面向屏幕时是否可见,translateZ(90px)。

    两面翻转

    div {width: 224px;height: 224px;margin: 100px auto;position: relative;/*transform-style: preserve-3d;*//*  1.保留当前空间位置2.是图片扁平化*/}div img {position: absolute;top: 0;left: 0;transition: all 8s;}div img:first-child {z-index: 1;backface-visibility: hidden;  /*不是正面对向屏幕,就隐藏*/}div:hover img {transform: rotateY(180deg);}

    动画(CSS3) animation

    animation:动画名称 动画时间 运动曲线 何时开始 播放次数 是否反方向;

    @keyframes 动画名称 {from{ 开始位置 }  0%to{  结束  }  100%}

    小汽车案例

    img {/*animation:动画名称 动画时间 运动曲线  何时开始  播放次数  是否反方向;*/animation: car 5s infinite;  /*引用动画*/}/*定义动画*/@keyframes car {0% {transform: translate3d(0, 0, 0);}50% {transform: translate3d(1000px, 0, 0);}51% {transform: translate3d(1000px, 0, 0) rotateY(180deg);/*如果多组变形 都属于 tarnsform 我们用空格隔开就好了*/}99% {transform: translate3d(0, 0, 0) rotateY(180deg);/*如果多组变形 都属于 tarnsform 我们用空格隔开就好了*/}}

    伸缩布局(CSS3)

    • 主轴:Flex容器的主轴主要用来配置Flex项目,默认是水平方向
    • 侧轴:与主轴垂直的轴称作侧轴,默认是垂直方向的
    • 方向:默认主轴从左向右,侧轴默认从上到下

    flex子项目在主轴的缩放比例,不指定flex属性,则不参与伸缩分配

    min-width 最小值 min-width: 280px 最小宽度 不能小于 280
    max-width: 1280px 最大宽度 不能大于 1280

    flex-direction调整主轴方向(默认为水平方向)

    flex-direction: column 垂直排列
    flex-direction: row 水平排列

    justify-content调整主轴对齐(水平对齐)

    子盒子如何在父盒子里面水平对齐

    描述 白话文
    flex-start 默认值。项目位于容器的开头。 让子元素从父容器的开头开始排序但是盒子顺序不变
    flex-end 项目位于容器的结尾。 让子元素从父容器的后面开始排序但是盒子顺序不变
    center 项目位于容器的中心。 让子元素在父容器中间显示
    space-between 项目位于各行之间留有空白的容器内。 左右的盒子贴近父盒子,中间的平均分布空白间距
    space-around 项目位于各行之前、之间、之后都留有空白的容器内。 相当于给每个盒子添加了左右margin外边距

    align-items调整侧轴对齐(垂直对齐)

    子盒子如何在父盒子里面垂直对齐(单行)

    描述 白话文
    stretch 默认值。项目被拉伸以适应容器。 让子元素的高度拉伸适用父容器(子元素不给高度的前提下)
    center 项目位于容器的中心。 垂直居中
    flex-start 项目位于容器的开头。 垂直对齐开始位置 上对齐
    flex-end 项目位于容器的结尾。 垂直对齐结束位置 底对齐

    flex-wrap控制是否换行

    当我们子盒子内容宽度多于父盒子的时候如何处理

    描述
    nowrap 默认值。规定灵活的项目不拆行或不拆列。 不换行,则 收缩(压缩) 显示 强制一行内显示
    wrap 规定灵活的项目在必要的时候拆行或拆列。
    wrap-reverse 规定灵活的项目在必要的时候拆行或拆列,但是以相反的顺序。
    1. flex-flow是flex-direction、flex-wrap的简写形式
    flex-flow: flex-direction  flex-wrap;

    flex-flow: 排列方向 换不换行

    align-content堆栈(由flex-wrap产生的独立行)多行垂直对齐方式齐

    align-content是针对flex容器里面多轴(多行)的情况,align-items是针对一行的情况进行排列。

    必须对父元素设置自由盒属性display:flex;,并且设置排列方式为横向排列flex-direction:row;并且设置换行,flex-wrap:wrap;这样这个属性的设置才会起作用。

    描述 测试
    stretch 默认值。项目被拉伸以适应容器。
    center 项目位于容器的中心。
    flex-start 项目位于容器的开头。
    flex-end 项目位于容器的结尾。
    space-between 项目位于各行之间留有空白的容器内。
    space-around 项目位于各行之前、之间、之后都留有空白的容器内。

    order控制子项目的排列顺序,正序方式排序,从小到大

    用整数值来定义排列顺序,数值小的排在前面。可以为负值。 默认值是 0

    order: 1;

    接下来学习BFC啦第七章见嘻嘻

    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » CSS3入门与提高(六)——新增2D和3D属性