You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Material 15迁移后如何自定义mat-checkbox全状态只读样式?

Angular Material 15 mat-checkbox 样式自定义失效问题

问题背景

迁移至Angular Material 15后,原有Angular 14中自定义mat-checkbox只读、禁用状态样式的CSS代码完全失效,尤其是indeterminate(半选)状态的复选框背景仍保留默认主题样式。

Angular 14 时期的自定义样式代码

之前在style.css中编写的代码如下,可实现正常、只读、禁用状态的差异化样式:

// mat-checkbox
mat-checkbox {
  @mixin updateCheckbox($color) {
    .mat-checkbox-frame {
      border-color: $color !important;
    }

    .mat-checkbox-checkmark-path {
      stroke: $color !important;
    }

    .mat-checkbox-mixedmark {
      background-color: $color;
    }
  }

  label {
    color: $black-color;
  }

  .mat-ripple-element {
    background-color: $green-color !important;
  }

  &.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,
  &.mdc-checkbox--selected.mat-accent .mat-checkbox-background {
    background-color: transparent;
  }

  @include updateCheckbox($black-color);

  &[readonly] {
    @include updateCheckbox($readonly-color);
    .mat-ripple-element {
      background-color: $readonly-color !important;
    }
  }

  &[disabled] {
    @include updateCheckbox($disabled-color);
  }
}

迁移至Angular 15后的问题

核心原因是Angular自动注入的CSS优先级更高,尤其是针对半选和选中状态的背景与边框样式,直接覆盖了自定义代码:

.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background, .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background, .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background {
    border-color: var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786));
    background-color: var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786));
}

需求目标

希望实现与Angular 14完全一致的效果:

  • 正常状态:黑边框、黑勾选标记
  • 只读状态:深灰边框、深灰勾选标记
  • 禁用状态:浅灰边框、浅灰勾选标记
    同时想确认是否可以通过修改CSS变量--mdc-checkbox-selected-icon-color来实现自定义。

已尝试的不理想方案

通过覆盖mat-checkbox的CSS变量实现,但勾选标记的宽度计算方式改变,效果不符合预期:

.mat-mdc-checkbox.mat-accent {
  --mdc-checkbox-selected-checkmark-color: $black-color;
  --mdc-checkbox-selected-hover-icon-color: transparent;
  --mdc-checkbox-selected-icon-color: transparent;
  --mdc-checkbox-selected-pressed-icon-color: transparent;
  --mdc-checkbox-disabled-selected-checkmark-color: rgba(0, 0, 0, 0.18);
  --mdc-checkbox-disabled-unselected-icon-color: rgba(0, 0, 0, 0.38);
  --mdc-checkbox-disabled-selected-icon-color: transparent;
}

.mat-mdc-checkbox.mat-accent {
  &[readonly] {
    --mdc-checkbox-selected-checkmark-color: $readonly-color;
  }
}

mat-checkbox {
  @mixin updateCheckbox($color) {
    // 复选框边框
    .mdc-checkbox__background {
      border-color: $color !important;
    }
    // 复选框勾选标记
    .mdc-checkbox__checkmark-path {
      stroke: $color !important;
    }

    .mdc-checkbox__mixedmark {
      color: $color;
    }
  }

  .mat-ripple-element {
    background-color: transparent;
  }

  label {
    color: $black-color;
  }

  @include updateCheckbox($black-color);

  &[readonly] {
    @include updateCheckbox($readonly-color);
  }

  &[disabled] {
    @include updateCheckbox($disabled-color);
  }
}

内容的提问来源于stack exchange,提问作者Eric Reboisson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:07:49