javascript - Flexbox 布局,在桌面上有两列,在移动设备上有一列

标签 javascript css reactjs flexbox

带有flexbox问题的简单布局:

桌面布局要求

  • 两个响应列
  • 第 1 列,占宽度的 30%
  • 第 2 列,占宽度的 70%

移动布局要求

  • 单一响应列
  • 第 1 行,宽度为 100%(这是桌面上的第 1 列)
  • 第 2 行,宽度为 100%(这是桌面上的第 2 列)

到目前为止我得到了什么:

当我切换到mobile(例如通过按钮点击下面的片段)模式时,我在 flex 容器上设置了 flex-direction: column。它似乎工作。

#flexContainer {
  display: flex;
}

#flexItem1 {
  background-color: lightblue;
  flex: 30%;
}

#flexItem2 {
  flex: 70%;
  background-color: lightgreen;
}

注意:

这个问题是关于为了从桌面布局转到移动布局需要更改哪些 CSS flexbox 属性。这与如何检测窗口大小或如何设置媒体查询无关。如果我写的方式不是很清楚,我很抱歉。


问题

是否有更简洁的方法来执行此操作? 在移动模式下,我是否需要将 flexItemsflex 属性设置为 100% 还是可以将它们保留为 30% 70% 因为当 flex-direction 设置为 column 时它们似乎无关紧要?

function App() {
 
  const [mobile,setMobile] = React.useState(false);
    
  return(
  <React.Fragment>
    <div id="flexContainer" style={mobile ? {flexDirection: 'column'} : null}>
      <div id="flexItem1">Item 1</div>
      <div id="flexItem2">Item 2</div>
    </div>
    <button onClick={()=>setMobile(prevState=>!prevState)}>Toogle</button>
  </React.Fragment>
  );
}


ReactDOM.render(<App/>, document.getElementById('root'));
#flexContainer {
  display: flex;
}

#flexItem1 {
  background-color: lightblue;
  flex: 30%;
}

#flexItem2 {
  flex: 70%;
  background-color: lightgreen;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

最佳答案

由于您没有从移动设备到桌面设备的任何奇怪的列切换,我要做的是这个(我相信这是最干净的方式)

首先考虑移动设备(移动设备优先是最佳实践),然后对桌面版本使用媒体查询。基本上将您的容器设置为显示 block 并将其中两列的宽度设置为 100%。然后在桌面上,通过查询使您的容器灵活。

CSS:

#flexContainer {
  display: block;
  background-color: blue;
}

@media only screen and (min-width: 1024px) {
  #flexContainer {
    display: flex;
  }
}

或者像我在 SCSS 中那样做:

#flexContainer {
  display: block;
  background-color: blue;

     @media only screen and (min-width: 1024px) {
        display: flex;
     }
}

关于javascript - Flexbox 布局,在桌面上有两列,在移动设备上有一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56045114/

相关文章:

javascript - WebExtensions 是否有等同于 nsIBrowserSearchService 的工具?

javascript - 将 Jade Link 中的参数传递给 Node Controller

javascript - ReactJS - 如何在使用 xlsx 阅读时跳过 excel 中的空行

reactjs - 如何在 React 组件中测试 Redux 的 dispatch() 是否被调用(Jest + Enzyme)

javascript - JQuery 查找带有数据对象的元素

javascript - 如何在 TypeScript 应用程序中为 Jest 添加类型检查器?

css - 如何调整 CSS 单选按钮的大小并使文本保持在中间

facebook - 警告 : Each child in an array or iterator should have a unique "key" prop. 检查 `ListView` 的渲染方法

CSS 组合器不起作用 - 一个空格的差异?

css - 在 H2 内旋转元素