首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将容器限制为三个固定尺寸

将容器限制为三个固定尺寸
EN

Stack Overflow用户
提问于 2021-08-05 14:04:21
回答 3查看 572关注 0票数 1

我在看反应网格布局,这是基于材料设计的12列网格。是否有方法为容器提供预定义的尺寸以坚持以下3种尺寸:1全宽(12 cols)、半栅格(6 cols)或1/3网格(4 cols)?

沙盒

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-12 11:50:21

我猜,当你说容器时,你指的是布局项目。如果是这样的话,使用自定义的onResize方法。使用您从问题中获得的沙箱代码:

代码语言:javascript
复制
export default class ShowcaseLayout extends React.Component {
  constructor(props) {
    ...
    // add the line below
    this.onResize = this.onResize.bind(this);
  }

  ...

  // add the method
  onResize(layout, oldLayoutItem, layoutItem, placeholder) {
    // `oldLayoutItem` contains the state of the item before the resize.
    // You can modify `layoutItem` to enforce constraints.
    const allowableW = this.props.cols[this.state.currentBreakpoint] - oldLayoutItem.x
    if (layoutItem.w <= 4) {
      layoutItem.w = 4;
      placeholder.w = 4;
    } else if (layoutItem.w <= 6) {
      layoutItem.w = allowableW < 6 ? 4 : 6;
      placeholder.w = allowableW < 6 ? 4 : 6;
    } else {
      layoutItem.w = allowableW < 12 ? 6 : 12;
      placeholder.w = allowableW < 12 ? 6 : 12;
    }
  }

  render() {
    return (
      <div>
        ...
        <ResponsiveReactGridLayout
          ...
          {/* bind method to component */}
          onResize={this.onResize}
        >
          {this.generateDOM()}
        </ResponsiveReactGridLayout>
      </div>
    );
  }
}

ShowcaseLayout.propTypes = {
  onLayoutChange: PropTypes.func.isRequired
};

ShowcaseLayout.defaultProps = {
  ...
  // ensure your breakpoints have a minimum of 4 columns
  cols: { lg: 12, md: 10, sm: 6, xs: 4, xxs: 4 },
};

function generateLayout() {
  return _.map(_.range(0, 25), function (item, i) {
    var y = Math.ceil(Math.random() * 4) + 1;
    return {
      x: (_.random(0, 5) * 2) % 12,
      y: Math.floor(i / 6) * y,
      // set item's default width to 4
      w: 4,
      h: y,
      i: i.toString(),
      static: Math.random() < 0.05
    };
  });
}

演示

票数 1
EN

Stack Overflow用户

发布于 2021-08-12 09:47:37

我对react-grid-layout.不太了解

但是,您可以通过简单地更改cols属性ShowcaseLayout.defaultProps来完成这一任务,如下所示。

代码语言:javascript
复制
ShowcaseLayout.defaultProps = {
    className: "layout",
    rowHeight: 30,
    onLayoutChange: function() {},
    cols: { lg: 12, md: 12, sm: 6, xs: 4, xxs: 4 },
    initialLayout: generateLayout()
};

更新沙箱

票数 0
EN

Stack Overflow用户

发布于 2021-08-12 14:41:53

是的,使用反应网格布局当然可以做到这一点。在标记为“无褐化用法/Webpack”的文档部分中,它们有以下代码片段:

代码语言:javascript
复制
import { Responsive as ResponsiveGridLayout } from 'react-grid-layout';

class MyResponsiveGrid extends React.Component {
  render() {
    // {lg: layout1, md: layout2, ...}
    const layouts = getLayoutsFromSomewhere();
    return (
      <ResponsiveGridLayout className="layout" layouts={layouts}
        breakpoints={{lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0}}
        cols={{lg: 12, md: 10, sm: 6, xs: 4, xxs: 2}}>
        <div key="1">1</div>
        <div key="2">2</div>
        <div key="3">3</div>
      </ResponsiveGridLayout>
    )
  }
}

您可以任意修改断点,这表明屏幕的屏幕/视口宽度将考虑新的大小(例如,lgmdsm,等等)。

定义breakpoints之后,使用cols属性定义希望每个容器位于不同断点的列数。如果您只想要您提到的三个大小-1全宽(12 Cols)、5网格(6 Cols)和⅓网格(4 cols),那么cols属性如下所示:

代码语言:javascript
复制
cols={{lg: 12, md: 6, sm: 6, xs: 4, xxs: 4}}

使用这些重新定义的值,该网格中的元素将在lg视图上为全宽度,在mdsm视图上为5-网格,在xsxxs视图上为⅓网格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68668120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档