Question

J'ai un fichier JPEG que j'utilise comme image d'arrière-plan pour une page de recherche et j'utilise CSS pour le définir car je travaille dans Backbone.js contextes :

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

Je souhaite appliquer un filtre de flou CSS 3 seulement à l'arrière-plan, mais je ne sais pas comment styliser uniquement cet élément.Si j'essaye :

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

juste en dessous background-image dans mon CSS, il stylise toute la page, plutôt que seulement l'arrière-plan.Existe-t-il un moyen de sélectionner uniquement l'image et d'y appliquer le filtre ?Alternativement, existe-t-il un moyen de simplement désactiver le flou pour tous les autres éléments de la page ?

Était-ce utile?

La solution

Regarde ça stylo.

Vous devrez utiliser deux conteneurs différents, un pour l'image d'arrière-plan et l'autre pour votre contenu.

Dans l'exemple, j'ai créé deux conteneurs, .background-image et .content.

Tous deux sont placés avec position: fixed et left: 0; right: 0;.La différence dans leur affichage vient du z-index valeurs qui ont été définies différemment pour les éléments.

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

Toutes mes excuses pour le Lorem Ipsum Texte.

Mise à jour

Grâce à Matthieu Wilcoxson pour une meilleure mise en œuvre en utilisant .content:before http://codepen.io/akademy/pen/FlkzB

Autres conseils

stylo

Supprimer le besoin d'un élément supplémentaire, tout en adaptant le contenu au flux de documents plutôt que d'être fixe/absolu comme d'autres solutions.

Réalisé en utilisant

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

Un débordement automatique est nécessaire, sinon l'arrière-plan sera décalé de quelques pixels en haut.

Après cela, il vous suffit simplement

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

MODIFIER Si vous souhaitez supprimer les bordures blanches sur les bords, utilisez une largeur et une hauteur de 110% et une gauche et en haut de -5%.Cela agrandira un peu vos arrière-plans - mais il ne devrait y avoir aucune couleur unie qui saigne des bords.

Stylo mis à jour ici : https://codepen.io/anon/pen/QgyewB - Merci Chad Fawcett pour la suggestion.

Comme indiqué dans d'autres réponses, cela peut être réalisé avec :

  • Une copie de l'image floue comme arrière-plan.
  • Un pseudo élément pouvant être filtré puis positionné derrière le contenu.

Vous pouvez aussi utiliser backdrop-filter

Il existe une propriété prise en charge appelée backdrop-filter, et il est actuellement pris en charge dans Chrome 76, Bord, Safari et iOS Safari (voir caniuse.com pour les statistiques).

Depuis Documents de développement Mozilla:

La propriété background-filter fournit des effets tels que le flou ou le changement de couleur de la zone derrière un élément, qui peuvent ensuite être vus à travers cet élément en ajustant la transparence/opacité de l'élément.

Voir caniuse.com pour les statistiques d'utilisation.

Vous l'utiliseriez comme ceci :

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

Mise à jour (12/06/2019):Chromium sera livré avec backdrop-filter activé par défaut dans la version 76 qui doit sortir le 30/07/2019.

Mise à jour (01/06/2019):L'équipe Mozzilla Firefox a annoncé il commencera bientôt à travailler sur sa mise en œuvre.

Mise à jour (21/05/2019):Chrome Vient d'être annoncé backdrop-filter est disponible dans Chrome Canary sans activer l'indicateur « Activer les fonctionnalités expérimentales de la plate-forme Web ».Cela signifie backdrop-filter est sur le point d'être implémenté sur toutes les plateformes Chrome.

Vous devez ré-structurer votre HTML afin de le faire.Vous devez brouiller l'élément entier afin de brouiller le fond.Donc, si vous voulez seulement brouiller le fond, ce doit être son propre élément.

Veuillez vérifier le code ci-dessous: -

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

Ce qui suit est une solution simple pour les navigateurs modernes en CSS pur avec un pseudo-élément « avant », comme la solution de Matthew Wilcoxson.

Pour éviter d'avoir à accéder au pseudo-élément pour modifier l'image et d'autres attributs en JavaScript, utilisez simplement inherit comme valeur et y accéder via l'élément parent (ici 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 */
}

Dans le .content onglet en CSS, changez-le en position:absolute.Sinon, la page rendue ne pourra pas défiler.

Bien que toutes les solutions mentionnées soient très intelligentes, toutes semblaient avoir des problèmes mineurs ou un potentiel pour frapper des effets avec d'autres éléments de la page lorsque je les ai essayés.

En fin de compte pour gagner du temps, je suis simplement retourné à ma vieille solution: j'ai utilisé peinture.net et est allé à des effets, flou gaussien avec un rayon de 5 à 10 pixels et vient de sauver cela comme image de page.: -)

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

EDIT:

Je l'ai enfin travaillé, mais la solution n'est nullement simple!Voyez ici:

  • :flou(1px);ne fonctionne pas dans Firefox, c'est-à-dire et Opera

Tout ce que vous avez besoin est "Filtre":

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>

Bien sûr, ce n'est pas une solution CSS, mais vous pouvez utiliser le CDN Proton avec filter:

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

C'est de https://developer.wordpress.com/docs/photon/api/#filter

Je n'ai pas écrit ceci, mais j'ai remarqué qu'il y avait un polyfill pour le partiellement pris en charge backdrop-filter en utilisant le compilateur CSS SASS, donc si vous avez un pipeline de compilation, cela peut être bien réalisé (il utilise également 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);
}

Cette réponse est pour un Conception matérielle disposition de carte horizontale avec hauteur dynamique et une image.

Pour éviter la distorsion de l'image due à la hauteur dynamique de la carte, vous pouvez utiliser une image d'arrière-plan avec un flou pour ajuster les changements de hauteur.

 

Explication

  • La carte est contenue dans un <div> avec classe emballage, qui est une flexbox.
  • La carte est composée de deux éléments, une image qui est également un lien et du contenu.
  • Le lien <a>, classe lien, est positionnérelatif.
  • Le lien est constitué de deux sous-éléments, un espace réservé <div> classe se brouiller Et un <img> classe photo qui est l'image claire.
  • Les deux sont positionnés absolu et avoir width: 100%, mais la classe photo a un ordre de pile plus élevé, c'est-à-dire z-index: 2, ce qui le place au-dessus de l'espace réservé.
  • L'image d'arrière-plan de l'espace réservé flou est définie via style en ligne dans le HTML.

 

Code

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

Maintenant, cela devient encore plus simple et plus flexible en utilisant CSS Grid.Vous devez simplement chevaucher le fond bleué (IMGBG) avec le texte (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>

et le 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 vous souhaitez que le contenu soit défilable, définissez la position du contenu en absolu:

content {
   position: absolute;
   ...
}

Je ne sais pas si c'était juste pour moi, mais sinon c'est le correctif!

aussi car l'arrière-plan est corrigé, cela signifie que vous avez un effet "Parallax" effet!Alors maintenant, non seulement cette personne vous apprend également à faire un fond flou, mais c'est aussi un effet de fond de parallaxe!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top