Skip to content

Form 表单

*UI备注

此模块为须严格遵守设计规范的模块

用以收集、校验和提交数据,一般由输入框、单选框、复选框、选择器等控件组成。

CSS样式

全部form样式代码:

查看代码
css
/* HnuiIcon */
@import url('./icon.css');

/* 全局css变量 */

:root {
  /* #region vars-BrandColor */

  /* 品牌色 */
  --hnui-brand-color: #1f78ff;
  --hnui-brand-color1: #005ce5;
  --hnui-brand-color2: #4b83f7;
  --hnui-brand-color3: #3384ff;
  --hnui-brand-color4: #599bff;
  --hnui-brand-color5: #80b2ff;
  --hnui-brand-color6: #b2d1ff;
  --hnui-brand-color7: #cce0ff;
  --hnui-brand-color8: #d9e8ff;
  --hnui-brand-color9: #ebf3ff;
  --hnui-brand-color10: #f2f7ff;

  /* 状态颜色 */
  --hnui-brand-color-normal: var(--hnui-brand-color);
  --hnui-brand-color-hover: var(--hnui-brand-color3);
  --hnui-brand-color-active: var(--hnui-brand-color1);
  --hnui-brand-color-elected: var(--hnui-brand-color9);
  --hnui-brand-color-disabled: var(--hnui-brand-color7);

  --hnui-brand-color-disabled-border: var(--hnui-brand-color6);
  --hnui-brand-color-disabled-bg: var(--hnui-brand-color10);

  /* #endregion vars-BrandColor */

  /* #region vars-DomainColor */

  /* 功能色 */
  --hnui-success-color: #2ba471;
  --hnui-success-hover-color: #51bd90;
  --hnui-success-active-color: #2ba471;

  --hnui-warning-color: #faad14;
  --hnui-warning-hover-color: #ffc146;
  --hnui-warning-active-color: #db960b;

  --hnui-danger-color: #ff4d4d;
  --hnui-danger-hover-color: #ff7676;
  --hnui-danger-active-color: #d82a2a;

  --hnui-info-color: #8d97a6;
  --hnui-info-hover-color: #b2b7c0;
  --hnui-info-active-color: #707a89;

  /* #endregion vars-DomainColor */

  /* #region vars-NeutralColor */
  /* 中性色 */

  /* 标题文字 */
  --hnui-neutral-color-1: #2d2e33;

  /* 正文、重要信息文字、按钮文字、输入框正常状态文字等 */
  --hnui-neutral-color-2: #43454d;

  /* 内容文字、说明叙述文字 */
  --hnui-neutral-color-3: #5d606a;

  /* 提示性文字、辅助文本 */
  --hnui-neutral-color-4: #9298a0;

  /* 禁用文本 */
  --hnui-neutral-color-5: #b7bdc7;

  /* 描边格描边、输入文本描边、下拉选择描边等 */
  --hnui-neutral-color-6: #dfe2e7;

  /* 全局背景、禁用状态、分割线等 */
  --hnui-neutral-color-7: #f0f2f5;

  /* 最低颜色等 */
  --hnui-neutral-color-8: #fafbfc;

  /* #endregion vars-NeutralColor */

  /* 默认文字颜色 */
  --hnui-text-color: var(--hnui-neutral-color-2);

  --hnui-info-bg: #eceff4;
  --hnui-info-bg2: #e7e7e7;

  --hnui-color-white: #fff;
  --hnui-color-black: #000;

  --hnui-border-width: 1px;
  --hnui-border-dashed-width: 2px;
  --hnui-border-color: var(--hnui-neutral-color-6);

  --hnui-disabled-bg-color: var(--hnui-neutral-color-7);
  --hnui-disabled-color: var(--hnui-neutral-color-5);

  --hnui-control-height: 32px;
  --hnui-control-height-sm: 24px;
  --hnui-control-height-lg: 40px;

  --hnui-control-transparent: transparent;
}

