当前位置: 首页 > article >正文

CSS:导航栏三角箭头

 用CSS实现导航流程图的样式。可根据自己的需求进行修改,代码精略的写了一下。

注:场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅,自行处理。有个方法是直接在每个外面包一个DIV,用动态样式设置底色。

场景一、实现效果图的导航栏

代码部分:

/** 组件:步骤条样式 */
const StepModel = (list: any) => {
  return (
    <>
      <div className={styles.step}>
        {list.map((item: any) => {
          return (
            <div
              className={`${styles.stepMenu} ${
                item.success ? styles.successText : styles.defaultText
              } ${item.status ? styles.stepMenuActive : ''}`}
            >
              {item.success ? (
                <>
                  <div className={`${styles.icon} ${styles.iconSuccess}`}>
                    <img src={require(`@/assets/imgs/success.png`)} alt="" />
                  </div>
                </>
              ) : (
                <>
                  <img
                    className={styles.icon}
                    src={require(`@/assets/imgs/${
                      item.activeIcon ? item.activeIcon : item.icon
                    }.png`)}
                    alt=""
                  />
                </>
              )}
              {item.name}
            </div>
          );
        })}
      </div>
    </>
  );
};

/** 组件样式 */
.step {
  width: 100%;
  height: 32px;
  margin-top: 8px;
  font-size: 12px;
  font-weight: 400;
  display: flex;
  justify-content: space-between;
  filter: drop-shadow(-1px 1px 9px rgba(8, 38, 55, 0.1));
  .successText {
    color: #222222;
  }
  .defaultText {
    color: #788295;
  }
  .stepMenu {
    padding: 0px 10px 0 30px;
    line-height: 32px;
    background: white;
    display: flex;
    align-items: center;
    position: relative;
    flex-basis: calc((100%) / 5);
    .icon {
      width: 16px;
      height: 16px;
      margin-right: 8px;
    }
    .iconSuccess {
      background: #00b864;
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
    }
  }
  /** 箭头样式 */
  .stepMenu:after {
    content: '';
    display: block;
    position: absolute;
    right: -11px;
    top: 5px;
    z-index: 10;
    border-left: 15px solid white;
    border-top: 7px solid white;
    border-right: 7px solid transparent;
    border-bottom: 15px solid transparent;
    transform: rotate(135deg);
    border-top-left-radius: 6px;
    filter: drop-shadow(-3px -4px 2px rgba(8, 38, 55, 0.1));
  }
  /** 选中样式 */
  .stepMenuActive {
    color: #fff;
    background: linear-gradient(to right, #60c9fc, #296be8);
    font-weight: 700;
  }
  /** 选中样式:箭头 */
  .stepMenuActive:after {
    border-left: 16px solid #296be8;
    border-top: 7px solid #296be8;
    border-right: 7px solid transparent;
    border-bottom: 16px solid transparent;
  }
  /** first 样式加圆角 */
  .stepMenu:first-child {
    border-radius: 4px 0 0 4px;
    padding-left: 18px;
  }
  /** last 样式加圆角 */
  .stepMenu:last-child {
    border-radius: 0px 4px 4px 0px;
    padding-right: 18px;
  }
  .stepMenu:last-child:after {
    display: none;
  }
}

场景二:实现效果图

效果图:

代码:直接引入的在线JQ

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Title</title>
    <style>
      body {
        padding: 50px 20px 0 20px;
      }
      .step {
        width: 100%;
        height: 32px;
        margin-top: 8px;
        font-size: 12px;
        font-weight: 400;
        display: flex;
        justify-content: space-around;
      }

      .step > div {
        padding: 0px 10px 0 30px;
        line-height: 32px;
        background: #dceefe;
        display: inline-block;
        color: #1e9fff /*#50abe4*/;
        position: relative;
        width: 16%;
      }

      .step div:after {
        content: "";
        display: block;
        border-top: 16px solid transparent;
        border-bottom: 16px solid transparent;
        border-left: 17px solid #dceefe;
        position: absolute;
        right: -17px;
        top: 0;
      }

      .step div:after {
        content: "";
        display: block;
        border-top: 16px solid transparent;
        border-bottom: 16px solid transparent;
        border-left: 17px solid #dceefe;
        position: absolute;
        right: -17px;
        top: 0;
        z-index: 10;
      }

      .step div:before {
        content: "";
        display: block;
        border-top: 16px solid #dceefe;
        border-bottom: 16px solid #dceefe;
        border-left: 17px solid #fff;
        position: absolute;
        left: 0px;
        top: 0;
      }

      .step div:first-child {
        border-radius: 4px 0 0 4px;
        padding-left: 18px;
      }

      .step div:last-child {
        border-radius: 0px 4px 4px 0px;
        padding-right: 18px;
      }

      .step div:first-child:before {
        display: none;
      }

      .step div:last-child:after {
        display: none;
      }

      .step div.active {
        background: #1e9fff;
        color: #fff;
      }

      .step div.active:after {
        border-left-color: #1e9fff;
      }

      .step div.active:before {
        border-top: 16px solid #1e9fff;
        border-bottom: 16px solid #1e9fff;
      }
    </style>
  </head>
  <body>
    <div class="step">
      <div class="active">第一步</div>
      <div>第二步</div>
      <div>第三步</div>
      <div>第四步</div>
      <div>第五步</div>
    </div>
    <script src="https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js"></script>
    <script type="text/javascript">
      $(function () {
        gotoStep(2);
      });

      function gotoStep(step) {
        $(".step div").removeClass("active"); // 移除所有 div 的 active 类
        $(".step div")
          .eq(step - 1)
          .addClass("active"); // 给指定索引的 div 添加 active 类
      }
    </script>
  </body>
</html>


http://www.kler.cn/a/393200.html

相关文章:

  • 文件输入输出——NOI
  • 时间管理的三个痛点
  • 结构体(c语言)
  • Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)
  • [ComfyUI]Flux:繁荣生态魔盒已开启,6款LORA已来,更有MJ6写实动漫风景艺术迪士尼全套
  • [项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]
  • AutoML入门
  • 通胀降温遇到波动,美联储降息或成更大争议焦点
  • Eclipse 任务管理
  • MongoDB在现代Web开发中的应用
  • C/C++|关于“子线程在堆中创建了资源但在资源未释放的情况下异常退出或挂掉”如何避免?
  • GxtWaitCursor:Qt下基于RAII的鼠标等待光标类
  • Spring Boot 自动装配原理
  • C++20 STL CookBook 7 Containers(II)
  • Elman 神经网络算法详解
  • 详解kafka消息发送重试机制的案例
  • Threejs 材质贴图、光照和投影详解
  • Redis增删改查、复杂查询案例分析
  • 【计算机网络】【网络层】【习题】
  • 网络安全——应急响应之Linux入侵排查
  • 2024 年 8 个最佳 API 设计工具图文介绍
  • Java开发人员从零学习ArkTs笔记(二)-函数与类
  • Ubuntu20.04 为脚本文件创建桌面快捷方式 ubuntu
  • Spring Boot框架:电商开发的新趋势
  • #渗透测试#SRC漏洞挖掘#云技术基础03之容器相关
  • 如何用Chrome的Network面板分析HTTP报文