Pregunta

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

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

Quiero aplicar un filtro de desenfoque CSS 3 solo al fondo, pero no estoy seguro de cómo diseñar solo 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 background-image en mi CSS, le da estilo a toda la página, en lugar de solo al fondo.¿Hay alguna manera de seleccionar solo la imagen y aplicarle el filtro?Alternativamente, ¿hay alguna manera de desactivar el desenfoque para todos los demás elementos de la página?

¿Fue útil?

Solución

Mira esto 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 se colocan con position: fixed y left: 0; right: 0;.La diferencia en mostrarlos proviene de la z-index valores que se han establecido de forma diferente para los elementos.

.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>

Disculpas por el Lorem Ipsum Texto.

Actualizar

Gracias a Mateo Wilcoxson para una mejor implementación utilizando .content:before http://codepen.io/akademy/pen/FlkzB

Otros consejos

PEN

Abolición de la necesidad de un elemento extra, junto con hacer que el contenido se ajuste al flujo de documentos en lugar de ser fijo / absoluto como otras soluciones.

logrado usando

.content {
  overflow: auto;
  position: relative;
}

Se necesita un desbordamiento automático, de lo contrario, el fondo se compensará con unos pocos píxeles en la parte superior.

Después de esto, simplemente necesitas

.content:before {
  content: "";
  position: fixed;
  left: 0;
  right: 0;
  z-index: -1;

  display: block;
  background-image: url('img-here');
  background-size:cover;
  width: 100%;
  height: 100%;

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

Editar Si está interesado en eliminar las fronteras blancas en los bordes, use un ancho y la altura de 110% y una izquierda y la parte superior de -5%.Esto ampliará sus antecedentes un TAD, pero no debe haber un sangrado de color sólido desde los bordes.

Lápiz actualizado aquí: https://codepen.io/anon/pen/qgyewb -Gracias Chad Fawcett por la sugerencia.

Como se indica en otras respuestas, esto se puede lograr con:

  • una copia de la imagen borrosa como fondo.
  • un elemento pseudo que se puede filtrar luego posicionado detrás del contenido.

También puede usar backdrop-filter

Hay una propiedad compatible llamada backdrop-filter, y es actualmente Apoyado en Chrome 76, borde , Safari, e iOS Safari (consulte caniuse.com para estadísticas).

de Mozilla Devdocs :

La propiedad Filtro de fondo proporciona efectos como borrosa o cambiando el área del área detrás de un elemento, que luego se puede ver a través de ese elemento ajustando la transparencia / opacidad del elemento.

Consulte caniuse.com para estadísticas de uso.

Usted lo usaría así:

.background-filter::after {
  -webkit-backdrop-filter: blur(5px); /* Use for Safari 9+, Edge 17+ (not a mistake) and iOS Safari 9.2+ */
  backdrop-filter: blur(5px); /* Supported in Chrome 76 */

  content: "";
  display: block;
  position: absolute;
  width: 100%; height: 100%;
}

.background-filter {
  position: relative;
}

.background {
  background-image: url('https://upload.wikimedia.org/wikipedia/en/6/62/Kermit_the_Frog.jpg');
  width: 200px;
  height: 200px;
}
<div class="background background-filter"></div>

update (12/06/2019) : Chromium se enviará con backdrop-filter habilitado de forma predeterminada en la versión 76, que saldrá 30/07/2019 .

update (01/06/2019) : el equipo de mozzilla firefox ha anunciado comenzará a trabajar en la implementación de esto pronto.

actualización (21/05/2019) : cromo acaba de anunciarlo backdrop-filter está disponible en Chrome Canary sin habilitar "Habilitar funciones de la plataforma web experimental". Esto significa que backdrop-filter está muy cerca de ser implementado en todas las plataformas de cromo.

Debe reestructurar su html para hacer esto.Tienes que borrar todo el elemento para difuminar el fondo.Entonces, si quieres borrar solo el fondo, tiene que ser su propio elemento.

Por favor, compruebe el siguiente código: -

.backgroundImageCVR{
	position:relative;
	padding:15px;
}
.background-image{
	position:absolute;
	left:0;
	right:0;
	top:0;
	bottom:0;
	background:url('http://www.planwallpaper.com/static/images/colorful-triangles-background_yB0qTG6.jpg');
	background-size:cover;
	z-index:1;
	-webkit-filter: blur(10px);
  -moz-filter: blur(10px);
  -o-filter: blur(10px);
  -ms-filter: blur(10px);
  filter: blur(10px);	
}
.content{
	position:relative;
	z-index:2;
	color:#fff;
}
<div class="backgroundImageCVR">
    <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>
</div>

La siguiente es una solución simple para los navegadores modernos en CSS puros con un elemento Pseudo de 'antes', como la solución de Matthew Wilcoxson.

Para evitar la necesidad de acceder al Pseudo Elemento para cambiar la imagen y otros atributos en JavaScript, simplemente use inherit como el valor y acceda a ellos a través del elemento principal (aquí body).

body::before {
    content: ""; /* Important */
    z-index: -1; /* Important */
    position: inherit;
    left: inherit;
    top: inherit;
    width: inherit;
    height: inherit;
    background-image: inherit;
    background-size: cover;
    filter: blur(8px);
}

body {
  background-image: url("xyz.jpg");
  background-size: 0 0;  /* Image should not be drawn here */
  width: 100%;
  height: 100%;
  position: fixed; /* Or absolute for scrollable backgrounds */
}

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

Aunque todas las soluciones mencionadas son muy inteligentes, todos parecían tener problemas menores o posibles efectos de golpe en otros elementos en la página cuando los probé.

Al final para ahorrar tiempo, simplemente volví a mi antigua solución: usé pintura.net y fue a los efectos, borroso gaussiano con un radio de 5 a 10 píxeles y simplemente lo salvó como la imagen de la página.- -)

