• 前端移动web高级详细解析一


    01-平面转换

    简介

    作用:为元素添加动态效果,一般与过渡配合使用

    概念:改变盒子在平面内的形态(位移、旋转、缩放、倾斜)

    平面转换也叫 2D 转换,属性是 transform

    平移

    transform: translate(X轴移动距离, Y轴移动距离);
    • 取值

      • 像素单位数值

      • 百分比(参照盒子自身尺寸计算结果)

      • 正负均可

    • 技巧

      • translate() 只写一个值,表示沿着 X 轴移动

      • 单独设置 X 或 Y 轴移动距离:translateX() 或 translateY()

    定位居中

    • 方法一:margin

    • 方法二:平移 → 百分比参照盒子自身尺寸计算结果

    案例-双开门

    • HTML 结构

    1. <div class="father">
    2.    <div class="left">div>
    3.    <div class="right">div>
    4. div>
    1. * {
    2.    margin: 0;
    3.    padding: 0;
    4. }
    5. /* 1. 布局:父子结构,父级是大图,子级是左右小图 */
    6. .father {
    7.    display: flex;
    8.    margin: 0 auto;
    9.    width: 1366px;
    10.    height: 600px;
    11.    background-image: url(./images/bg.jpg);
    12.    overflow: hidden;
    13. }
    14. .father .left,
    15. .father .right {
    16.    width: 50%;
    17.    height: 600px;
    18.    background-image: url(./images/fm.jpg);
    19.    transition: all .5s;
    20. }
    21. .father .right {
    22.    /* right 表示的取到精灵图右面的图片 */
    23.    background-position: right 0;
    24. }
    25. /* 2. 鼠标悬停的效果:左右移动 */
    26. .father:hover .left {
    27.    transform: translate(-100%);
    28. }
    29. .father:hover .right {
    30.    transform: translateX(100%);
    31. }

    旋转

    transform: rotate(旋转角度);
    • 取值:角度单位是 deg

    • 技巧

      • 取值正负均可

      • 取值为正,顺时针旋转

      • 取值为负,逆时针旋转

    转换原点

    默认情况下,转换原点是盒子中心点

    transform-origin: 水平原点位置 垂直原点位置;

    取值:

    • 方位名词(left、top、right、bottom、center)

    • 像素单位数值

    • 百分比

    案例-时钟

    1. .hour {
    2.  width: 6px;
    3.  height: 50px;
    4.  background-color: #333;
    5.  margin-left: -3px;
    6.  transform: rotate(15deg);
    7.  transform-origin: center bottom;
    8. }
    9. .minute {
    10.  width: 5px;
    11.  height: 65px;
    12.  background-color: #333;
    13.  margin-left: -3px;
    14.  transform: rotate(90deg);
    15.  transform-origin: center bottom;
    16. }
    17. .second {
    18.  width: 4px;
    19.  height: 80px;
    20.  background-color: red;
    21.  margin-left: -2px;
    22.  transform: rotate(240deg);
    23.  transform-origin: center bottom;
    24. }

    多重转换

    多重转换技巧:先平移再旋转

    transform: translate() rotate();
    • 多重转换原理:以第一种转换方式坐标轴为准转换形态

      • 旋转会改变网页元素的坐标轴向

      • 先写旋转,则后面的转换效果的轴向以旋转后的轴向为准,会影响转换结果

    缩放

    1. transform: scale(缩放倍数);
    2. transform: scale(X轴缩放倍数, Y轴缩放倍数);
    • 技巧

      • 通常,只为 scale() 设置一个值,表示 X 轴和 Y 轴等比例缩放

      • 取值大于1表示放大,取值小于1表示缩小

    案例-播放特效

    1. /* 1. 摆放播放按钮:图片区域的中间 */
    2. .box li {
    3.  overflow: hidden;
    4. }
    5. .pic {
    6.  position: relative;
    7. }
    8. .pic::after {
    9.  position: absolute;
    10.  left: 50%;
    11.  top: 50%;
    12.  /* margin-left: -29px;
    13. margin-top: -29px; */
    14.  /* transform: translate(-50%, -50%); */
    15.  content: '';
    16.  width: 58px;
    17.  height: 58px;
    18.  background-image: url(./images/play.png);
    19.  transform: translate(-50%, -50%) scale(5);
    20.  opacity: 0;
    21.  transition: all .5s;
    22. }
    23. /* 2. hover效果:大按钮,看不见:透明是0 → 小按钮,看得见:透明度1 */
    24. .box li:hover .pic::after {
    25.  transform: translate(-50%, -50%) scale(1);
    26.  opacity: 1;
    27. }

    倾斜

    transform: skew();

    取值:角度度数 deg

    02-渐变

    渐变是多个颜色逐渐变化的效果,一般用于设置盒子背景

    分类:

    • 线性渐变

    • 径向渐变

    线性渐变

    1. background-image: linear-gradient(
    2.   渐变方向,
    3.   颜色1 终点位置,
    4.   颜色2 终点位置,
    5.   ......
    6. );

    取值:

    • 渐变方向:可选

      • to 方位名词

      • 角度度数

    • 终点位置:可选

      • 百分比

    案例-产品展示

    • HTML 结构

    1. <div class="box">
    2.  <img src="./images/product.jpeg" alt="" />
    3.  <div class="title">OceanStor Pacific 海量存储斩获2021 Interop金奖div>
    4.  <div class="mask">div>
    5. div>
    • CSS 样式

    1. .mask {
    2.  position: absolute;
    3.  left: 0;
    4.  top: 0;
    5.  width: 100%;
    6.  height: 100%;
    7.  background-image: linear-gradient(
    8.      transparent,
    9.      rgba(0,0,0,0.5)
    10. );
    11.  opacity: 0;
    12.  transition: all .5s;
    13. }
    14. .box:hover .mask {
    15.  opacity: 1;
    16. }

    径向渐变

    1. background-image: radial-gradient(
    2.   半径 at 圆心位置,
    3.   颜色1 终点位置,
    4.   颜色2 终点位置,
    5.   ......
    6. );

    取值:

    • 半径可以是2条,则为椭圆

    • 圆心位置取值:像素单位数值 / 百分比 / 方位名词

    03-综合案例

    导航-频道

    箭头旋转
    1. .x-header-nav .nav-item:hover .icon-down {
    2.  transform: rotate(-180deg);
    3. }
    频道列表
    1. .channel-layer {
    2.  position: absolute;
    3.  top: 60px;
    4.  left: 50%;
    5.  z-index: -2;
    6.  width: 1080px;
    7.  height: 120px;
    8.  padding: 10px;
    9.  margin-left: -540px;
    10.  color: #72727b;
    11.  background-color: #f5f5f5;
    12.  border: 1px solid #e4e4e4;
    13.  border-top: none;
    14.  transition: all 0.5s;
    15.  transform: translateY(-120px);
    16. }
    17. /* TODO 2. 弹窗频道 */
    18. .x-header-nav .nav-item:hover .channel-layer {
    19.  transform: translateY(0);
    20. }

    渐变按钮

    搜索按钮
    1. .x-header-search form .btn {
    2.  position: absolute;
    3.  top: 0;
    4.  right: 0;
    5.  width: 60px;
    6.  height: 40px;
    7.  line-height: 40px;
    8.  text-align: center;
    9.  background-color: #f86442;
    10.  border-top-right-radius: 20px;
    11.  border-bottom-right-radius: 20px;
    12.  background-image: linear-gradient(
    13.    to right,
    14.    rgba(255, 255, 255, 0.3),
    15.    #f86442
    16. );
    17. }
    登录按钮
    1. /* TODO 7. 渐变按钮 */
    2. .card .card-info .login {
    3.  padding: 3px 34px;
    4.  color: #fff;
    5.  background-color: #ff7251;
    6.  border-radius: 30px;
    7.  box-shadow: 0 4px 8px 0 rgb(252 88 50 / 50%);
    8.  background-image: linear-gradient(
    9.    to right,
    10.    rgba(255, 255, 255, 0.2),
    11.    #ff7251
    12. );
    13. }
    客户端按钮
    1. /* TODO 8. 径向渐变 */
    2. .download .dl .dl-btn {
    3.  width: 68px;
    4.  height: 34px;
    5.  line-height: 34px;
    6.  color: #fff;
    7.  text-align: center;
    8.  border-radius: 4px;
    9.  background-image: radial-gradient(
    10.    50px at 10px 10px,
    11.    rgba(255, 255, 255, 0.5),
    12.    transparent
    13. );
    14. }

    轮播图

    1. /* TODO 4. 摆放图片 */
    2. .banner .banner-list .banner-item.left {
    3.  z-index: 0;
    4.  transform: translate(-160px) scale(0.8);
    5.  transform-origin: left center;
    6. }
    7. .banner .banner-list .banner-item.right {
    8.  z-index: 0;
    9.  transform: translate(160px) scale(0.8);
    10.  transform-origin: right center;
    11. }

    猜你喜欢

    1. /* TODO 5. 播放按钮和遮罩 */
    2. .album-item .album-item-box::after {
    3.  position: absolute;
    4.  left: 0;
    5.  top: 0;
    6.  content: '';
    7.  width: 100%;
    8.  height: 100%;
    9.  background: rgba(0,0,0,.5) url(../assets/play.png) no-repeat center / 20px;
    10.  opacity: 0;
    11.  transition: all .5s;
    12. }
    13. .album-item .album-item-box:hover::after {
    14.  opacity: 1;
    15.  background-size: 50px;
    16. }
    17. /* TODO 6. 图片缩放 */
    18. .album-item .album-item-box:hover img {
    19.  transform: scale(1.1);
    20. }

  • 相关阅读:
    JVM的类的生命周期
    Three.js 这样写就有阴影效果啦
    飞桨EasyDL-Mac本地部署离线SDK-Linux集成Python
    【笔试题】【day26】
    Docker基础篇之快速上手
    Python如何将项目直接打包为一键整合包
    金山云:基于 JuiceFS 的 Elasticsearch 温冷热数据管理实践
    搜索二维矩阵 II
    CompletableFuture 方法总结
    二次阅读Nacos源码——Nacos自动服务注册架构设计原理
  • 原文地址:https://blog.csdn.net/qq_69748833/article/details/134080966