如何使用 React 根据屏幕尺寸更改布局

rag*_*nny 5 javascript responsive-design reactjs

我希望能够在达到给定的屏幕尺寸时更改布局,这样我就可以更改网站在移动视图上的外观。

目前我的反应站点使用水平滚动包水平滚动

我尝试使用反应响应包来实现此功能,该包允许我运行媒体查询,但两个包之间似乎存在冲突。

因此,我希望我的网站在全屏(桌面和表格)时水平滚动,然后在移动视图中从上滚动到底部。我该怎么做?

class Home extends React.Component{
constructor(props) {
    super(props);
    this.state = {};
}

componentWillMount() {
    this.setState({
        home: projectsData.filter( p => p.name === "homepage" ),
        galleryImages: [
            ImgOne,
            ImgTwo,
            ImgThree,
            ImgFour,
            ImgFive,
            ImgSix
        ]
    });
}

render(){

    const test = { color: "black", position: "fixed" }
    return(
        <div className="row">
            <Responsive minWidth={992}>
                <HorizontalScroll reverseScroll={true}>
                    <Header />
                    <SplashScreen />
                    <CopyText />
                </HorizontalScroll>
            </Responsive>
        </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:我知道水平滚动包不支持使用百分比调整大小。

Mow*_*zer 5

您可以使用 Material UI<Hidden>组件。 在 Material Ui 版本 5 中已弃用。sx道具替换了它

import React from 'react';
import PropTypes from 'prop-types';
import compose from 'recompose/compose';
import { withStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Hidden from '@material-ui/core/Hidden';
import withWidth from '@material-ui/core/withWidth';
import Typography from '@material-ui/core/Typography';

const styles = theme => ({
  root: {
    flexGrow: 1,
  },
  container: {
    display: 'flex',
  },
  paper: {
    padding: theme.spacing.unit * 2,
    textAlign: 'center',
    color: theme.palette.text.secondary,
    flex: '1 0 auto',
    margin: theme.spacing.unit,
  },
});

function BreakpointUp(props) {
  const { classes } = props;

  return (
    <div className={classes.root}>
      <Typography variant="subtitle1">Current width: {props.width}</Typography>
      <div className={classes.container}>
        <Hidden xsUp>
          <Paper className={classes.paper}>xsUp</Paper>
        </Hidden>
        <Hidden smUp>
          <Paper className={classes.paper}>smUp</Paper>
        </Hidden>
        <Hidden mdUp>
          <Paper className={classes.paper}>mdUp</Paper>
        </Hidden>
        <Hidden lgUp>
          <Paper className={classes.paper}>lgUp</Paper>
        </Hidden>
        <Hidden xlUp>
          <Paper className={classes.paper}>xlUp</Paper>
        </Hidden>
      </div>
    </div>
  );
}

BreakpointUp.propTypes = {
  classes: PropTypes.object.isRequired,
  width: PropTypes.string.isRequired,
};

export default compose(
  withStyles(styles),
  withWidth(),
)(BreakpointUp);
Run Code Online (Sandbox Code Playgroud)


Mr *_*ger 0

我建议研究一下媒体查询。是一个简短的视频,向您展示基础知识。

您可以设置一个阈值,在这些条件下触发单独的样式。当您希望 UI 在不同尺寸下执行不同的操作时,它会非常有用。

@media only screen 
and (*Your threshold criteria goes here* EXAMPLE:  max-width : 1000px) {   
  //css goes here with whatever css you want to fire at this threshold
}
Run Code Online (Sandbox Code Playgroud)

  • 这将应用新的 CSS,但如果他想要一个完全不同的 DOM,这不会让他走得太远。 (3认同)