html:

<body class="mainbody">
</body

css:

body.mainbody
{
    background: url('../images/myphoto.blurred.png');
    -moz-background-size: cover;
    -webkit-background-size: cover;
    background-size: cover;
    background-position: top center !important;
    background-repeat: no-repeat !important;
    background-attachment: fixed;
}

Editar:

Finalmente lo tengo trabajando, ¡pero la solución no es de ninguna manera sencilla!Mira aquí:

Todo lo que realmente necesita es "Filtro":

blur(«WhatEverYouWantInPixels»);"

body {
    color: #fff;
    font-family: Helvetica, Arial, sans-serif;
}

#background {
    background-image: url('https://cdn2.geckoandfly.com/wp-content/uploads/2018/03/ios-11-3840x2160-4k-5k-beach-ocean-13655.jpg');
    background-repeat: no-repeat;
    background-size: cover;
    width: 100vw;
    height: 100vh;
    overflow: hidden;
    position: absolute;
    top: 0;
    left: 0;
    z-index: -1;

    /* START */
    /* START */
    /* START */
    /* START */

    /* You can adjust the blur-radius as you'd like */
    filter: blur(3px);
}
<div id="background"></div>

<p id="randomContent">Lorem Ipsum</p>

Por supuesto, esta no es una solución CSS, pero puede usar el protón CDN con filter:

body {
    background: url('https://i0.wp.com/IMAGEURL?w=600&filter=blurgaussian&smooth=1');
}

Es de https://developer.wordpress.com/docs/photon/ API / # FILTRO

No escribí esto, pero noté que había un polyfill para el soporte parcial. backdrop-filter usando el compilador CSS SASS, por lo que si tiene un proceso de compilación, se puede lograr muy bien (también usa TypeScript):

https://codepen.io/mixal_bl4/pen/EwPMWo

div {
    background: inherit;
    width: 250px;
    height: 350px;
    position: absolute;
    overflow: hidden;  /* Adding overflow hidden */
}

div:before {
    content: ‘’;
    width: 300px;
    height: 400px;
    background: inherit;
    position: absolute;
    left: -25px;  /* Giving minus -25px left position */
    right: 0;
    top: -25px;   /* Giving minus -25px top position */
    bottom: 0;
    box-shadow: inset 0 0 0 200px rgba(255, 255, 255, 0.3);
    filter: blur(10px);
}

