【问题标题】:Creating a responsive layout with flexbox使用 flexbox 创建响应式布局
【发布时间】:2022-01-12 01:41:49
【问题描述】:

我有这个 div,里面有一些按钮:

我想让它具有响应性,所以在特定的屏幕尺寸下它必须看起来像这样:

但在某些时候,它看起来像这样:

或者像这样:

我不想这样。

大多数时候我希望它看起来像第一张图片,当视口宽度小于 500px 时,它应该看起来像第二张图片。

代码如下:

#settings-content {
    width: 100%;
    min-height: 11rem;
    border: 1px solid black;
    border-radius: 25px;
    margin-left: 1.5rem;
    text-align: center;
    box-sizing: content-box;
}

.settings-title {
    display: inline-block;
    border: 1px solid black;
    border-radius: 1.5rem;
    height: 2.5rem;
    line-height: 2.1rem;
    width: 95%;
    text-align: center;
    margin: 1rem 0 2rem 0;
}

.settings-buttons, .languages-content {
    border: 1px solid black;
    width: 95%;
    text-align: center;
    margin: 0 auto;
    border-radius: 1.5rem;
    margin-bottom: 1rem;
}

.settings-list {
    display: flex;
    flex-wrap: wrap;
    margin: 1rem 0;
    padding-left: 0;
    column-gap: 20px;
    justify-content: center;
}

.settings-item {
  border: 1px solid #000;
  flex: 1;
  max-width: 150px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.settings-item::before {
  content: "";
  display: inline-block;
  padding-top: 100%;
}

.languages-list {
    height: 9rem;
    display: flex;
    justify-content: center;
    align-content: center;
    flex-wrap: wrap;
    margin: 0;
}

.languages-item {
    margin: 0 1rem;
}

@media (max-width: 500px)
{
    .settings-item {
        max-width: 100px;
        flex: 1 50%;
    }
}
<div id="settings-content">
            <div class="settings-buttons">
                <ul class="settings-list">
                    <li class="settings-item">Music</li>
                    <li class="settings-item">Sound</li>
                    <li class="settings-item">Info</li>
                    <li class="settings-item">Tutorials</li>
                </ul>
            </div>
</div>

我怎样才能达到我想要的结果?我是 Flexbox 的初学者,我想深入解释一下正在发生的事情。 :)

为什么我的实际代码不起作用?它可以工作,但对于某些分辨率,我得到了第 3 和第 4 布局,我不希望这样。

谢谢:)

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    移除flex: 1;,以百分比设置项目宽度,然后在小屏幕上将其加倍。

    替代方案:您可以使用具有flex-basis: 100% 的类在 HTML 中添加一个额外的元素。这是一篇文章about wrapping in element with flex

    修改代码:

    #settings-content {
        width: 100%;
        min-height: 11rem;
        border: 1px solid black;
        border-radius: 25px;
        margin-left: 1.5rem;
        text-align: center;
        box-sizing: content-box;
    }
    
    .settings-title {
        display: inline-block;
        border: 1px solid black;
        border-radius: 1.5rem;
        height: 2.5rem;
        line-height: 2.1rem;
        width: 95%;
        text-align: center;
        margin: 1rem 0 2rem 0;
    }
    
    .settings-buttons, .languages-content {
        border: 1px solid black;
        width: 95%;
        text-align: center;
        margin: 0 auto;
        border-radius: 1.5rem;
        margin-bottom: 1rem;
    }
    
    .settings-list {
        display: flex;
        flex-wrap: wrap;
        margin: 1rem 0;
        padding-left: 0;
        column-gap: 20px;
        justify-content: center;
    }
    
    .settings-item {
      border: 1px solid #000;
      width: 20%;
      max-width: 150px;
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    
    .settings-item::before {
      content: "";
      display: inline-block;
      padding-top: 100%;
    }
    
    .languages-list {
        height: 9rem;
        display: flex;
        justify-content: center;
        align-content: center;
        flex-wrap: wrap;
        margin: 0;
    }
    
    .languages-item {
        margin: 0 1rem;
    }
    
    @media (max-width: 500px)
    {
       .settings-item {
            width: 40%;
      }
    
    
    }
    <div id="settings-content">
                <div class="settings-buttons">
                    <ul class="settings-list">
                        <li class="settings-item">Music</li>
                        <li class="settings-item">Sound</li>
                        <li class="settings-item">Info</li>
                        <li class="settings-item">Tutorials</li>
                    </ul>
                </div>
    </div>

    【讨论】:

    • 在 400 像素处,圆圈开始被压扁。我该如何解决?
    • 我已经修改了我的答案。要保持圆形形状,请删除 flex-basis: 100%;完全,只在小屏幕上使用增加的宽度。另一种方法是在 HTML 代码中使用额外的元素。
    猜你喜欢
    • 2019-08-24
    • 2021-06-12
    • 1970-01-01
    • 2019-09-15
    • 2018-03-19
    • 2019-03-12
    • 2018-06-22
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多