amis2/docs/zh-CN/concepts/style.md
吴多益 9fd1ad8972
feat:属性表组件 (#1691)
* feat:属性表组件

* 换一下实现方式,避免右侧有一像素空隙

* 简易模式不显示外边框

* 补充文档

* 属性表的内容支持 visibleOn 表达式

* 支持设置 title
2021-03-26 11:59:42 +08:00

14 KiB
Executable File
Raw Blame History

title description type group menuName icon order
样式 0 💡 概念 样式 18

amis 中有大量的功能类 class 可以使用,即可以用在 schema 中,也可以用在自定义组件开发中,掌握这些 class, 几乎可以不用写样式。

注意
CSS辅助类样式做了全新的升级请点击顶部的「样式」查看新版。旧版本可以继续但将不再更新。

基本使用

例如,下面这个例子,我们内容区渲染了两个按钮,但是可以看到,两个按钮紧贴在一起,并不是很美观,于是我们想添加一定的间隔

[
  {
    "type": "button",
    "label": "按钮1",
    "actionType": "dialog",
    "dialog": {
      "title": "弹框",
      "body": "Hello World!"
    }
  },
  {
    "type": "button",
    "label": "按钮2",
    "actionType": "dialog",
    "dialog": {
      "title": "弹框",
      "body": "Hello World!"
    }
  }
]
  1. 通过查阅按钮文档可知,按钮支持 className 配置项,也就是说可以在按钮上添加 CSS 类名;
  2. 再查阅当前页面下面 外边距部分 可知,我们可以添加m-l类名实现margin-left: 15px;的 CSS 效果
  3. 于是我们在按钮2的配置中添加"className": "m-l",就能实现间距效果了
[
  {
    "type": "button",
    "label": "按钮1",
    "actionType": "dialog",
    "dialog": {
      "title": "弹框",
      "body": "Hello World!"
    }
  },
  {
    "type": "button",
    "label": "按钮2",
    "className": "m-l",
    "actionType": "dialog",
    "dialog": {
      "title": "弹框",
      "body": "Hello World!"
    }
  }
]

绝大部分组件都支持各种形式的 CSS 类名自定义,然后搭配该文档中的各种类名可以实现各式各样的样式调整。具体请查阅组件文档;

你可能需要掌握一些基础的 CSS 知识

字体颜色

实际颜色取决于主题,下面示例是默认主题的颜色。

.text-primary {
  color: #7266ba;
}

.text-primary-lt {
  color: #6254b2;
}

.text-primary-lter {
  color: #564aa3;
}

.text-primary-dk {
  color: #6254b2;
}

.text-primary-dker {
  color: #564aa3;
}

.text-info {
  color: #23b7e5;
}

.text-info-lt {
  color: #19a9d5;
}

.text-info-lter {
  color: #1797be;
}

.text-info-dk {
  color: #19a9d5;
}

.text-info-dker {
  color: #1797be;
}

.text-success {
  color: #27c24c;
}

.text-success-lt {
  color: #23ad44;
}

.text-success-lter {
  color: #1e983b;
}

.text-success-dk {
  color: #23ad44;
}

.text-success-dker {
  color: #1e983b;
}

.text-warning {
  color: #fad733;
}

.text-warning-lt {
  color: #f9d21a;
}

.text-warning-lter {
  color: #f4ca06;
}

.text-warning-dk {
  color: #f9d21a;
}

.text-warning-dker {
  color: #f4ca06;
}

.text-danger {
  color: #f05050;
}

.text-danger-lt {
  color: #ee3939;
}

.text-danger-lter {
  color: #ec2121;
}

.text-danger-dk {
  color: #ee3939;
}

.text-danger-dker {
  color: #ec2121;
}

.text-dark {
  color: #3a3f51;
}

.text-dark-lt {
  color: #2f3342;
}

.text-dark-lter {
  color: #252833;
}

.text-dark-dk {
  color: #2f3342;
}

.text-dark-dker {
  color: #252833;
}

.text-white {
  color: #fff;
}

.text-white-lt {
  color: #f2f2f2;
}

.text-white-lter {
  color: #e6e6e6;
}

.text-white-dk {
  color: #f2f2f2;
}

.text-white-dker {
  color: #e6e6e6;
}

.text-black {
  color: #1c2b36;
}

.text-black-lt {
  color: #131e25;
}

.text-black-lter {
  color: #0b1014;
}

.text-black-dk {
  color: #131e25;
}

.text-black-dker {
  color: #0b1014;
}

.text-muted {
  color: var(--text--muted-color);
}

.text-loud {
  color: var(--text--loud-color);
}

图标

amis 集成了 fontawesome,所以关于图标部分,请前往 fontawesome 查看。

布局

水平布局可以考虑用 Bootstrap 的 Grids 或者用 hobxcol

<div class="hbox b-a">
  <div class="col wrapper-sm bg-success">Col A</div>
  <div class="col wrapper-sm bg-info">Col B</div>
  <div class="col wrapper-sm bg-danger">Col C</div>
</div>

宽高

.w-1x {
  width: 1em;
}
.w-2x {
  width: 2em;
}
.w-3x {
  width: 3em;
}
.w-xxs {
  width: 60px;
}
.w-xs {
  width: 90px;
}
.w-sm {
  width: 150px;
}
.w {
  width: 200px;
}
.w-md {
  width: 240px;
}
.w-lg {
  width: 280px;
}
.w-xl {
  width: 320px;
}
.w-xxl {
  width: 360px;
}
.w-full {
  width: 100%;
}
.w-auto {
  width: auto;
}
.h-auto {
  height: auto;
}
.h-full {
  height: 100% !important;
  max-height: none !important;
}
<div class="hbox b-a bg-primary">
  <div class="col wrapper-sm b-r w-1x">w-1x</div>
  <div class="col wrapper-sm b-r w-2x">w-2x</div>
  <div class="col wrapper-sm b-r w-3x">w-3x</div>
  <div class="col wrapper-sm b-r w-xxs">w-xxs</div>
  <div class="col wrapper-sm b-r w-xs">w-xs</div>
  <div class="col wrapper-sm b-r w-sm">w-sm</div>
  <div class="col wrapper-sm b-r w">w</div>
  <div class="col wrapper-sm  lter">...</div>
</div>
<div class="hbox b-a bg-primary m-t">
  <div class="col wrapper-sm b-r w-md">w-md</div>
  <div class="col wrapper-sm b-r w-lg">w-lg</div>
  <div class="col wrapper-sm b-r w-xl">w-xl</div>
  <div class="col wrapper-sm lter">...</div>
</div>
<div class="hbox b-a bg-primary m-t">
  <div class="col wrapper-sm b-r w-xxl">w-xxl</div>
  <div class="col wrapper-sm lter">...</div>
</div>

外边距

.m-xxs {
  margin: 2px 4px;
}
.m-xs {
  margin: 5px;
}
.m-sm {
  margin: 10px;
}
.m {
  margin: 15px;
}
.m-md {
  margin: 20px;
}
.m-lg {
  margin: 30px;
}
.m-xl {
  margin: 50px;
}
.m-n {
  margin: 0 !important;
}
.m-l-none {
  margin-left: 0 !important;
}
.m-l-xs {
  margin-left: 5px;
}
.m-l-sm {
  margin-left: 10px;
}
.m-l {
  margin-left: 15px;
}
.m-l-md {
  margin-left: 20px;
}
.m-l-lg {
  margin-left: 30px;
}
.m-l-xl {
  margin-left: 40px;
}
.m-l-xxl {
  margin-left: 50px;
}
.m-l-n-xxs {
  margin-left: -1px;
}
.m-l-n-xs {
  margin-left: -5px;
}
.m-l-n-sm {
  margin-left: -10px;
}
.m-l-n {
  margin-left: -15px;
}
.m-l-n-md {
  margin-left: -20px;
}
.m-l-n-lg {
  margin-left: -30px;
}
.m-l-n-xl {
  margin-left: -40px;
}
.m-l-n-xxl {
  margin-left: -50px;
}
.m-t-none {
  margin-top: 0 !important;
}
.m-t-xxs {
  margin-top: 1px;
}
.m-t-xs {
  margin-top: 5px;
}
.m-t-sm {
  margin-top: 10px;
}
.m-t {
  margin-top: 15px;
}
.m-t-md {
  margin-top: 20px;
}
.m-t-lg {
  margin-top: 30px;
}
.m-t-xl {
  margin-top: 40px;
}
.m-t-xxl {
  margin-top: 50px;
}
.m-t-n-xxs {
  margin-top: -1px;
}
.m-t-n-xs {
  margin-top: -5px;
}
.m-t-n-sm {
  margin-top: -10px;
}
.m-t-n {
  margin-top: -15px;
}
.m-t-n-md {
  margin-top: -20px;
}
.m-t-n-lg {
  margin-top: -30px;
}
.m-t-n-xl {
  margin-top: -40px;
}
.m-t-n-xxl {
  margin-top: -50px;
}
.m-r-none {
  margin-right: 0 !important;
}
.m-r-xxs {
  margin-right: 1px;
}
.m-r-xs {
  margin-right: 5px;
}
.m-r-sm {
  margin-right: 10px;
}
.m-r {
  margin-right: 15px;
}
.m-r-md {
  margin-right: 20px;
}
.m-r-lg {
  margin-right: 30px;
}
.m-r-xl {
  margin-right: 40px;
}
.m-r-xxl {
  margin-right: 50px;
}
.m-r-n-xxs {
  margin-right: -1px;
}
.m-r-n-xs {
  margin-right: -5px;
}
.m-r-n-sm {
  margin-right: -10px;
}
.m-r-n {
  margin-right: -15px;
}
.m-r-n-md {
  margin-right: -20px;
}
.m-r-n-lg {
  margin-right: -30px;
}
.m-r-n-xl {
  margin-right: -40px;
}
.m-r-n-xxl {
  margin-right: -50px;
}
.m-b-none {
  margin-bottom: 0 !important;
}
.m-b-xxs {
  margin-bottom: 1px;
}
.m-b-xs {
  margin-bottom: 5px;
}
.m-b-sm {
  margin-bottom: 10px;
}
.m-b {
  margin-bottom: 15px;
}
.m-b-md {
  margin-bottom: 20px;
}
.m-b-lg {
  margin-bottom: 30px;
}
.m-b-xl {
  margin-bottom: 40px;
}
.m-b-xxl {
  margin-bottom: 50px;
}
.m-b-n-xxs {
  margin-bottom: -1px;
}
.m-b-n-xs {
  margin-bottom: -5px;
}
.m-b-n-sm {
  margin-bottom: -10px;
}
.m-b-n {
  margin-bottom: -15px;
}
.m-b-n-md {
  margin-bottom: -20px;
}
.m-b-n-lg {
  margin-bottom: -30px;
}
.m-b-n-xl {
  margin-bottom: -40px;
}
.m-b-n-xxl {
  margin-bottom: -50px;
}

内边距

.wrapper-xs {
  padding: 5px;
}
.wrapper-sm {
  padding: 10px;
}
.wrapper {
  padding: 15px;
}
.wrapper-md {
  padding: 20px;
}
.wrapper-lg {
  padding: 30px;
}
.wrapper-xl {
  padding: 50px;
}
.padder-xs {
  padding-left: 5px;
  padding-right: 5px;
}
.padder-sm {
  padding-left: 10px;
  padding-right: 10px;
}
.padder-lg {
  padding-left: 30px;
  padding-right: 30px;
}
.padder-md {
  padding-left: 20px;
  padding-right: 20px;
}
.padder {
  padding-left: 15px;
  padding-right: 15px;
}
.padder-v-xs {
  padding-top: 5px;
  padding-bottom: 5px;
}
.padder-v-sm {
  padding-top: 10px;
  padding-bottom: 10px;
}
.padder-v-lg {
  padding-top: 30px;
  padding-bottom: 30px;
}
.padder-v-md {
  padding-top: 20px;
  padding-bottom: 20px;
}
.padder-v {
  padding-top: 15px;
  padding-bottom: 15px;
}
.no-padder {
  padding: 0 !important;
}
.pull-in {
  margin-left: -15px;
  margin-right: -15px;
}
.pull-out {
  margin: -10px -15px;
}

边框

.b {
  border: 1px solid rgba(0, 0, 0, 0.05);
}
.b-a {
  border: 1px solid @border-color;
}
.b-t {
  border-top: 1px solid @border-color;
}
.b-r {
  border-right: 1px solid @border-color;
}
.b-b {
  border-bottom: 1px solid @border-color;
}
.b-l {
  border-left: 1px solid @border-color;
}
.b-light {
  border-color: @brand-light;
}
.b-dark {
  border-color: @brand-dark;
}
.b-black {
  border-color: @brand-dark;
}
.b-primary {
  border-color: @brand-primary;
}
.b-success {
  border-color: @brand-success;
}
.b-info {
  border-color: @brand-info;
}
.b-warning {
  border-color: @brand-warning;
}
.b-danger {
  border-color: @brand-danger;
}
.b-white {
  border-color: #fff;
}
.b-dashed {
  border-style: dashed !important;
}
.b-l-light {
  border-left-color: @brand-light;
}
.b-l-dark {
  border-left-color: @brand-dark;
}
.b-l-black {
  border-left-color: @brand-dark;
}
.b-l-primary {
  border-left-color: @brand-primary;
}
.b-l-success {
  border-left-color: @brand-success;
}
.b-l-info {
  border-left-color: @brand-info;
}
.b-l-warning {
  border-left-color: @brand-warning;
}
.b-l-danger {
  border-left-color: @brand-danger;
}
.b-l-white {
  border-left-color: #fff;
}
.b-l-2x {
  border-left-width: 2px;
}
.b-l-3x {
  border-left-width: 3px;
}
.b-l-4x {
  border-left-width: 4px;
}
.b-l-5x {
  border-left-width: 5px;
}
.b-2x {
  border-width: 2px;
}
.b-3x {
  border-width: 3px;
}
.b-4x {
  border-width: 4px;
}
.b-5x {
  border-width: 5px;
}

圆角

.r {
  border-radius: @border-radius-base @border-radius-base @border-radius-base
    @border-radius-base;
}
.r-2x {
  border-radius: @border-radius-base * 2;
}
.r-3x {
  border-radius: @border-radius-base * 3;
}
.r-l {
  border-radius: @border-radius-base 0 0 @border-radius-base;
}
.r-r {
  border-radius: 0 @border-radius-base @border-radius-base 0;
}
.r-t {
  border-radius: @border-radius-base @border-radius-base 0 0;
}
.r-b {
  border-radius: 0 0 @border-radius-base @border-radius-base;
}

字体相关

.font-normal {
  font-weight: normal;
}
.font-thin {
  font-weight: 300;
}
.font-bold {
  font-weight: 700;
}
.text-3x {
  font-size: 3em;
}
.text-2x {
  font-size: 2em;
}
.text-lg {
  font-size: @font-size-lg;
}
.text-md {
  font-size: @font-size-md;
}
.text-base {
  font-size: @font-size-base;
}
.text-sm {
  font-size: @font-size-sm;
}
.text-xs {
  font-size: @font-size-xs;
}
.text-xxs {
  text-indent: -9999px;
}
.text-ellipsis {
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.text-u-c {
  text-transform: uppercase;
}
.text-l-t {
  text-decoration: line-through;
}
.text-u-l {
  text-decoration: underline;
}
.text-left {
  text-align: left;
}
.text-center {
  text-align: center;
}
.text-right {
  text-align: right;
}
.word-break {
  white-space: normal;
  word-break: break-all;
  word-wrap: break-word;
}
.white-space-pre {
  white-space: pre;
}

定位

.pos-rlt {
  position: relative;
}
.pos-stc {
  position: static !important;
}
.pos-abt {
  position: absolute;
}
.pos-fix {
  position: fixed;
}

背景

<div class="hbox b-a bg-light">
  <div class="col wrapper-sm b-r bg-white">bg-white</div>
  <div class="col wrapper-sm b-r bg-dark">bg-dark</div>
  <div class="col wrapper-sm b-r bg-info">bg-info</div>
  <div class="col wrapper-sm b-r bg-success">bg-success</div>
  <div class="col wrapper-sm b-r bg-warning">bg-warning</div>
  <div class="col wrapper-sm b-r bg-danger">bg-danger</div>
  <div class="col wrapper-sm bg-primary">bg-primary</div>
</div>

其他

.show {
  visibility: visible;
}
.line {
  width: 100%;
  height: 2px;
  margin: 10px 0;
  font-size: 0;
  overflow: hidden;
  background-color: transparent;
  border-width: 0;
  border-top: 1px solid @border-color;
}
.line-xs {
  margin: 0;
}
.line-lg {
  margin-top: 15px;
  margin-bottom: 15px;
}
.line-dashed {
  border-style: dashed;
  background: transparent;
}
.no-line {
  border-width: 0;
}
.no-border,
.no-borders {
  border-color: transparent;
  border-width: 0;
}
.no-radius {
  border-radius: 0;
}
.block {
  display: block;
}
.block.hide {
  display: none;
}
.inline {
  display: inline-block !important;
}
.none {
  display: none;
}
.pull-left {
  float: left;
}
.pull-right {
  float: right;
}
.pull-none {
  float: none;
}
.rounded {
  border-radius: 500px;
}
.clear {
  display: block;
  overflow: hidden;
}
.no-bg {
  background-color: transparent;
  color: inherit;
}
.no-select {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}