.dark {
  --hnui-brand-color6: rgb(50, 59, 74);
  --hnui-brand-color7: #30353d;
  --hnui-brand-color8: #42484f;
  --hnui-brand-color9: #4c4f54;
  --hnui-brand-color10: #29292c;

  /* 中性色 */

  /* 标题文字 */
  --hnui-neutral-color-1: #c4c8dc;

  /* 正文、重要信息文字、按钮文字、输入框正常状态文字等 */
  --hnui-neutral-color-2: #b9bed3;

  /* 内容文字、说明叙述文字 */
  --hnui-neutral-color-3: #afb5c7;

  /* 提示性文字、辅助文本 */
  --hnui-neutral-color-4: #6a6f75;

  /* 禁用文本 */
  --hnui-neutral-color-5: #53565b;

  /* 描边格描边、输入文本描边、下拉选择描边等 */
  --hnui-neutral-color-6: #59595a;

  /* 全局背景、禁用状态、分割线等 */
  --hnui-neutral-color-7: #343535;

  /* 最低颜色等 */
  --hnui-neutral-color-8: #151516;

  --hnui-info-bg: #393b3d;

  --hnui-color-white: #000;
  --hnui-color-black: #fff;

  --hnui-control-transparent: transparent;
}

*,
::before,
::after {
  box-sizing: border-box;
}

body {
  color: var(--hnui-neutral-color-2);
}

/* #region vars-FontFamily */
@font-face {
  font-family: 'DIN';
  src: url('/fonts/D-DIN-PRO/D-DIN-PRO.woff2') format('woff2'),
    url('/fonts/D-DIN-PRO/D-DIN-PRO.woff') format('woff'),
    url('/fonts/D-DIN-PRO/D-DIN-PRO.ttf') format('truetype'),
    url('/fonts/D-DIN-PRO/D-DIN-PRO.eot') format('embedded-opentype'),
    url('/fonts/D-DIN-PRO/D-DIN-PRO.svg') format('svg');
  font-weight: normal;
  font-style: normal;
}

/* 使用数字字体 */
.use-font {
  font-family: DIN;
}
/* #endregion vars-FontFamily */

/* #region vars-BoxShadow */
/* 一级投影(默认向下) */
.hnui-box-shadow {
  box-shadow: 0px 6px 16px 6px rgba(0, 0, 0, 0.18);
}
.hnui-box-shadow.hover,
.hnui-box-shadow:hover {
  box-shadow: 0px 6px 16px 6px rgba(31, 120, 255, 0.18);
}

/* 二级投影(默认向下) */
.hnui-box-shadow_l2 {
  box-shadow: 0px 6px 16px 6px rgba(0, 0, 0, 0.12);
}
.hnui-box-shadow_l2.hover,
.hnui-box-shadow_l2:hover {
  box-shadow: 0px 6px 16px 6px rgba(31, 120, 255, 0.12);
}

/* 三级投影(默认向下) */
.hnui-box-shadow_l3 {
  box-shadow: 0px 6px 16px 6px rgba(0, 0, 0, 0.06);
}
.hnui-box-shadow_l3.hover,
.hnui-box-shadow_l3:hover {
  box-shadow: 0px 6px 16px 6px rgba(31, 120, 255, 0.06);
}
/* #endregion vars-BoxShadow */
css

/* === 表单容器 === */
.hnui-form {
  width: 100%;
  font-size: 14px;
  color: var(--hnui-text-color);
}

/* === 表单项 === */
.hnui-form-item {
  display: flex;
  margin-bottom: 24px;
}

.hnui-form-item:last-child {
  margin-bottom: 0;
}

/* === 表单项标签 === */
.hnui-form-item-label {
  display: flex;
  align-items: center;
  font-size: 14px;
  color: var(--hnui-text-color);
  line-height: 32px;
}

/* 必填标识 */
.hnui-form-item-required {
  color: var(--hnui-danger-color);
  margin-right: 4px;
}

