【问题标题】:FlexBox: How can i keep boxes fixed one below the otherFlexBox:我怎样才能让盒子固定在另一个下面
【发布时间】:2018-09-21 00:39:52
【问题描述】:

我正在尝试使用 FlexBox 创建一个页面,这样我就可以使主图像始终以顶部徽标和页面居中。并在左侧添加“偏离中心”文本。

我现在的问题是我无法让每个框(图像+文本)保持垂直位置,框浮动,并且根据我用来查看的内容(大屏幕、笔记本电脑),它们之间的空间不同。

我不是 FlexBox 专家,我可以这样做吗?

另外,我想在第三个框之后添加一个栏,100% 宽度...但它位于页面中间,框之间。

欢迎任何帮助,我会继续学习:)

  body {
  margin: 0;
}

.container {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  height: 100vh;
}

.top {
  border: 1px solid white;
  width: 50%;
  height: 10%;
  align-self: flex-start;
  text-align: center;
}

.inner-container {
  border: 1px solid white;
  width: 50%;
  height: 60%;
  display: flex;
}

.center {
  position: absolute;
  width: 50%;
    text-align: left;
    align-self: flex-end;
}

.off-center {
  position: absolute;
  vertical-align: bottom;
    text-transform: uppercase;
    padding-left: 10px;
    min-width: 200px;
    align-self: flex-end;
}

.center, .off-center {
  position: absolute;
}

.center img {width: 100%;}

.off-center h2 {font-size:12px; font-family: 'Open Sans', sans-serif; font-weight: 400;text-transform: uppercase; color:black; display: block!important;margin: 0px;}
.off-center p {font-size: 20px; font-family:'aileronbold', sans-serif; display: block!important;margin: 0px;text-transform: none;}

.row.subscriptionBar {display:flex; background-color: black; display: block; padding:20px;}
.subscriptionBar h2 {color:white;}
.firstPart {display: }

@media screen and (min-width: 769px) {
  .off-center {
    margin-left: 50%;
  }


@media screen and (max-width: 768px) {
  .off-center {
    margin-top: 105px;
  }
}
<div class="container">
  <div class="top"><img src="https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width="80px"></div>
  <div class="inner-container">
    <div class="center">
    	<img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt=""></div>
    <div class="off-center">
    	<h2 class="">ArtistName 1</h2>
		<p>509476ZclHtqXy</p></div>
  </div>
  <div class="inner-container">
    <div class="center">
    	<img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt=""></div>
    <div class="off-center">
    	<h2 class="">ArtistName 2</h2>
		<p>Title lala 1</p></div>
  </div>
  <div class="inner-container">
    <div class="center">
      <img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt=""></div>
    <div class="off-center">
      <h2 class="">ArtistName 3 444</h2>
    <p>Title 093830</p></div>
  </div>

</div>

【问题讨论】:

  • 您的代码看起来非常接近您想要实现的目标。你能解释一下实际问题是什么吗?
  • 好的,谢谢。问题: 1) 图像/框垂直移动,有时会越过顶部的徽标。我习惯于使用 Bootstrap 和 CSS,但使用 flexbox 我不知道如何设置边界。 2)我认为与上一个项目相同的问题,但我如何设置水平图像和垂直图像以保持相同的比例。检查附加在我的帖子上的示例/线框。目前,垂直图像与其他框重叠。 3)单杠:在页面中间,我要在第三个框之后。
  • 我在您的布局中看不到任何水平条。此外,您可能希望通过进一步分解问题来简化问题。也许将这个问题集中在一个问题上。一旦解决了这个问题,请关注新问题中的下一个问题。这将使问题更容易理解,对贡献者更有吸引力。
  • 我认为如果您将flex-direction: column; 添加到您的容器中,您的布局会容易得多。

标签: css html flexbox


【解决方案1】:

.wrapper {
  display: flex;  
  flex-flow: row wrap;
  font-weight: bold;
  text-align: center;
}

