# 通用样式

## 使用方式

> 需要先引入 `amos-framework` 主样式。

```js

<div className="f-10 p-5">内容</div>
```

## 通用滚动条

采用 `pretty-scrollbar` 创建通用交互滚动条，当鼠标悬浮在滚动区域时，才显示滚动条。仅 `chrome` 浏览器起效。

```scss
@import '~amos-framework/lib/styles/mixins/scrollbar.scss';

// scrollbar color
$scrollOutColor: rgba(#dedede, 0.3);
$scrollInnerColor: rgba(black, 0.1);

/**
 *定义滚动条样式 圆角和阴影不需要则传入null
 *	1、$outColor -- 滚动条颜色
 *	2、$innerColor -- 滑块颜色
 *	3、$height -- 滚动条宽高、圆角
 *	4、$width
 *	5、$radius
 *	6、$shadow -- 阴影
 *  example:
 *  .my { @include scrollbar(5px, 8px, $scrollOutColor, $scrollInnerColor); }
 */
@mixin scrollbar($width: 10px, $height: 10px, $outColor: $bgBarColor, $innerColor: $bgThumbColor, $radius: 5px, $shadow: null);

/**
 *定义通用交互滚动条样式 圆角和阴影不需要则传入null
 *	1、$outColor -- 滚动条颜色
 *	2、$innerColor -- 滑块颜色
 *	3、$height -- 滚动条宽高、圆角
 *	4、$width
 *	5、$radius
 *	6、$shadow -- 阴影
 *  example:
 *  .my { @include pretty-scrollbar(5px, 8px, $scrollOutColor, $scrollInnerColor); }
 */
@mixin pretty-scrollbar($width: 10px, $height: 10px, $outColor: $bgBarColor, $innerColor: $bgThumbColor, $radius: 5px, $shadow: null)

/**
 * 定义某个选择器之下的通用交互滚动条样式 圆角和阴影不需要则传入null
 *  example:
 *  - 直接在 body 之下：
 *   @include body-scrollbar(5px, 8px);
 *  - 在某个选择器之下：
 *  .my { @include body-scrollbar(5px, 8px); }
 */
@mixin body-scrollbar($width: 10px, $height: 10px, $outColor: $bgBarColor, $innerColor: $bgThumbColor, $radius: 5px, $shadow: null)
```

版本 1.5.6 之下滚动条采用如下方式解决抖动：

> 注意：`pretty-scrollbar` 默认给父节点添加了 `overflow: overlay;` 属性，以防左侧界面抖动。但是，该方式不是最佳的解决方案，应该采用嵌套父节点，在父节点统一采用 `margin-left: calc(100vw - 100%)` 实现。
> 由于 父节点上层节点已经脱离控制，应由外部控制。下一阶段，可以添加一个组件，由该组件控制所有。