/* 帮助提示图标 */
.hnui-form-item-help {
  margin-left: 4px;
  color: var(--hnui-neutral-color-4);
  cursor: pointer;
  font-size: 14px;
}

.hnui-form-item-help:hover {
  color: var(--hnui-text-color);
}

/* === 表单项内容区 === */
.hnui-form-item-content {
  flex: 1;
  position: relative;
}

/* === 表单项说明文字 === */
.hnui-form-item-extra {
  font-size: 12px;
  color: var(--hnui-neutral-color-4);
  line-height: 1.5;
  margin-top: 4px;
}

/* === 表单项错误提示 === */
.hnui-form-item-error {
  font-size: 12px;
  color: var(--hnui-danger-color);
  line-height: 1.5;
  margin-top: 4px;
}

/* === 表单项警告提示 === */
.hnui-form-item-warning {
  font-size: 12px;
  color: var(--hnui-warning-color);
  line-height: 1.5;
  margin-top: 4px;
}

/* === 表单项成功提示 === */
.hnui-form-item-success {
  font-size: 12px;
  color: var(--hnui-success-color);
  line-height: 1.5;
  margin-top: 4px;
}

/* === 表单校验状态 === */
/* 错误状态 */
.hnui-form-item-has-error .hnui-form-item-content input,
.hnui-form-item-has-error .hnui-form-item-content select,
.hnui-form-item-has-error .hnui-form-item-content textarea {
  border-color: var(--hnui-danger-color);
}

.hnui-form-item-has-error .hnui-form-item-content input:focus,
.hnui-form-item-has-error .hnui-form-item-content select:focus,
.hnui-form-item-has-error .hnui-form-item-content textarea:focus {
  border-color: var(--hnui-danger-color);
}

/* 警告状态 */
.hnui-form-item-has-warning .hnui-form-item-content input,
.hnui-form-item-has-warning .hnui-form-item-content select,
.hnui-form-item-has-warning .hnui-form-item-content textarea {
  border-color: var(--hnui-warning-color);
}

.hnui-form-item-has-warning .hnui-form-item-content input:focus,
.hnui-form-item-has-warning .hnui-form-item-content select:focus,
.hnui-form-item-has-warning .hnui-form-item-content textarea:focus {
  border-color: var(--hnui-warning-color);
}

/* 成功状态 */
.hnui-form-item-has-success .hnui-form-item-content input,
.hnui-form-item-has-success .hnui-form-item-content select,
.hnui-form-item-has-success .hnui-form-item-content textarea {
  border-color: var(--hnui-success-color);
}

.hnui-form-item-has-success .hnui-form-item-content input:focus,
.hnui-form-item-has-success .hnui-form-item-content select:focus,
.hnui-form-item-has-success .hnui-form-item-content textarea:focus {
  border-color: var(--hnui-success-color);
}

/* === 状态图标 === */
.hnui-form-item-status-icon {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 16px;
  pointer-events: none;
}

.hnui-form-item-status-icon-success {
  color: var(--hnui-success-color);
}

.hnui-form-item-status-icon-error {
  color: var(--hnui-danger-color);
}

.hnui-form-item-status-icon-warning {
  color: var(--hnui-warning-color);
}

/* === 布局方式 === */

/* 右对齐(默认,常规) */
.hnui-form-label-right .hnui-form-item-label {
  width: 100px;
  text-align: right;
  padding-right: 16px;
  justify-content: flex-end;
}

/* 左对齐 */
.hnui-form-label-left .hnui-form-item-label {
  width: 100px;
  text-align: left;
  padding-right: 16px;
  justify-content: flex-start;
}

/* 顶部对齐 */
.hnui-form-label-top .hnui-form-item {
  flex-direction: column;
}

.hnui-form-label-top .hnui-form-item-label {
  width: 100%;
  margin-bottom: 8px;
  line-height: 1.5;
}

