正确定位模糊的背景图像

时间:2015-12-14 16:26:56

标签: html css

我试图创建一个"个人资料"页眉的背景是个人资料照片的模糊版本的页面类型。我无法让叠加层正常工作。

我在这里有一个例子:jsbin

问题在于我无法将背景叠加层停在白色边框线上。 ' .bg img' element获取body元素的高度/宽度,而不是div.profile-header元素的高度/宽度100%。为什么呢?

CSS:

.profile-header {
  display: block;
  text-align: center;
  border-bottom: #fff 1px solid;

  .bg {
    position: fixed;
    z-index: -1; 
    width: 100%; 
    height: 100%;
    opacity: 0.7;

    img {
      position: absolute;
      height: 100%;
      width: 100%;
      top: 0;
      bottom: 0;
      right: 0;
      left: 0;
      -webkit-filter: blur(15px);
      -moz-filter: blur(15px);
      -o-filter: blur(15px);
      -ms-filter: blur(15px);
      filter: blur(15px);
    }
  }

  .profile-content {
    z-index: 1;
  }

  .profile-img {
    padding: 30px 5px;
    display: block;

    img {
      max-width: 150px;
      margin: 0 auto;
      border-radius: 50%;
    }
  }
}

HTML:

<body>
  <div class="profile-header">
    <div class="bg"> <img src="http://www.twoorist.com/resources/images/uploads/images/97714346f8b6a5c10d716643eee28a8e.jpg"></div>
    <div class="profile-content">
      <div class="profile-img">
        <img src="http://www.twoorist.com/resources/images/uploads/images/97714346f8b6a5c10d716643eee28a8e.jpg">
      </div>
      <div class="header-content">
        <h2>John Doe</h2>
      </div>
    </div>
  </div>
  <p>Some content down here.</p>
</body>

2 个答案:

答案 0 :(得分:3)

您可以通过清理position属性来完成大部分工作。

.profile-header {
    position: relative;
}
.profile-header .bg {
    position: absolute;

    /* this will crop the blurry edge to contain it perfectly above the white line */
    overflow: hidden; 
}

.bg div的位置现在将相对于.profile-header div的位置(与其包含的内容一样高)设置,与之前相对于它设置的位置不同页面的位置(与页面上的所有内容一样高)。

你可以在这里看到一个例子:

http://jsbin.com/sajazoyiva/1/edit?html,css,output

The header is cleaned up by altering the position of the css

答案 1 :(得分:1)

我已经整理了一点定位,而不是使用position:fixed帮助,但主要的诀窍是使用隐藏在父级上的overflow

Codepen Demo

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  text-align: center;
  background: lightgrey;
}
.profile-header {
  border: 1px solid grey;
  position: relative;
}
.bg {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.bg img {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: auto;
  z-index: -1;
  -webkit-filter: blur(10px) sepia(100%) hue-rotate(50deg);
  filter: blur(5px) sepia(100%) hue-rotate(50deg);
}
.profile-img img {
  border-radius: 50%;
}
<div class="profile-header">

  <div class="bg">
    <img src="http://www.twoorist.com/resources/images/uploads/images/97714346f8b6a5c10d716643eee28a8e.jpg">
  </div>

  <div class="profile-content">

    <div class="profile-img">
      <img src="http://www.twoorist.com/resources/images/uploads/images/97714346f8b6a5c10d716643eee28a8e.jpg">
    </div>
    <div class="header-content">
      <h2>John Doe</h2>
    </div>
  </div>
</div>