所以我已经创建了一个网格布局,在桌面上,我希望按钮在同一行对齐,但是堆叠在搜索栏在一行,其余行在它下面的一行,左侧留出一些空间,然后对于移动设备,FilterButton堆叠在彼此的顶部.我有这么多不同的组合,但我不知道我错过了什么.到目前为止,我让它在桌面上看起来很正确.

以下是Sandbox : https://codesandbox.io/s/responsive-grid-u5uuud?file=/src/Responsive.jsx

到目前为止,我有这样的 idea :

<Grid item lg={12} sm={12} xs={12} sx={{ mt: 2 }}>
            <Grid container spacing={2} height="100%">
              <Grid item lg={6} sm={6} xs={6} display="flex" alignItems="center" justifyContent="start">
                <Typography fontSize={"20px"}>Applications</Typography>
              </Grid>
              <Grid item lg={6} sm={6} xs={6} display="flex" alignItems="center" justifyContent="end">
                <Button sx={appStyle.newAppButton}>+ New Application</Button>
              </Grid>
            </Grid>
          </Grid>
          <Grid item lg={12} sm={12} xs={12} >
            <Grid container spacing={0} height="100%">
              <Grid item lg={3} sm={12} xs={12} display="flex" alignItems="center" justifyContent="start">
                <TextField
                  type="search"
                  variant="outlined"
                  margin="normal"
                  fullWidth
                  InputProps={{
                    startAdornment: (
                      <InputAdornment position="start">
                        <SearchIcon />
                      </InputAdornment>
                    ),
                  }}
                />
              </Grid>
              <Grid item lg={6} sm={0} xs={0} /> {/* empty column */}
              <Grid item lg={2} sm={9.9} xs={12} display="flex" alignItems="center" justifyContent="end">
                <FilterButton label="Product" options={productOptions} />
                <FilterButton label="Application Status" options={applicationStatusOptions} />
                <FilterButton label="Ticket Status" options={ticketStatusOptions} />
              </Grid>
              <Grid item lg={1} sm={1} xs={1} display="flex" alignItems="right" justifyContent="end">
                <Button style={{ fontSize: "14px", width: "150px", whiteSpace: "nowrap" }}>Clear All Filters</Button>
              </Grid>
            </Grid>
          </Grid>

Here's what it should look like for tablet: enter image description here

以下是手机应该是什么样子的:

enter image description here

推荐答案

FilterButtons包在Grid内,并根据屏幕宽度改变flex-direction.类似地,将FilterButtonsClear All Filter按钮包装在一个Grid下,并更改它的弯曲方向.

Example -

 * Styles for filterButton Grid
 */
const StyledFilterButtonGrid = styled(Grid)`
  display: flex;
  min-width: fit-content;
  max-width: 100%;
  justify-content: flex-end;
  flex-direction: column;
  align-items: flex-start;
  gap: 1em;
  padding: 0px;
  & > * {
    background-color: white;
  }

  /* For Desktop screen */
  @media screen and (min-width: 1024px) {
    flex-direction: row;
  }
`;

/** Styles for FilterButtons and Clear All Button Grid */
const StyledFilters = styled(Grid)`
  width: 100%;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  margin-block-start: 0.5em;

  /* Small Mobile Screen */
  @media (max-width: 400px) {
    flex-direction: column;
    align-items: start;
    gap: 1em;
  }
`;

你可以在这里找到Sandbox 代码

Edit Responsive Grid  (forked)

Demo Screenshots

Mobile Screen

enter image description here

Desktop Screen

enter image description here

Smaller Mobile Screen

enter image description here

--更新

为了在桌面模式下对齐搜索框和其他过滤器按钮,您可以为lg属性TextField GridSearchFilters Grid提供适当的值. 我已经更新了Sandbox 上的代码.

Updated Desktop Screen

enter image description here

Javascript相关问答推荐

如何访问react路由v6加载器函数中的查询参数/搜索参数

一次仅播放一个音频

将json数组项转换为js中的扁平

使用AJX发送表单后,$_Post看起来为空

setcallback是什么时候放到macrotask队列上的?

查找最长的子序列-无法重置数组

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

闭包是将值复制到内存的另一个位置吗?

查询参数未在我的Next.js应用路由接口中定义

如何在Bootstrap中减少网格系统中单个div的宽度

使用jQuery find()获取元素的属性

是否可以将异步调用与useState(UnctionName)一起使用

FileReader()不能处理Firefox和GiB文件

使用RxJS from Event和@ViewChild vs KeyUp事件和RxJS主题更改输入字段值

使用API调用的VUE 3键盘输入同步问题

ComponentWillReceiveProps仍在React 18.2.0中工作

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?

固定动态、self 调整的优先级队列

需要从对象生成列表

如何在preLoad()中自定义p5.js默认加载动画?