/* 纵向布局 */
.hnui-form-layout-vertical .hnui-form-item {
  flex-direction: column;
}

.hnui-form-layout-vertical .hnui-form-item-label {
  width: 100%;
  text-align: left;
  padding-right: 0;
  margin-bottom: 8px;
  line-height: 1.5;
}

/* 行内布局 */
.hnui-form-layout-inline {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}

.hnui-form-layout-inline .hnui-form-item {
  margin-bottom: 0;
  flex: 0 0 auto;
}

.hnui-form-layout-inline .hnui-form-item-label {
  width: auto;
  padding-right: 8px;
}

.hnui-form-layout-inline .hnui-form-item-content {
  flex: 0 0 auto;
  width: auto;
}

/* === 表单操作按钮 === */
.hnui-form-actions {
  display: flex;
  gap: 8px;
  margin-top: 24px;
}

.hnui-form-label-right .hnui-form-actions {
  padding-left: 116px;
}

.hnui-form-label-left .hnui-form-actions {
  padding-left: 116px;
}

/* === 动态表单项 === */
.hnui-form-item-dynamic {
  display: flex;
  align-items: flex-start;
  gap: 8px;
}

.hnui-form-item-dynamic-content {
  flex: 1;
}

.hnui-form-item-dynamic-action {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border: 1px dashed var(--hnui-border-color);
  border-radius: 3px;
  background-color: transparent;
  color: var(--hnui-neutral-color-4);
  cursor: pointer;
  transition: all 0.3s;
  font-size: 14px;
}

.hnui-form-item-dynamic-action:hover {
  border-color: var(--hnui-brand-color-hover);
  color: var(--hnui-brand-color-hover);
}

.hnui-form-item-dynamic-action-add {
  border-style: dashed;
}

.hnui-form-item-dynamic-action-remove {
  border-style: dashed;
}

/* === 表单特殊控件包装器 === */
/* 多选选择器包装器 */
.hnui-form-multi-select-wrapper {
  min-height: 32px;
  padding: 4px 8px;
  border: 1px solid var(--hnui-border-color);
  border-radius: 3px;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  background-color: transparent;
}

.hnui-form-multi-select-icon {
  color: var(--hnui-neutral-color-4);
  margin-left: auto;
}

/* 单选按钮组包装器 */
.hnui-form-radio-group-wrapper {
  display: flex;
  gap: 32px;
  padding: 8px 12px;
  background-color: var(--hnui-neutral-color-7);
  border-radius: 3px;
}

