React & Ant-Design 应用 —— Grid栈格设置布局、Space间距设置自适应内容

  • 问题描述
  • 居中布局 :Grid栈格
  • Space设置间距
  • 总结


今天在实践中,我第一次使用了Grid栈格来设置布局,也用了Space来设置合适的间距。通过Grid配合Space,设置出来了居中且自适应的Ant-Design组件。因为是第一次使用到Grid和Space,所以做一些记录。可供居中布局、自适应参考。

问题描述

今天还是在处理DatePicker日期选择器这个组件的其他功能交互。但在调试的时候偶然间发现了它样式上存在一点问题:在小屏幕上出现了超出弹窗的问题。

超出范围显示肯定是有问题的。我想了想为什么,最后想起来问题在于,我给DatePicker的width设置成了180%。

这样设置是不好的。但那时候想先把样式做出来,而且发现datepicker本身除了设置size大中小和width百分比,并且DatePicker是inline-flex,默认宽度是自身内容宽度。很难把它调成我想要的长度大小。所以就乱来了:在大屏幕上没有问题,但在小屏幕上显示,DatePicker就超出了弹窗范围。

既然问题出在这里,就只能老实把width设置成正常的100%了。

另外我设置组件元素为居中是通过flex设置的:

.content{
	display:flex;
	justify-content:center;
}

在看Ant-Design的官网时,偶然间看到了Grid栈格,我感觉可以尝试用它来做一个居中布局。

居中布局 :Grid栈格

① 引入 Row,Col

import React from 'react';
import ReactDOM from 'react-dom';
import { Row, Col } from 'antd';

② 使用

ReactDOM.render(
    <Row>
      <Col span={4}>col-4</Col>
      <Col span={16}>col-16</Col>
      <Col span={4}>col-4</Col>
    </Row>
  document.getElementById('container'),
);

③ 实现自适应居中布局

ant design 步骤条颜色 ant design 布局_自适应


④ 加入DatePicker日期选择器组件

ReactDOM.render(
  <>
    <Row>
      <Col span={4}>col-4</Col>
      <Col span={16}>
        <DatePicker format="YYYY-MM-DD" style={{ width: '100%' }} />
      </Col>
      <Col span={4}>col-4</Col>
    </Row>
  </>,
  document.getElementById("container")
);

ant design 步骤条颜色 ant design 布局_自适应_02


嗯,还是回到矛盾问题:DatePicker的长度不够长。

为什么它的长度不够长,又不可以作妖去设置width:180%…

看了一下:
因为DatePicker是inline-flex,所以它默认宽度其实就是由自身内容宽度决定的

所以DatePicker没有因为它的父级元素是多大,自身宽度就是其100%。

Space设置间距

Space可以设置间距,如:

ant design 步骤条颜色 ant design 布局_ant-design_03


注意那一句:

可以设置 width:100% 独占一行

<Row>
      <Col span={4}>col-8</Col>
      <Col span={16}>
        <Space direction="vertical" style={{ width: '100%' }}>
          <DatePicker format="YYYY-MM-DD" style={{ width: '100%' }} />
        </Space>
      </Col>
      <Col span={4}>col-8</Col>
    </Row>

ant design 步骤条颜色 ant design 布局_自适应_04

自此,这个样式上的bug就解决了。

总结

  • Grid栈格可以用于设置自适应居中布局
  • Space可以帮助设置宽度间距
  • DatePicker是inline-flex,默认宽度为自身内容宽度。但要避免改变其display属性,可以通过Space设置width来改变其宽度。