当前位置: 首页 > 面试题库 >

Flexbox宽度随内容而变化,应为固定宽度

余歌者
2023-03-14
问题内容

我正在制作一个移动响应页面,并且是第一次使用flexbox。

我的问题是,当内容div中有很多信息时,div会很宽地超出页面宽度。

我已经尝试过使用最大宽度样式,但是这消除了网站的响应能力。

CSS

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  text-align: center;
}
body .header {
  width: 100%;
  height: 182px;
  background: white;
}
body .holygrail-body {
  flex: 1 0 auto;
  display: flex;
  width:1000px;
  margin-right:auto;
  margin-left:auto;
}
body .holygrail-body .content {
  flex: 1 0 auto;
  background: lightgreen;
  overflow-y: auto;
}
body .holygrail-body .nav {
  width: 240px;
  list-style: none;
  text-align: left;
  order: -1;

  margin: 0;
}
body .holygrail-body .aside {
  width: 100px;
  background: orange;
}
body .footer {
  width: 100%;
  height: 60px;

}
.sidenav {
    height: 100%;
    width: 0;
    position: fixed;
    z-index: 1;
    top: 0;
    left: 0;
    background-color: #fff;
    overflow-x: hidden;
    transition: 0.5s;
    padding-top: 60px;
}

.sidenav a {
    padding: 8px 8px 8px 32px;
    text-decoration: none;
    font-size: 25px;
    color: #818181;
    display: block;
    transition: 0.3s;
}

.sidenav a:hover {
    color: #f1f1f1;
}

.sidenav .closebtn {
    position: absolute;
    top: 0;
    right: 25px;
    font-size: 36px;
    margin-left: 50px;
}
  .mobile-header{display: none;}
.hamburger{display: none;}
ul, ol {
    margin-top:10px;

}
.nav li {
    list-style: none outside none;
    line-height: 36px;
    margin-left:-15px;
}
.nav li a {
    color: #5f141f;
    text-decoration: none;
    text-shadow: 2px 1px #f6eaec;
    font-size: 18px;
    margin-left:-15px;
  }
  .sidenav li {
      list-style: none outside none;
      line-height: 36px;
      margin-left:-15px;
  }
  .sidenav li a {
      color: #5f141f;
      text-decoration: none;
      text-shadow: 2px 1px #f6eaec;
      font-size: 18px;
      margin-left:-15px;
    }
@media (max-width: 700px) {
  body .holygrail-body {
    flex-direction: column;
  }
  body .holygrail-body .nav, body .holygrail-body .aside {
    width: 100%;
  }
  .sidenav {padding-top: 15px;}
  .sidenav a {font-size: 18px;}
  .hamburger{display: inline;margin-left:-900px;}
  .nav{display: none;}
  .mobile-header{display: inline;}
    .header{display: none;}
}

HTML

  <header class="header">
    <img src="header.jpg" style="max-width:1848px; margin-right:auto;margin-left:auto;" alt="">
  </header>
  <header class="mobile-header">
    <img src="header.jpg" style="width:100%;max-width:1848px; margin-right:auto;margin-left:auto;" alt="">
  </header>
<div class="holygrail-body">
  <span class="hamburger" style="font-size:30px;cursor:pointer" onclick="openNav()">&#9776; Menu</span>
  <div id="mySidenav" class="sidenav">
    <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">New Items</a></li>
      <li><a href="#">Information Page</a></li>
      <li><a href="#">Information Page</a></li>
      <li><a href="#">Information Page</a></li>
      <li><a href="#">Information Page</a></li>
      <li><a href="#">Information Page</a></li>
      <li><a href="#">Information Page</a></li>
      <li><a href="#">Information Page</a></li>
      <li><a href="#">Information Page</a></li>
    </ul>
  </div>
  <div class="content">

  <h1>Test</h1>

  </div>

  <ul class="nav">
    <li><a href="#">Home</a></li>
    <li><a href="#">New Items</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>
    <li><a href="#">Information Page</a></li>

  </ul>


</div>
<footer class="footer">©2017</footer>

问题答案:

您需要做的2件事:

  • flex-shrinkflex: 1 0 auto从更改01flex: 1 1 auto),以便content允许元素收缩

  • 由于单词很长,还需要添加word-wrap: break-word以在单词内插入换行符,以防止文本溢出

请注意,word-wrap已重命名为overflow-wrap,尽管并非所有浏览器都支持新名称,所以如果您要使用它,我现在也将保留旧名称。

堆栈片段

function openNav() {

    document.getElementById("mySidenav").style.width = "250px";

}



function closeNav() {

    document.getElementById("mySidenav").style.width = "0";

}


      body {

  display: flex;

  flex-direction: column;

  min-height: 100vh;

  text-align: center;

}

body .header {

  width: 100%;

  height: 182px;

  background: white;

}

body .holygrail-body {

  flex: 1 0 auto;

  display: flex;

  width:1000px;

  margin-right:auto;

  margin-left:auto;

}

body .holygrail-body .content {

  flex: 1 1 auto;                            /*  changed  */

  background: lightgreen;

  overflow-y: auto;

  word-wrap: break-word;                     /*  added  */

}