.hnui-form-radio-label {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

/* 多选框组包装器 */
.hnui-form-checkbox-group {
  display: flex;
  gap: 16px;
}

.hnui-form-checkbox-label {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

/* 滑块包装器 */
.hnui-form-slider-wrapper {
  height: 32px;
  display: flex;
  align-items: center;
  padding: 0 12px;
  border: 1px solid var(--hnui-border-color);
  border-radius: 3px;
  background-color: transparent;
}

.hnui-form-slider-wrapper input[type="range"] {
  flex: 1;
}

/* 范围滑块 */
.hnui-form-range-slider {
  position: relative;
  width: 100%;
  height: 32px;
  display: flex;
  align-items: center;
  padding: 0 12px;
  border: 1px solid var(--hnui-border-color);
  border-radius: 3px;
  background-color: transparent;
}

.hnui-form-range-slider-track {
  position: relative;
  width: 100%;
  height: 4px;
  background-color: var(--hnui-neutral-color-6);
  border-radius: 2px;
}

.hnui-form-range-slider-range {
  position: absolute;
  height: 4px;
  background-color: var(--hnui-brand-color);
  border-radius: 2px;
}

.hnui-form-range-slider-handle {
  position: absolute;
  width: 16px;
  height: 16px;
  background-color: var(--hnui-color-white);
  border: 2px solid var(--hnui-brand-color);
  border-radius: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  cursor: pointer;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
  transition: box-shadow 0.2s;
}

.hnui-form-range-slider-handle:hover {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
}

/* 带图标的输入框包装器 */
.hnui-form-input-with-icon {
  position: relative;
  display: flex;
  align-items: center;
}

.hnui-form-input-icon-prefix {
  position: absolute;
  left: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--hnui-neutral-color-4);
  font-size: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.hnui-form-input-icon-suffix {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--hnui-neutral-color-4);
  font-size: 16px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* SVG 图标支持 */
.hnui-form-input-icon-prefix svg,
.hnui-form-input-icon-suffix svg {
  width: 16px;
  height: 16px;
}

.hnui-form-input-with-prefix {
  padding-left: 36px !important;
}

.hnui-form-input-with-suffix {
  padding-right: 36px !important;
  flex: 1;
}

.hnui-form-input-lg {
  height: 40px;
}

.hnui-form-actions-spaced {
  margin-top: 16px;
}

/* === 帮助提示气泡 === */
.hnui-form-tip-wrapper {
  position: relative;
  display: inline-flex;
  align-items: center;
  margin-left: 4px;
  cursor: pointer;
}

.hnui-form-tooltip {
  position: absolute;
  z-index: 1000;
  padding: 8px 12px;
  background-color: var(--hnui-neutral-color-1);
  color: var(--hnui-color-white);
  border-radius: 3px;
  font-size: 12px;
  line-height: 1.5;
  max-width: 250px;
  word-wrap: break-word;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  bottom: calc(100% + 8px);
  left: 50%;
  transform: translateX(-50%);
  white-space: nowrap;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.2s, visibility 0.2s;
}

.hnui-form-tip-wrapper:hover .hnui-form-tooltip {
  opacity: 1;
  visibility: visible;
}

.hnui-form-tip-wrapper-hover .hnui-form-tooltip {
  opacity: 1;
  visibility: visible;
}

.hnui-form-tooltip::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  width: 0;
  height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 4px solid var(--hnui-neutral-color-1);
}

组件对齐和布局方式

Form 表单支持多种对齐和布局方式,包括右对齐(常规)、左对齐、顶部对齐、纵向布局和行内布局。

查看代码
html
<form class="hnui-form hnui-form-label-right" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      名称
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      选择器
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 100%">
        <div class="hnui-select-selector">
          <span
            class="hnui-select-selection-text hnui-select-selection-placeholder"
            >请选择内容</span
          >
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>
  <div class="hnui-form-actions">
    <button class="hnui-btn hnui-btn-primary">确定</button>
    <button class="hnui-btn">取消</button>
  </div>
</form>
html
<form class="hnui-form hnui-form-label-left" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      名称
      <span class="hnui-form-item-required">*</span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      输入框
      <span class="hnui-form-item-required">*</span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      输入框
      <span class="hnui-form-item-required">*</span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-actions">
    <button class="hnui-btn hnui-btn-primary">确定</button>
    <button class="hnui-btn">取消</button>
  </div>
</form>
html
<form class="hnui-form hnui-form-label-top" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      名称
      <span class="hnui-form-item-required">*</span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      输入框
      <span class="hnui-form-item-required">*</span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      输入框
      <span class="hnui-form-item-required">*</span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-actions">
    <button class="hnui-btn hnui-btn-primary">确定</button>
    <button class="hnui-btn">取消</button>
  </div>
</form>
html

<form class="hnui-form hnui-form-layout-vertical" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">输入框</label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">输入框</label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">选择器</label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 200px">
        <div class="hnui-select-selector">
          <span
            class="hnui-select-selection-text hnui-select-selection-placeholder"
            >请选择内容</span
          >
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>
  <div class="hnui-form-actions">
    <button class="hnui-btn hnui-btn-primary">确定</button>
    <button class="hnui-btn">取消</button>
  </div>
</form>
html

<form class="hnui-form hnui-form-layout-inline">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">输入框</label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 200px"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">选择器</label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 200px">
        <div class="hnui-select-selector">
          <span
            class="hnui-select-selection-text hnui-select-selection-placeholder"
            >请选择内容</span
          >
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">输入框</label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 200px"
      />
    </div>
  </div>
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">选择器</label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 200px">
        <div class="hnui-select-selector">
          <span
            class="hnui-select-selection-text hnui-select-selection-placeholder"
            >请选择内容</span
          >
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>
  <div class="hnui-form-actions">
    <button class="hnui-btn hnui-btn-primary">确定</button>
    <button class="hnui-btn">取消</button>
  </div>
</form>

基础表单

包含各种表单控件的基础示例,展示输入框、选择器、单选按钮、多选框、滑块、开关、多行文本等控件的组合使用。

查看代码
html
<form class="hnui-form hnui-form-layout-vertical" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">输入框</label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">单选选择器</label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 100%">
        <div class="hnui-select-selector">
          <span class="hnui-select-selection-text">已选择内容</span>
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">多选选择器</label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-multi-select-wrapper" style="width: 100%">
        <div class="hnui-tag hnui-tag-default">
          默认标签
          <button class="hnui-tag-close">×</button>
        </div>
        <div class="hnui-tag hnui-tag-default">
          默认标签
          <button class="hnui-tag-close">×</button>
        </div>
        <div class="hnui-tag hnui-tag-default">
          默认标签
          <button class="hnui-tag-close">×</button>
        </div>
        <span class="hnui-select-arrow">
          <i class="hnui-icon-chevron-down"></i>
        </span>
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">单选按钮</label>
    <div class="hnui-form-item-content">
      <div class="hnui-radio-group">
        <input
          class="hnui-radio-input"
          type="radio"
          name="radio1"
          value="1"
          id="radio_form_1"
        />
        <label class="hnui-radio-label" for="radio_form_1">选项一</label>

        <input
          class="hnui-radio-input"
          type="radio"
          name="radio1"
          value="2"
          id="radio_form_2"
          checked
        />
        <label class="hnui-radio-label" for="radio_form_2">选项二</label>

        <input
          class="hnui-radio-input"
          type="radio"
          name="radio1"
          value="3"
          id="radio_form_3"
        />
        <label class="hnui-radio-label" for="radio_form_3">选项三</label>

        <input
          class="hnui-radio-input"
          type="radio"
          name="radio1"
          value="4"
          id="radio_form_4"
        />
        <label class="hnui-radio-label" for="radio_form_4">选项四</label>
        <input
          class="hnui-radio-input"
          type="radio"
          name="radio1"
          value="5"
          id="radio_form_5"
        />
        <label class="hnui-radio-label" for="radio_form_5">选项五</label>
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">多选框</label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-checkbox-group">
        <label class="hnui-form-checkbox-label">
          <input type="checkbox" class="hnui-checkbox-input" checked />
          <span>多选项</span>
        </label>
        <label class="hnui-form-checkbox-label">
          <input type="checkbox" class="hnui-checkbox-input" />
          <span>多选项</span>
        </label>
        <label class="hnui-form-checkbox-label">
          <input type="checkbox" class="hnui-checkbox-input" />
          <span>多选项</span>
        </label>
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">单选框</label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-range-slider" style="width: 100%">
        <div class="hnui-form-range-slider-track">
          <div
            class="hnui-form-range-slider-range"
            style="left: 20%; width: 40%"
          ></div>
          <div class="hnui-form-range-slider-handle" style="left: 20%"></div>
          <div class="hnui-form-range-slider-handle" style="left: 60%"></div>
        </div>
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">开关</label>
    <div class="hnui-form-item-content">
      <label class="hnui-switch">
        <input type="checkbox" checked />
        <span class="hnui-switch-slider"></span>
      </label>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">多行文本</label>
    <div class="hnui-form-item-content">
      <textarea
        class="hnui-textarea"
        placeholder="请输入内容"
        rows="4"
        style="width: 100%"
      ></textarea>
    </div>
  </div>

  <div class="hnui-form-actions">
    <button class="hnui-btn hnui-btn-primary">确定</button>
    <button class="hnui-btn">取消</button>
  </div>
</form>

登录表单

简洁的登录界面示例,带图标的输入框和密码框。

查看代码
html
<form class="hnui-form hnui-form-layout-vertical" style="max-width: 400px">
  <div class="hnui-form-item">
    <div class="hnui-form-item-content">
      <div class="hnui-form-input-with-icon">
        <span class="hnui-form-input-icon-prefix">
          <IconUser />
        </span>
        <input
          type="text"
          class="hnui-input hnui-form-input-lg hnui-form-input-with-prefix"
          placeholder="请输入内容"
          style="width: 100%"
        />
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <div class="hnui-form-item-content">
      <div class="hnui-form-input-with-icon">
        <span class="hnui-form-input-icon-prefix">
          <IconLock />
        </span>
        <input
          type="password"
          class="hnui-input hnui-form-input-lg hnui-form-input-with-prefix hnui-form-input-with-suffix"
          placeholder="请输入密码"
          style="width: 100%"
        />
        <span class="hnui-form-input-icon-suffix">
          <IconBrowseOff />
        </span>
      </div>
    </div>
  </div>

  <div class="hnui-form-actions hnui-form-actions-spaced">
    <button class="hnui-btn hnui-btn-primary" style="width: 100%">
      登录
    </button>
  </div>
</form>

无控制按钮

左对齐布局的表单,不包含提交按钮。

查看代码
html
<form class="hnui-form hnui-form-label-left" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">输入框</label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">输入框</label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">选择器</label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 100%">
        <div class="hnui-select-selector">
          <span class="hnui-select-selection-text hnui-select-selection-placeholder">请选择内容</span>
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>
</form>

必填标识

标识必填项的表单示例,通过红色星号标识必填字段。

查看代码
html
<form class="hnui-form hnui-form-label-left" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      选择器
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 100%">
        <div class="hnui-select-selector">
          <span class="hnui-select-selection-text hnui-select-selection-placeholder"
            >请选择内容</span
          >
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>
</form>

提示内容

带帮助提示的表单项,点击帮助图标可显示提示信息。

查看代码
html
<form class="hnui-form hnui-form-label-right" style="max-width: 600px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
      <span class="hnui-form-tip-wrapper">
        <i class="hnui-icon hnui-icon-tip"></i>
        <span class="hnui-form-tooltip">文字提示文字提示文字提示</span>
      </span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
      <span class="hnui-form-tip-wrapper">
        <i class="hnui-icon hnui-icon-tip"></i>
        <span class="hnui-form-tooltip">文字提示文字提示文字提示</span>
      </span>
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      选择器
      <span class="hnui-form-tip-wrapper hnui-form-tip-wrapper-hover">
        <i class="hnui-icon hnui-icon-tip"></i>
        <span class="hnui-form-tooltip">文字提示文字提示文字提示</span>
      </span>
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-select" style="width: 100%">
        <div class="hnui-select-selector">
          <span class="hnui-select-selection-text hnui-select-selection-placeholder"
            >请选择内容</span
          >
          <span class="hnui-select-arrow">
            <i class="hnui-icon-chevron-down"></i>
          </span>
        </div>
      </div>
    </div>
  </div>
</form>

表单校验状态

表单支持多种校验状态,包括说明文案、失败、警告、成功等,可选择是否显示状态图标。

查看代码
html
<form class="hnui-form hnui-form-label-right" style="max-width: 600px">
  <!-- 说明文案 -->
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      说明文案
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
      <div class="hnui-form-item-extra">额外提示语,文字过多时输入框宽度折行</div>
    </div>
  </div>

  <!-- 失败 -->
  <div class="hnui-form-item hnui-form-item-has-error">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      失败
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
      <div class="hnui-form-item-error">额外提示语,文字过多时输入框宽度折行</div>
    </div>
  </div>

  <!-- 警告 -->
  <div class="hnui-form-item hnui-form-item-has-warning">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      警告
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
      <div class="hnui-form-item-warning">额外提示语,文字过多时输入框宽度折行</div>
    </div>
  </div>

  <!-- 成功 -->
  <div class="hnui-form-item hnui-form-item-has-success">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      成功
    </label>
    <div class="hnui-form-item-content">
      <input
        type="text"
        class="hnui-input"
        placeholder="请输入内容"
        style="width: 100%"
      />
      <div class="hnui-form-item-success">额外提示语,文字过多时输入框宽度折行</div>
    </div>
  </div>

  <!-- 成功带图标 -->
  <div class="hnui-form-item hnui-form-item-has-success">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      成功带图标
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-input-with-icon">
        <input
          type="text"
          class="hnui-input hnui-form-input-with-suffix"
          placeholder="请输入内容"
          style="width: 100%"
        />
        <!-- 完成_实心 -->
        <i class="hnui-icon hnui-icon-check-circle-filled hnui-form-item-status-icon hnui-form-item-status-icon-success"></i>
      </div>
    </div>
  </div>

  <!-- 失败带图标 -->
  <div class="hnui-form-item hnui-form-item-has-error">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      失败带图标
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-input-with-icon">
        <input
          type="text"
          class="hnui-input hnui-form-input-with-suffix"
          placeholder="请输入内容"
          style="width: 100%"
        />
        <!-- 关闭 -->
        <IconErrorCircleFilled class="hnui-icon hnui-form-item-status-icon hnui-form-item-status-icon-error"></IconErrorCircleFilled>
      </div>
    </div>
  </div>

  <!-- 警告带图标 -->
  <div class="hnui-form-item hnui-form-item-has-warning">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      警告带图标
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-input-with-icon">
        <input
          type="text"
          class="hnui-input hnui-form-input-with-suffix"
          placeholder="请输入内容"
          style="width: 100%"
        />
        <IconWarningCircleFilled class="hnui-icon hnui-form-item-status-icon hnui-form-item-status-icon-warning"></IconWarningCircleFilled>
      </div>
    </div>
  </div>
</form>

动态增减表单

支持动态添加和删除表单项,适用于需要灵活数量输入的场景。

查看代码
html
<form class="hnui-form hnui-form-label-right" style="max-width: 700px">
  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-item-dynamic">
        <div class="hnui-form-item-dynamic-content">
          <input
            type="text"
            class="hnui-input"
            placeholder="请输入内容"
            style="width: 100%"
          />
        </div>
        <button
          type="button"
          class="hnui-form-item-dynamic-action hnui-form-item-dynamic-action-remove"
        >
          <IconMinus></IconMinus>
        </button>
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-item-dynamic">
        <div class="hnui-form-item-dynamic-content">
          <input
            type="text"
            class="hnui-input"
            placeholder="请输入内容"
            style="width: 100%"
          />
        </div>
        <button
          type="button"
          class="hnui-form-item-dynamic-action hnui-form-item-dynamic-action-remove"
        >
          <IconMinus></IconMinus>
        </button>
      </div>
    </div>
  </div>

  <div class="hnui-form-item">
    <label class="hnui-form-item-label">
      <span class="hnui-form-item-required">*</span>
      输入框
    </label>
    <div class="hnui-form-item-content">
      <div class="hnui-form-item-dynamic">
        <div class="hnui-form-item-dynamic-content">
          <input
            type="text"
            class="hnui-input"
            placeholder="请输入内容"
            style="width: 100%"
          />
        </div>
        <button
          type="button"
          class="hnui-form-item-dynamic-action hnui-form-item-dynamic-action-add"
        >
          <i class="hnui-icon hnui-icon-plus"></i>
        </button>
      </div>
    </div>
  </div>
</form>

统一UI