【问题标题】:How do I set width for a flex item with horizontal scroll?如何为具有水平滚动的弹性项目设置宽度?
【发布时间】:2021-09-28 14:56:38
【问题描述】:

我正在使用display: flex 在桌面视图上进行 3 列布局。

但是从540px 及以下开始,我仍然希望布局为 3 列,但它应该具有水平滚动。我能够通过white-space: nowrap; overflow-x: auto; 实现水平滚动。我的问题是我发现每个弹性项目或列都太宽了。

我想在移动视图上显示 1 或产品,但同时水平滚动以滚动第三个产品。

您知道如何为每个flex-itemcolumn 设置宽度吗?通过给它一个 150px 或任何取决于你的想法。非常感谢您的帮助。谢谢。

.blog-articles-list {
  display: -ms-flexbox;
  display: flex;
  -ms-flex-direction: row;
  flex-direction: row;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  overflow-x: unset;
  white-space: normal;
}

.blog-articles-list .flex-item {
  flex-basis: 33.33%;
}

@media only screen and (max-width: 540px) {
  .blog-articles-list {
    white-space: nowrap;
    overflow-x: auto;
    -ms-flex-wrap: nowrap;
    flex-wrap: nowrap;
  }
}
<div class="col-12">
  <div class="blog-articles-list">
    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">campaigns</div> <a class="header-5 semi-bold" href="/blogs/articles/join-the-movement">Join the movement</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>

    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">campaigns</div> <a class="header-5 semi-bold" href="/blogs/articles/join-the-movement">Join the movement</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>
    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">guides</div> <a class="header-5 semi-bold" href="/blogs/articles/how-to-lighten-pigmentation-naturally">How to lighten pigmentation naturally?</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

  • 你可以用 column 代替 flex 并给它一个明确的宽度
  • nowrap 将防止断行,从而只生成一行。是这样吗?只有overflow-x:auto才能实现水平滚动
  • @SalilRajkarnikar 你是说我应该给它一个 flex-direction 列还是删除display: flex 然后给它的孩子一个display inline

标签: javascript html css flexbox


【解决方案1】:

不确定您的预期,它不应在 540 像素以下换行并保持 3col 并带有滚动条。

flex-basis:33.33% 会缩小它们并且不够,你需要设置一个最小宽度或重置 flex-shrink。

最小宽度和最少代码的示例。

但是,请澄清预期低于 540 像素和高于 541 像素的行为。

.blog-articles-list {
  display: flex;
  flex-wrap: wrap;
  overflow:auto;/* ?? here or at 540px */
}

.blog-articles-list .flex-item {
  flex-basis: 33.33%;

}

@media only screen and (max-width: 540px) {
  .blog-articles-list {
    flex-wrap: nowrap;
  }
.blog-articles-list .flex-item {
  min-width:50%
}
}
<div class="col-12">
  <div class="blog-articles-list">
    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">campaigns</div> <a class="header-5 semi-bold" href="/blogs/articles/join-the-movement">Join the movement</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>
    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">events</div> <a class="header-5 semi-bold" href="/blogs/articles/should-you-wash-your-face-with-cold-water">Should you wash your face with cold water?</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span>
        </p>
      </div>
    </div>
    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">guides</div> <a class="header-5 semi-bold" href="/blogs/articles/how-to-lighten-pigmentation-naturally">How to lighten pigmentation naturally?</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>
  </div>
</div>

【讨论】:

  • 你好。感谢您的答复。我希望在移动视图上显示 1 或 2 个产品,但同时给它一个水平滚动以滚动第 3 个产品。
  • 好的,如果我理解你的想法,那么 col 至少应该是 270px(或 50%)左右的宽度? sn-p 更新
【解决方案2】:

只需添加flex-shrink:0flex-basis:100%

.blog-articles-list {
  display: flex;
  overflow:auto;
}

.blog-articles-list .flex-item {
  flex-basis: 33.33%;
}

@media only screen and (max-width: 540px) {
  .blog-articles-list .flex-item {
    flex-basis: 100%;
    flex-shrink: 0;
  }
}
<div class="col-12">
  <div class="blog-articles-list">
    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">campaigns</div> <a class="header-5 semi-bold" href="/blogs/articles/join-the-movement">Join the movement</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>

    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">campaigns</div> <a class="header-5 semi-bold" href="/blogs/articles/join-the-movement">Join the movement</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>
    <div class="blog-article-info flex-item mb-40">
      <img class="image" src="//website/placeholder-join-the-movement-img_480x.jpg?v=1626159716">
      <div class="blog-article-detail">
        <div class="article-tag uppercase header-6 semi-bold color-green mb-5">guides</div> <a class="header-5 semi-bold" href="/blogs/articles/how-to-lighten-pigmentation-naturally">How to lighten pigmentation naturally?</a>
        <p class="rte color-black"><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p>
      </div>
    </div>
  </div>
</div>

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多