body .holygrail-body .nav {

  width: 240px;

  list-style: none;

  text-align: left;

  order: -1;



  margin: 0;

}

body .holygrail-body .aside {

  width: 100px;

  background: orange;

}

body .footer {

  width: 100%;

  height: 60px;



}

.sidenav {

    height: 100%;

    width: 0;

    position: fixed;

    z-index: 1;

    top: 0;

    left: 0;

    background-color: #fff;

    overflow-x: hidden;

    transition: 0.5s;

    padding-top: 60px;

}



.sidenav a {

    padding: 8px 8px 8px 32px;

    text-decoration: none;

    font-size: 25px;

    color: #818181;

    display: block;

    transition: 0.3s;

}



.sidenav a:hover {

    color: #f1f1f1;

}



.sidenav .closebtn {

    position: absolute;

    top: 0;

    right: 25px;

    font-size: 36px;

    margin-left: 50px;

}

  .mobile-header{display: none;}

.hamburger{display: none;}

ul, ol {

    margin-top:10px;



}

.nav li {

    list-style: none outside none;

    line-height: 36px;

    margin-left:-15px;

}

.nav li a {

    color: #5f141f;

    text-decoration: none;

    text-shadow: 2px 1px #f6eaec;

    font-size: 18px;

    margin-left:-15px;

  }

  .sidenav li {

      list-style: none outside none;

      line-height: 36px;

      margin-left:-15px;

  }

  .sidenav li a {

      color: #5f141f;

      text-decoration: none;

      text-shadow: 2px 1px #f6eaec;

      font-size: 18px;

      margin-left:-15px;

    }

@media (max-width: 700px) {

  body .holygrail-body {

    flex-direction: column;

  }

  body .holygrail-body .nav, body .holygrail-body .aside {

    width: 100%;

  }

  .sidenav {padding-top: 15px;}

  .sidenav a {font-size: 18px;}

  .hamburger{display: inline;margin-left:-900px;}

  .nav{display: none;}

  .mobile-header{display: inline;}

    .header{display: none;}

}


<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>

  <header class="header">

    <img src="header.jpg" style="max-width:1848px; margin-right:auto;margin-left:auto;" alt="">

  </header>

  <header class="mobile-header">

    <img src="header.jpg" style="width:100%;max-width:1848px; margin-right:auto;margin-left:auto;" alt="">

  </header>

<div class="holygrail-body">

  <span class="hamburger" style="font-size:30px;cursor:pointer" onclick="openNav()">&#9776; Menu</span>

  <div id="mySidenav" class="sidenav">

    <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>

    <ul>

      <li><a href="#">Home</a></li>

      <li><a href="#">New Items</a></li>

      <li><a href="#">Information Page</a></li>

      <li><a href="#">Information Page</a></li>

      <li><a href="#">Information Page</a></li>

      <li><a href="#">Information Page</a></li>

      <li><a href="#">Information Page</a></li>

      <li><a href="#">Information Page</a></li>

      <li><a href="#">Information Page</a></li>

      <li><a href="#">Information Page</a></li>

    </ul>

  </div>

  <div class="content">



  <h1>Tessssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssst</h1>



  </div>



  <ul class="nav">

    <li><a href="#">Home</a></li>

    <li><a href="#">New Items</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>

    <li><a href="#">Information Page</a></li>



  </ul>





</div>

<footer class="footer">©2017</footer>


 类似资料:
  • 问题内容: 我是Java Swing的新手,对下一个代码感到困惑。 我的目标是制作带有 2个JTextPane的 垂直可滚动面板 。具有父面板固定宽度70%的第一个JTextPane和具有固定宽度30%的第二个JTextPane。因为这两个JTextPane具有固定的宽度,所以它们只能在垂直方向上扩展更多文本。 我使用此解决方案,因为我只想为此2个JTextPane使用一个滚动条。 我的初始化代码

  • 我是Java Swing的新手,我对下一个代码感到困惑。 null

  • 问题内容: 我有两个div容器。 虽然其中一个需要为特定宽度,但我需要对其进行调整,以便另一个div占用其余空间。有什么办法可以做到吗? 问题答案: HTML: CSS: 您也可以使用这样做,这通常是一种更好的方法:如何将输入元素与其标签放在同一行?

  • 将父flex容器宽度调整为子flex容器内容宽度时出现问题。 使用Bulma,我有以下HTML结构 但它最终应用于所有子flex容器,如您所见: http://codepen.io/anon/pen/mWqRxW 如何解决这个问题,并使父flex容器适合子flex容器的宽度(在本例中是输入的宽度)?

  • 我这里有这个代码: 如您所见,第二列和第三列前面有一些空白。 有没有办法摆脱这个问题?

  • 问题内容: 我在CSS的width属性上遇到了一些麻烦。我在div中有一些段落。我想使段落的宽度等于它们的内容,以使它们的绿色背景看起来像文本的标签。相反,我得到的是这些段落继承了div父节点的宽度,该宽度更宽。 问题答案: 默认情况下,标签是元素,这意味着它们占据了parent的100%。 您可以使用以下方法更改其显示属性: 但这使元素并排。 要使每个元素保持独立行,可以使用: (如果您使用fl