.wrapper > * {
  padding: 10px;
  flex: 1 100%;
}

header{
  background: tomato;
}

section{
  display: flex
}
.main {
  background: deepskyblue;
}

.main img{
  max-width: 100%;
}

.full-width {
  background: lightgreen;
}

.main    { order: 2; flex: 3 0px; }
.aside { flex: 1 auto; }
.aside-1 { order: 1; background: gold; width: 10%} 
.aside-2 { order: 3; background: hotpink; position: relative; width: 10%}
.aside-2 > span {
    position: absolute;
    bottom: 0;
    left: 0;
}
.vertical {
  width: 15%; /* Modify this value for different screen size*/
}
/* .full-width  { order: 4; } */
/*@media all and (min-width: 600px) {
  .aside { flex: 1 auto; }
}

@media all and (min-width: 800px) {
  .main    { flex: 3 0px; }
  .aside-1 { order: 1; } 
  .main    { order: 2; }
  .aside-2 { order: 3; }
  .footer  { order: 4; }
}*/
body {
  padding: 2em; 
}
<div class="wrapper">
    <header><img src="https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width="80px"></header>
    <section>
        <div class="main">
        <img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt="">
        </div>
        <aside class="aside aside-1"></aside>
        <aside class="aside aside-2"><span>Aside Right</span></aside>
    </section>
        <section>
       <div class="main">
          <img src="https://picsum.photos/200/300" alt="">
       </div>
       <aside class="aside aside-1 vertical"></aside>
       <aside class="aside aside-2 vertical"><span>Aside Right</span></aside>
   </section>
    <section>
     <div class="main">
          <img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt="">
        </div>
        <aside class="aside aside-1"></aside>
        <aside class="aside aside-2"><span>Aside Right</span></aside>
    </section>

   <section class="full-width">Full Width</section>
    <section>
        <div class="main">
        <img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt="">
        </div>
        <aside class="aside aside-1"></aside>
        <aside class="aside aside-2"><span>Aside Right</span></aside>
    </section>
</div>

我只是做一个简单的示例,因为不清楚您要查找的内容。如果这是您希望前进的方向,那么我可以提供进一步的帮助。

【讨论】:

  • 你太棒了,谢谢!这正是我所需要的。据我所知,我的主要问题之一是 flexbox 的设置,您向 flexbox 添加了订单,然后在每个部分中,您使用绝对定位来定位图像+文本,这非常有意义。我将处理媒体查询。我只有一个问题,因为我在这个答案中没有看到:如果我放置一个垂直方向的图像,将尝试使用 100% 的宽度。如果您看到附加的示例,水平图像和垂直图像之间的差异。目前在vertica时,拉伸图像以使用100%的宽度。
  • 问题:您的页面的动态程度如何?您将用于设置图像的比率点是多少?或者它将是完全静态的?如果您不希望图像使用 100% 宽度,则可以将其设置为 max-width: 100% 而不是 width:100%。如果您的页面将是静态的,那么您可以使用修改,但这并不理想,更像是一个临时修复来获得一个想法。如果它是动态的,那么还有其他方法可以处理它。告诉我!
  • 不确定你所说的动态与静态是什么意思......我不想要的是对垂直图像使用 100% 宽度......因为垂直方向的图像试图使用 100%宽度,它变得比水平的更大,因为优先保持 100% 的宽度,我不希望这样......垂直应该显示一个“较小”的宽度,居中......检查我的原始帖子与图像,有一个垂直的图像。我会尝试使用最大宽度,看看是否有帮助。谢谢!
  • 哦,我想我明白了...它将是完全静态的,它是一个临时网站,我可以通过代码管理更新。
  • 我忘了提,但我之前更新了代码,看看是不是你想要的
【解决方案2】:

