Domanda

Ho un file JPEG che sto usando come immagine di sfondo per una pagina di ricerca, e sto usando CSS per impostarlo perché sto lavorando all'interno backbone.js Contexts:

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

Voglio applicare un filtro sfocatura CSS 3 solo sullo sfondo, ma non sono sicuro di come modellare solo quell'elemento.Se provo:

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

Giusto sotto background-image nel mio CSS, stili tutta la pagina, piuttosto che lo sfondo.C'è un modo per selezionare solo l'immagine e applicare il filtro a questo?In alternativa, c'è un modo per disattivare la sfocatura per ogni altro elemento sulla pagina?

È stato utile?

Soluzione

Dai un'occhiata a questo penna .

Dovrai usare due diversi contenitori, uno per l'immagine di sfondo e l'altro per il tuo contenuto.

Nell'esempio, ho creato due contenitori, .background-image e .content.

Entrambi sono posizionati con position: fixed e left: 0; right: 0;. La differenza nella visualizzazione viene fornita dai valori z-index che sono stati impostati in modo diverso per gli elementi.

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

Scuse per il testo lorem ipsum .

Aggiorna

Grazie a Matthew wilcoxson per una migliore implementazione utilizzando .content:before http://codepen.io/akademy/pen/flkzb

Altri suggerimenti

Pen

Abolire la necessità di un elemento extra, insieme a rendere il contenuto in forma all'interno del flusso di documenti anziché essere fisso / assoluto come altre soluzioni.

ottenuto utilizzando

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

Overflow Auto è necessario, altrimenti lo sfondo verrà compensato da alcuni pixel in alto.

Dopo questo hai semplicemente bisogno

.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);
}
.

Modifica Se sei interessato a rimuovere i bordi bianchi ai bordi, utilizzare una larghezza e un'altezza di 110% e una sinistra e la parte superiore del -5%.Questo amplierà i tuoi sfondi un po '- ma non dovrebbe esserci un sanguinamento a colori solido dai bordi.

Penna aggiornata qui: https://codepen.io/anon/pen/qgyewb -Grazie Chad Fawcett per il suggerimento.

Come indicato in altre risposte questo può essere ottenuto con:

    .
  • una copia dell'immagine sfocata come sfondo.
  • Un elemento pseudo che può essere filtrato quindi posizionato dietro il contenuto.

Puoi anche usare backdrop-filter C'è una proprietà supportata chiamata backdrop-filter ed è attualmente supportato in Chrome 76, Edge , Safari e IOS Safari (vedi caniuse.com per le statistiche).

Da mozilla devdocs :

.

La proprietà del filtro del contesto fornisce effetti come sfocatura o colore che spostano l'area dietro un elemento, che può quindi essere visto attraverso quell'elemento regolando la trasparenza / opacità dell'elemento.

Vedi caniuse.com per le statistiche sull'utilizzo.

Lo useresti come:

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

Aggiornamento (12/06/2019) : il cromo verrà spedito con backdrop-filter abilitato per impostazione predefinita nella versione 76 quale è dovuto 30/07/2019 .

Aggiornamento (01/06/2019) : The Mozzilla Firefox Team ha annunciato inizierà a lavorare per implementarti presto.

Aggiornamento (21/05/2019) : Chromium Appena annunciato backdrop-filter è disponibile in Chrome Canary senza abilitare "Abilita la bandiera della piattaforma web sperimentale". Questo significa backdrop-filter è molto vicino ad essere implementato su tutte le piattaforme Chrome.

È necessario ri-strutturare il tuo html per fare questo.Devi sfocare l'intero elemento per sfocare lo sfondo.Quindi, se vuoi sfocare solo lo sfondo, deve essere il suo elemento.

Si prega di controllare il seguente codice: -

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

Di seguito è riportata una soluzione semplice per i moderni browser in Pure CSS con un elemento Pseudo "prima", come la soluzione da Matthew Wilccoxson.

Per evitare la necessità di accedere all'elemento Pseudo per modificare l'immagine e altri attributi in JavaScript, è sufficiente utilizzare inherit come valore e accedervi tramite l'elemento genitore (qui 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 */
}
.

Nella scheda .content in CSS lo modifica su position:absolute.In caso contrario, la pagina resa non sarà scorrevole.

Sebbene tutte le soluzioni menzionate siano molto intelligenti, tutte sembravano avere problemi minori o potenziali colpi sugli effetti con altri elementi sulla pagina quando li ho provati.

Alla fine per risparmiare tempo sono semplicemente tornato alla mia vecchia soluzione: ho usato vernice.net E sono andato agli effetti, sfocatura gaussiana con un raggio da 5 a 10 pixel e appena salvato come immagine della pagina.: -)

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

Modifica:

Alla fine l'ho capito, ma la soluzione non è affatto semplice!Vedi qui:

Tutto ciò di cui hai effettivamente bisogno è "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>
.

Certo, questa non è una soluzione CSS, ma è possibile utilizzare il protone CDN con filter:

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

è da https://developer.wordpress.com/docs/photon/ API / # Filtro

Non ho scritto questo, ma ho notato che c'era un polyfill per il backdrop-filter parzialmente supportato utilizzando il compilatore SASS CSS, quindi se si dispone di una pipeline di compilazione può essere ottenuto bene (usa anche dattiloscopi): 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);
}
.

Questa risposta è per un progettazione materiale layout della carta orizzontale con altezza dinamica e un'immagine.

Per evitare la distorsione dell'immagine a causa dell'altezza dinamica della scheda, è possibile utilizzare un'immagine segnaposto in background con sfocatura per regolare le modifiche di altezza.

Spiegazione

    .
  • La scheda è contenuta in un <div> con la classe wrapper , che è una flexbox.
  • La carta è composta da due elementi, un'immagine che è anche a collegamento e contenuto.
  • Il collegamento <a>, Class Link , è posizionato relativo .
  • Il link è composto da due sottoelementi, un segnaposto <div> Class Blur e una classe <img> Pic che è l'immagine chiara.
  • entrambi sono posizionati assoluti e hanno width: 100%, ma classe pic ha un ordine di stack più alto, I.e., z-index: 2, che lo posiziona sopra il segnaposto.
  • L'immagine di sfondo per il segnaposto sfocato è impostata tramite stile inline nell'Html.

codice

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

Ora questo diventa ancora più semplice e più flessibile utilizzando la griglia CSS. Devi solo sovrapporre lo sfondo blured (IMGBG) con il testo (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>
.

e il 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;
      }
.

Se si desidera contentare di essere scorrizzando, impostare la posizione del contenuto in assoluto:

content {
   position: absolute;
   ...
}
.

Non so se questo fosse solo per me, ma se non è la correzione!

anche Poiché lo sfondo è fisso, significa che hai un effetto "parallax" !Così ora, non solo questa persona ha insegnato come fare uno sfondo sfocato, ma è anche un effetto di sfondo parallasse!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top