将图像的一半放在较小容器内

时间:2016-12-01 02:49:07

标签: html css css3 flexbox

我试图将照片设置为50vw(页面宽度的一半),始终与屏幕左对齐,仅使用CSS - 不重构HTML。我希望flexbox的另一半保持在容器内的中心位置。

基本上,如果您的屏幕宽度为1600px,则Nick Cage应从左侧的0px开始并延伸至800px(中心),然后.hero-text应从800px开始并以1400px结束,因为它保持不变限制在1200px宽度的容器中。

我已经评论出一条我认为很关键的一条线,但我无法正确计算数学。无论分辨率如何,我只需要将图像偏移到屏幕的左边缘。



.container {
  width: 100%;
  border: 1px solid blue;
  height: 500px;
}
.inner {
  width: 1200px;
  height: 100%;
  margin: 0 auto;
  border: 1px solid red;
}
.hero {
  width: 100%;
  height: 100%;
  border: 1px solid green;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  text-align: center;
}
.hero > div {
  width: 50%;
}
.hero-image {
  width: 50vw;
  height: 100%;
  /* margin-left: calc((100vw - 1200px) * -1); */
  background: url('https://www.placecage.com/c/500/400');
  background-repeat: no-repeat;
  background-size: cover;
}

<div class="container">
  <div class="inner">
    <div class="hero">
      <div class="hero-image">
      </div>
      <div class="hero-text">Here is Nick Cage, everybody!
      </div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

https://jsfiddle.net/cqu6xf90/1/

1 个答案:

答案 0 :(得分:1)

无需使用任何计算。

使用亲戚和绝对定位来实现这一目标。 请参阅此处以获取更多信息https://css-tricks.com/absolute-positioning-inside-relative-positioning/

您可以定位任何子元素&#34;绝对&#34;和亲戚一起。

在这种情况下,将容器元素设置为position: relative; &安培;将英雄形象设置为position: absolute; left: 0;实际上将它放置在元素的左侧。

Full Css

.container {
  width: 100%;
  border: 1px solid blue;
  height: 500px;
/*  Relative Parent  */
  position: relative;
}

.inner {
  width: 1200px;
  height: 100%;
  margin: 0 auto;
  border: 1px solid red;
}

.hero {
  width: 100%;
  height: 100%;
  border: 1px solid green;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  text-align: center;
}
.hero > div {
  width: 50%;
}
.hero-text {
/*  Margin to place the text div  */
  margin-left: 50%;
}
.hero-image {
/*  Positions the hero image where you want it   */
  position: absolute;
  left: 0;
  width: 50vw;
  height: 100%;
  /* margin-left: calc((100vw - 1200px) * -1); */
  background: url('https://www.placecage.com/c/500/400');
  background-repeat: no-repeat;
  background-size: cover;
}

查看此代码集http://codepen.io/anon/pen/NbwVmy,看它是否有效。

希望这是你正在寻找的东西! (当然没有弄乱标记)