css 里面写if else 条件判断

  • 定义时使用 @mixin name(params) 声明

  • 调用时通过 @include name(args) 引入样式

  • mixins.scss文件中:

    复制代码
    @import './variables.scss';
    
    // 弹性布局
    @mixin flex($direction: row, $justify: flex-start, $align: stretch, $wrap: nowrap) {
      display: flex;
      flex-direction: $direction;
      justify-content: $justify;
      align-items: $align;
      flex-wrap: $wrap;
    }
    
    // 居中对齐
    @mixin flex-center {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    // 两端对齐
    @mixin flex-between {
      display: flex;
      justify-content: space-between;
      align-items: center;
    }
    
    // 文本截断
    @mixin text-truncate {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    
    // 多行文本截断
    @mixin text-truncate-multiline($lines: 2) {
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: $lines;
      -webkit-box-orient: vertical;
    }
    
    // 响应式布局
    @mixin responsive($breakpoint) {
      @if $breakpoint == sm {
        @media (min-width: $breakpoint-sm) { @content; }
      } @else if $breakpoint == md {
        @media (min-width: $breakpoint-md) { @content; }
      } @else if $breakpoint == lg {
        @media (min-width: $breakpoint-lg) { @content; }
      } @else if $breakpoint == xl {
        @media (min-width: $breakpoint-xl) { @content; }
      }
    }
    
    // 状态颜色
    @mixin status-color($status) {
      @if $status == 'normal' or $status == '正常' {
        background-color: $color-success;
        color: $color-white;
      } @else if $status == 'warning' or $status == '警告' {
        background-color: $color-warning;
        color: $color-dark;
      } @else if $status == 'error' or $status == '异常' {
        background-color: $color-danger;
        color: $color-white;
      } @else {
        background-color: $color-secondary;
        color: $color-white;
      }
    } 

    引用的vue文件:

    复制代码
    <template>
      <div class="switch-node">
        <!-- 交换机图标和名称 -->
        <div class="d-flex align-items-center mb-2">
          <div class="switch-node__icon">
            <svg class="switch-node__icon-svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4" />
            </svg>
          </div>
          <div class="switch-node__content">
            <p class="switch-node__title" :title="nodeData.label">
              {{ nodeData.label }}
            </p>
            <p class="switch-node__subtitle">
              {{ nodeData.district }}
            </p>
          </div>
        </div>
        
        <!-- 状态指示器 -->
        <div class="switch-node__footer">
          <span>状态:</span>
          <span class="switch-node__status" :class="statusClass">
            <span class="switch-node__status-indicator"></span>
            {{ nodeData.status }}
          </span>
        </div>
        
        <!-- 设备计数指示器 -->
        <div class="switch-node__devices">
          设备: {{ nodeData.devices ? nodeData.devices.length : 0 }}
        </div>
      </div>
    </template>
    
    <script>
    export default {
      name: 'SwitchNode',
      props: {
        nodeData: {
          type: Object,
          required: true
        }
      },
      computed: {
        statusClass() {
          switch(this.nodeData.status) {
            case '正常': return 'status-normal';
            case '警告': return 'status-warning';
            case '异常': return 'status-error';
            default: return '';
          }
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
    @import '@/assets/styles/variables.scss';
    @import '@/assets/styles/mixins.scss';
    
    .status-normal {
      @include status-color('正常');
    }
    
    .status-warning {
      @include status-color('警告');
    }
    
    .status-error {
      @include status-color('异常');
    }
    </style> 
相关推荐
kyriewen4 小时前
Anthropic 估值逼近万亿美元,Claude Sonnet 5 + Claude Science 一天两连发
前端·ai编程·claude
小徐_23335 小时前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
天蓝色的鱼鱼8 小时前
关于 CSS 你可能不知道的属性,但关键时刻很有用
前端·css
泯泷9 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
妙码生花9 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
泯泷9 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
团团崽_七分甜9 小时前
Spring Boot 核心知识点总结
前端
lichenyang4539 小时前
从一个按钮开始,理解 ASCF 框架到底在做什么
前端
古夕9 小时前
第三方 SSO 接入实践:redirect_uri 编码、回调一致性与跨项目联调
前端·vue.js