你的弹性盒和绝对定位的组合发生了太多事情。以下是您的 sn-p 版本,其中大部分不必要的 css 已被注释掉(因此您可以确切地看到它是什么)以及一些新添加的内容。

除了删除一些绝对定位之外,最重要的更改是从 .container 中删除 flex-wrap 并添加 flex-direction: column 以及匹配 .center.off-center 的宽度,以便您可以使用 position: absolute.off-center 上(在这种情况下很好地使用它)以及与宽度相等的 margin-left 以确保它位于图像容器的右侧。

  body {
  margin: 0;
}

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  /*justify-content: center;
  flex-wrap: wrap;
  height: 100vh;*/
}

.top {
  border: 1px solid white;
  /*width: 50%;*/
  height: 10%;
  /*align-self: flex-start;*/
  text-align: center;
}

.inner-container {
  border: 1px solid white;
  /*width: 50%;*/
  height: 60%;
  display: flex;
  justify-content: space-around;
}

.center {
  /*position: absolute;*/
  width: 50%;
  min-width: 200px;
  text-align: left;
  /*align-self: flex-end;*/
}

.off-center {
  position: absolute;
  /*vertical-align: bottom;*/
  text-transform: uppercase;
  padding-left: 10px;
  width: 50%;
  min-width: 200px;
  align-self: flex-end;
  margin-left: 50%;
}


/*.center, .off-center {
  position: absolute;
}*/

.center img {
  width: 100%;
}

.off-center h2 {
  font-size: 12px;
  font-family: 'Open Sans', sans-serif;
  font-weight: 400;
  text-transform: uppercase;
  color: black;
  display: block!important;
  margin: 0px;
}

.off-center p {
  font-size: 20px;
  font-family: 'aileronbold', sans-serif;
  display: block!important;
  margin: 0px;
  text-transform: none;
}

.row.subscriptionBar {
  display: flex;
  background-color: black;
  display: block;
  padding: 20px;
}

.subscriptionBar h2 {
  color: white;
}

.firstPart {
  display:
}

/*@media screen and (min-width: 769px) {
  .off-center {
    margin-left: 50%;
  }
  @media screen and (max-width: 768px) {
    .off-center {
      margin-top: 105px;
    }
  }*/
<div class="container">
  <div class="top"><img src="https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width="80px"></div>
  <div class="inner-container">
    <div class="center">
      <img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt="">
    </div>
    <div class="off-center">
      <h2 class="">ArtistName 1</h2>
      <p>509476ZclHtqXy</p>
    </div>
  </div>
  <div class="inner-container">
    <div class="center">
      <img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt=""></div>
    <div class="off-center">
      <h2 class="">ArtistName 2</h2>
      <p>Title lala 1</p>
    </div>
  </div>
  <div class="inner-container">
    <div class="center">
      <img src="http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt=""></div>
    <div class="off-center">
      <h2 class="">ArtistName 3 444</h2>
      <p>Title 093830</p>
    </div>
  </div>

</div>

【讨论】:

  • 感谢您的回复。这对我不起作用,因为我仍然遇到浮动问题。我无法上传我的看法,但如果您的桌面较小,这些框会相互分离...
  • 一定有其他 css 或冲突库导致您的问题。答案 sn-p 中的 html 和 css 不会导致不同设备尺寸上的图像之间有任何分离(您可以将 sn-p 扩展到整页,然后在浏览器中测试各种设备宽度以查看我在说什么) .也就是说,您似乎在@KendraChu 很好地组合在一起的另一个答案中找到了您需要的东西。
  • 是的,@KendraChu 的回答很好。现在我只是在图像响应方面遇到了一些问题...如果我从.main img 中删除width:100% 我得到了我需要的东西,即保持图像的比例和比例(垂直图像不应使用与水平一)但如果我这样做,图像没有响应。
猜你喜欢
  • 2019-06-30
  • 1970-01-01
  • 2020-04-20
  • 2011-04-07
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多