Blurr背景图像,但保持图像聚焦在框区域

时间:2017-04-09 17:12:48

标签: javascript css image

有没有人知道执行以下操作的css / javascript技术: 全屏背景图像模糊,但浮动固定与该图像的一部分未模糊,但该部分保持居中,并在浏览器窗口上调整相同的大小。 背景图像需要使用浏览器窗口调整大小,但聚焦部分需要保持居中并具有相同的框大小,而其剪切的背景图像与模糊背景一起调整大小。看示例图片。 必须跨浏览器兼容。 enter image description here

4 个答案:

答案 0 :(得分:3)

尝试使用两个元素(在两个上使用相同的背景图片),但同时将background-attachment设置为fixed

html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
}

.blur-group {
  position: relative;
  width: 100%;
  height: 100%;
}

.blurred,
.unblurred {
  background: url('//placekitten.com/1000/750') 50% 50% no-repeat;
  background-size: cover;
  background-attachment: fixed;
}

.blurred {
  width: 100%;
  height: 100%;
  filter: blur(7px);
}

.unblurred {
  width: 400px;
  height: 300px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -200px;
  margin-top: -150px;
  border: 10px solid white;
}
<div class="blur-group">
  <div class="blurred"></div>
  <div class="unblurred"></div>
</div>

答案 1 :(得分:1)

使用模糊背景使图像响应

<强>标记

<div class="widget center">
  <div class="text center">
    <h1 class="">Responsive Blur</h1>
    <p>Resize me</p>
  </div>
  <div class="blur">
    <img src="https://static.pexels.com/photos/88212/pexels-photo-88212.jpeg" class="bg">
  </div>
</div>

<强> CSS

img.bg {
  min-height: 100%;
  width: 100%;
  height: auto;
  position: fixed;
  top: 0;
  left: 0;
  z-index: -2;
    -webkit-filter: blur(18px);
    -o-filter: blur(18px);
    filter: blur(18px);
}

.blur {
  height: 250px;
  width: 100%;
  margin: -20px auto;
  z-index: -1;
  position: relative;
  overflow: hidden;
}

.blur:after {
  content: '';
  height: 100%;
  width: 100%;
  position: absolute;
}

.widget {
  border-top: 2px solid white;
  border-bottom: 2px solid white;
  min-height: 200px;
  width: 45%;
  overflow: hidden;
   background-image: url("https://static.pexels.com/photos/88212/pexels-photo-88212.jpeg");
   -webkit-background-size: cover;
    -moz-background-size: cover;
    -ms-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
}

.center {
  position: absolute;
  margin: auto;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}


/*  NOT REQUIRED  */

.text {
  height: 200px;
  width: 340px;
}

.text h1 {
  text-align: center;
  text-shadow: 1px 1px rgba(0, 0, 0, .1);
  color: #ffffff;
  margin-top: 70px;
  font-family: 'Lora', serif;
  font-weight: 700;
  font-size: 38px;
}

.text p {
  text-align: center;
  color: #ffffff;
  text-shadow: 1px 1px rgba(0, 0, 0, .1);
  margin-top: 0px;
  font-family: 'Lato', serif;
  font-weight: 400;
  font-size: 22px;
}

查看结果here

答案 2 :(得分:1)

您可以使用绝对位置两次使用图像,将它们居中,一个在另一个上面。然后,模糊第一个并使用clip-path显示第二个的一部分。但是今天对于你的需求来说,剪辑路径支持可能还不够:) https://jsfiddle.net/nesquimo/nnmquv1k/2/

.parent{
  position: relative;
}

.child{
  position: absolute;
  width: 100%;
}

.child:first-child{
   -webkit-filter: blur(5px);
  -moz-filter: blur(5px);
  -o-filter: blur(5px);
  -ms-filter: blur(5px);
  filter: blur(5px);
}

.child:last-child{
  -webkit-clip-path: inset(20% 18% 15% 20%);
  clip-path: inset(20% 18% 15% 20%);
}
<div class="parent">
  <img class="child" src="http://i.imgur.com/RRUe0Mo.png">
  <img class="child" src="http://i.imgur.com/RRUe0Mo.png">
</div>

答案 3 :(得分:0)

使用父容器

  • 向父容器添加背景
  • 在父容器中放置一个div,这个div将作为一个掩码。向掩码添加滤镜模糊属性
  • 在父级中添加另一个div。此div将包含您的内容。将背景图像添加到此div并使用css transform

    将此div居中

    下面的代码段

    body {
      position: relative;
      width: 100vw;
      height: 100vh;
    }
    
    #parent {
      position: relative;
      height: 100%;
      width: 100%;
    }
    
    #mask {
      width: 100%;
      height: 100%;
      position: absolute;
      background: url(https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSvPdDmWSbJtqGgr8qMOKew03yzJVKc9ZCYDbfzRKTnMrnrfwIsNg);
      background-size: cover;
      -webkit-filter: blur(5px);
      -moz-filter: blur(5px);
      -o-filter: blur(5px);
      -ms-filter: blur(5px);
      filter: blur(5px);
    }
    
    #content {
      position: relative;
      width: 50%;
      height: 50%;
      background: url(https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRney6jjMJ8ZrRKwPb9MNDi7dvF1OLFC78ZpT8Th43WaNnJQV263Q);
      background-size: cover;
      top: 50%;
      left: 50%;
      border: solid white;
      -moz-transform: translate(-50%, -50%);
      -webkit-transform: translate(-50%, -50%);
      -o-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%)
    }
    <div id="parent">
      <div id="mask"></div>
      <div id="content"> This is some content</div>
      <div>