html - 使用位置 : relative inside a flex container

标签 html css flexbox css-position

我正在预览帖子,例如它的文本和图像作为带有一些过滤器的背景。

问题是我想让整个 div 不是 1300px,而是只有 650px

但是,这样我将无法使用 display: flex 并且不会让带有 img 的 div 与带有文本的 div 具有相同的高度。

有没有可能只用css(不用js)解决这个问题的方法?

这是代码:http://codepen.io/anon/pen/RGwOgN?editors=1111

.post {
  width: 650px;
  padding: 25px 25px;
  z-index: 10;
  position: relative;
  color: white;
}
.flex-row {
  display: flex;
  width: 1300px; /* here is a problem */
}
.back-img {
  width: 650px;
  background-size: cover;
  position: relative;
  z-index: 0;
  left: -650px;
  filter: blur(3px);
  -webkit-filter: blur(3px);
  -moz-filter: blur(3px);
  -o-filter: blur(3px);
  -ms-filter: blur(3px);
  filter: url(#blur);
  overflow: hidden;
}
<div class="flex-row">
  <div class="post">
    <h1>Lorem ipsum</h1>
    <h2>text here</h2>
    <p class="lead">text hete</p>
  </div>
  <div class="back-img" style="background-image: linear-gradient(
      rgba(0, 0, 0, 0.3),
      rgba(0, 0, 0, 0.3)
    ),url(http://unsplash.com/photos/g-AklIvI1aI/download)">
    <div></div>
  </div>
</div>

如您所见,它工作正常,但前提是父元素 (flex-row) 设置为 size*2,因为另一种方式会自动减小子元素的大小。

最佳答案

相对定位使元素保持正常流动。这意味着在你定位它们之后,它们原来的位置仍然占据着空间。

绝对定位从正常流中移除元素。这些元素不占用空间,因此可以在不影响周围布局的情况下对齐它们。

这应该适合你:

.flex-row {
  display: flex;
  width: 650px;                       /* 1 */
  position: relative;                 /* 2 */
}
.post {
  width: 100%;
  padding: 25px 25px;
  z-index: 10;
  color: white;
}
.back-img {
  position: absolute;                 /* 3 */
  height: 100%;
  width: 100%;
  background-size: cover;
  z-index: 0;
  filter: blur(3px);
  -webkit-filter: blur(3px);
  -moz-filter: blur(3px);
  -o-filter: blur(3px);
  -ms-filter: blur(3px);
  filter: url(#blur);
  overflow: hidden;
}
<div class="flex-row">
  <div class="post">
    <h1>Lorem ipsum dolor</h1>
    <h2>Lorem ipsum dolor sit amet, cu melius feugiat delenit mei. Sea cu tale etiam definitiones. An pro scribentur omittantur, ei sea utinam hendrerit. Has ad dico illud fierent. Vis tale modus ridens te.

Vix viris zril forensibus eu, dolor expetendis dissentiunt duo in. Vis id ludus theophrastus. Debitis tibique necessitatibus quo ea. At movet bonorum intellegat eos. Nec ne ubique erroribus. Rebum accusata est ad.</h2>
    <p class="lead">{{post.summary}}</p>
  </div>
  <div class="back-img" style="background-image: linear-gradient(
      rgba(0, 0, 0, 0.3),
      rgba(0, 0, 0, 0.3)
    ),url(http://unsplash.com/photos/g-AklIvI1aI/download)">
    <div></div>
  </div>
</div>

http://codepen.io/anon/pen/XjWQxo

注意事项:

  1. 主容器宽度从 1300 像素更改为 650 像素
  2. make primary container the bounding box (nearest positioned ancestor) for absolute positioning of children
  3. 图片被流出并占据了父div的全部宽度和高度

关于html - 使用位置 : relative inside a flex container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306191/

相关文章:

html - 如何让 Flexbox (flex-grow) 在调整大小时考虑内容?

css - 如何在 2 个 float div 之间居中放置一个 div

javascript - 通过正文中的 JS 在 header 中插入 &lt;script&gt;codehere&lt;/script&gt; ?

html - 前导点的 CSS 样式

css - 尝试改造按钮以打开模态窗口

javascript - Style.width 和 left 不起作用

html - 如何将 MDL 上的网格间距调整为基础或 Bootstrap 的网格间距?

html - 具有奇数个元素和固定边距的 flex 网格

css - 垂直对齐的 flexbox 元素

javascript - 按钮在 Firefox 中无法正确显示