- 中文 [overflow: overlay](https://developer.mozilla.org/zh-CN/docs/Web/CSS/overflow#值)
- 英文 [overflow: overlay](https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#Values)
- 默认提供 `amos-pretty-scrollbar` 样式，采用 `pretty-scrollbar` 创建滚动条。可直接引入即可。

版本 1.5.6 之后，滚动条的显隐，采用 `visibility` 控制显影，默认会占据位置。

## 案例演示

切换默认样式名，查看源码中，目标元素样式

---demo
```js
import { Select } from 'amos-framework';

const styles = [
  'f-10', 'f-12', 'f-13', 'f-14', 'f-15', 'f-16', 'f-17', 'f-18', 'f-19', 'f-20', 'f-24', 'f-28', 'f-32',
  'p-5', 'p-10', 'p-15', 'p-20', 'pt-5', 'pt-10', 'pt-15', 'pt-20', 'pl-5', 'pl-10', 'pl-15', 'pl-20', 'pr-5', 'pr-10', 'pr-15', 'pr-20', 'pb-5', 'pb-10', 'pb-15', 'pb-20',
  'm-5', 'm-10', 'm-15', 'mt-20', 'mt-5', 'mt-10', 'mt-15', 'mt-20', 'ml-5', 'ml-10', 'ml-15', 'ml-20', 'mr-5', 'mr-10', 'mr-15', 'mr-20', 'mb-5', 'mb-10', 'mb-15', 'mb-20',
  'w-50', 'w-80', 'w-100', 'w-120', 'w-150', 'w-180', 'w-200',
  'f-l', 'f-r',
  'clearfix',
  't-o',
  'none',
  'cursor-d', 'cursor-t', 'cursor-h', 'cursor-m', 'cursor-p',
  'center',
  't-i-1', 't-i-2',
  'border-0', 'border-l-0', 'border-r-0', 'border-t-0', 'border-b-0', 'border-0-lr', 'border-0-tb',
  'flex-vh-center', 'flex-v-center', 'flex-h-center',
  'center-block', 'img-wh', 'img-circle'
];

class Demo extends Component {
  state = {
    cls: ''
  };

  onChange = (value, item) => {
    this.setState({
      cls: value
    });
  }

  render() {
    const { iptCopy } = this.state;
    return (
      <div>
        <Select
          data={styles}
          renderOption={item => <Select.Option value={item}>{item}</Select.Option>}
          onChange={this.onChange}
        />
        <div style={{ background: '#efefef', height: '300px', marginTop: 10 }}>
          <div className={this.state.cls} style={{ background: '#fe8484' }}>
            内容区(目标元素)
          </div>
        </div>
    </div>
    );
  }
}

ReactDOM.render(<Demo />, _react_runner_);
```
---demoend

## 可用项

| params | description |
|--------- |-------- |
| 字体大小：`f-10` 至 `f-32` | 字体大小, `f-10` 代表 `font-size: 10px;` |
| padding系列：`p-5、p-10、p-15、p-20` | padding系列, `p-5` 代表 `padding: 5px;`,独立使用可使用 `pt/pl/pr/pb`-`5,10,15,20` |
| margin系列：`m-5、m-10、m-15、m-20` | margin系列, `m-5` 代表 `margin: 5px;`, 独立使用可使用 `mt/ml/mr/mb`-`5,10,15,20` |
| 宽度：`w-50,80,100,120,150,180,200` | 宽度, `w-50` 代表 `width: 50px;` |
| 浮动: `f-l、f-r` | 浮动, `f-l` 代表 `float: left;`，`f-r` 代表 `float: right;` |
| 清除浮动: `clearfix` | 清除浮动 |
| 省略号: `t-o` | 文本溢出时，显示省略号 |
| 隐藏: `none` | 隐藏元素 |
| 手标: `cursor-d,t,h,m,p` | 手势-手, `d: default`, `t:text`,`h:hand`,`m:move`,`p: pointer` |
| 文本居中: `center` | 文本居中: `text-align: center;` |
| 文本缩进: `t-i-1,2` | 文本缩进: `t-i-1` 代表 `text-indent: 1em;` |
| 文本文字间间隔: `l-s-5,10` | 文本文字间间隔: `l-s-5` 代表 `letter-spacing: 5px;` |
| 0边框: `border-0` | 0边框: `border-0` 代表 `border: 0;`,独立使用可使用 `border-0`-`l,r,t,b` 分别代表`border-left: 0;`、`border-right: 0;`、`border-top: 0;`、`border-bottom: 0;`,组合使用 `border-0-lr 和 border-0-tb` |
| flex: `flex-vh-center` | 水平垂直居中 |
| flex: `flex-v-center` | 水平居中 |
| flex: `flex-h-center` | 垂直居中 |
| `center-block` | 采用 `margin auto` 实现居中 |
| `img-wh` | img 默认宽高 `100%` |
| `img-circle` | img 默认宽高圆角 `50%` |