Esta respuesta es para un Diseño de materiales Diseño de tarjeta horizontal con altura dinámica y una imagen.

Para evitar la distorsión de la imagen debido a la altura dinámica de la tarjeta, puede utilizar una imagen de marcador de posición de fondo con desenfoque para ajustar los cambios de altura.

 

Explicación

  • La tarjeta está contenida en un <div> con clase envoltura, que es una caja flexible.
  • La tarjeta está compuesta por dos elementos, una imagen que también es un enlace y contenido.
  • El enlace <a>, clase enlace, está posicionadorelativo.
  • El enlace consta de dos subelementos, un marcador de posición <div> clase difuminar y un <img> clase Foto cual es la imagen clara.
  • Ambos están posicionados absoluto y tiene width: 100%, pero clase Foto tiene un orden de pila más alto, es decir, z-index: 2, que lo coloca encima del marcador de posición.
  • La imagen de fondo para el marcador de posición borroso se establece mediante estilo en línea en el HTML.

 

Código

.wrapper {
  display: flex;
  width: 100%;
  border: 1px solid rgba(0, 0, 0, 0.16);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.16), 0 1px 1px rgba(0, 0, 0, 0.23);
  background-color: #fff;
  margin: 1rem auto;
  height: auto;
}

.wrapper:hover {
  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
}

.link {
  display: block;
  width: 200px;
  height: auto;
  overflow: hidden;
  position: relative;
  border-right: 2px solid #ddd;
}

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

.pic {
  width: calc(100% - 20px);
  max-width: 100%;
  height: auto;
  margin: auto;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 2;
}

.pic:hover {
  transition: all 0.2s ease-out;
  transform: scale(1.1);
  text-decoration: none;
  border: none;
}

.content {
  display: flex;
  flex-direction: column;
  width: 100%;
  max-width: 100%;
  padding: 20px;
  overflow-x: hidden;
}

.text {
  margin: 0;
}
<div class="wrapper">
  <a href="#" class="link">
    <div class="blur" style="background: url('http://www.planwallpaper.com/static/assets/img/header.jpg') 50% 50% / cover;"></div>
    <img src="http://www.planwallpaper.com/static/assets/img/header.jpg" alt="Title" class="pic" />
  </a>

  <div class="content">
    <p class="text">Agendum dicendo memores du gi ad. Perciperem occasionem ei ac im ac designabam. Ista rom sibi vul apud tam. Notaverim to extendere expendere concilium ab. Aliae cogor tales fas modus parum sap nullo. Voluntate ingressus infirmari ex mentemque ac manifeste
      eo. Ac gnum ei utor sive se. Nec curant contra seriem amisit res gaudet adsunt. </p>
  </div>
</div>

Ahora se vuelve aún más sencillo y más flexible mediante el uso de la cuadrícula CSS. Solo tiene que superponerse al fondo blured (IMGBG) con el texto (H2)

<div class="container">
 <div class="imgbg"></div>
 <h2>
  Lorem ipsum dolor sit amet consectetur, adipisicing elit. Facilis enim
  aut rerum mollitia quas voluptas delectus facere magni cum unde?:)
 </h2>
</div>

y el CSS:

.container {
        display: grid;
        width: 30em;
      }

.imgbg {
        background: url(bg3.jpg) no-repeat center;
        background-size: cover;
        grid-column: 1/-1;
        grid-row: 1/-1;
        filter: blur(4px);
      }


     .container h2 {
        text-transform: uppercase;
        grid-column: 1/-1;
        grid-row: 1/-1;
        z-index: 2;
      }

Si desea contenido para ser desplazable, configure la posición del contenido para absoluto:

content {
   position: absolute;
   ...
}

No sé si esto fue solo para mí, pero si no, esa es la solución!

también Dado que el fondo se fija, significa que tiene un efecto de "" !Así que ahora, no solo esta persona le enseñó cómo hacer un fondo borroso, ¡sino que también es un efecto de fondo de paralaje!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top