Cómo aplicar un filtro CSS a una imagen de fondo

Tengo un archivo JPEG que estoy usando como imagen de fondo para una página de búsqueda, y estoy usando CSS para establecerlo porque estoy trabajando dentro de contextos Backbone.js:

background-image: url("whatever.jpg");

Quiero aplicar un filtro de desenfoque CSS 3 sólo al fondo, pero no estoy seguro de cómo estilizar sólo ese elemento. Si lo intento:

-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);

justo debajo de background-image en mi CSS, se estiliza toda la página, en lugar de sólo el fondo. ¿Hay alguna manera de seleccionar sólo la imagen y aplicar el filtro a eso? O bien, ¿hay una manera de desactivar el desenfoque para todos los demás elementos de la página?

Solución

Mira este bolígrafo.

Tendrás que utilizar dos contenedores diferentes, uno para la imagen de fondo y otro para tu contenido.

En el ejemplo, he creado dos contenedores, .background-image y .content.

Ambos están colocados con position: fixed y left: 0; right: 0;. La diferencia en la visualización viene de los valores de z-index que se han establecido de manera diferente para los elementos.

begin snippet: js hide: false console: true babel: false -->

.background-image {
  position: fixed;
  left: 0;
  right: 0;
  z-index: 1;
  display: block;
  background-image: url('http://666a658c624a3c03a6b2-25cda059d975d2f318c03e90bcf17c40.r92.cf1.rackcdn.com/unsplash_527bf56961712_1.JPG');
  width: 1200px;
  height: 800px;
  -webkit-filter: blur(5px);
  -moz-filter: blur(5px);
  -o-filter: blur(5px);
  -ms-filter: blur(5px);
  filter: blur(5px);
}

.content {
  position: fixed;
  left: 0;
  right: 0;
  z-index: 9999;
  margin-left: 20px;
  margin-right: 20px;
}
<div class="background-image"></div>
<div class="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis aliquam erat in ante malesuada, facilisis semper nulla semper. Phasellus sapien neque, faucibus in malesuada quis, lacinia et libero. Sed sed turpis tellus. Etiam ac aliquam tortor, eleifend
    rhoncus metus. Ut turpis massa, sollicitudin sit amet molestie a, posuere sit amet nisl. Mauris tincidunt cursus posuere. Nam commodo libero quis lacus sodales, nec feugiat ante posuere. Donec pulvinar auctor commodo. Donec egestas diam ut mi adipiscing,
    quis lacinia mauris condimentum. Quisque quis odio venenatis, venenatis nisi a, vehicula ipsum. Etiam at nisl eu felis vulputate porta.</p>
  <p>Fusce ut placerat eros. Aliquam consequat in augue sed convallis. Donec orci urna, tincidunt vel dui at, elementum semper dolor. Donec tincidunt risus sed magna dictum, quis luctus metus volutpat. Donec accumsan et nunc vulputate accumsan. Vestibulum
    tempor, erat in mattis fringilla, elit urna ornare nunc, vel pretium elit sem quis orci. Vivamus condimentum dictum tempor. Nam at est ante. Sed lobortis et lorem in sagittis. In suscipit in est et vehicula.</p>
</div>

Fin del fragmento;

Disculpas por el texto Lorem Ipsum.

Actualización

Gracias a Matthew Wilcoxson por una mejor implementación usando .content:before http://codepen.io/akademy/pen/FlkzB

Comentarios (17)

Para ello, debe reestructurar su HTML. Tienes que desenfocar todo el elemento para poder desenfocar el fondo. Así que si quieres desenfocar sólo el fondo, tiene que ser su propio elemento.

Comentarios (0)

En la pestaña .content en CSS cámbialo a position:absolute. De lo contrario, la página renderizada no será desplazable.

Comentarios (0)