J'ai un élément div
avec du texte et une image d'arrière-plan, définie via la propriété CSS background-image
. Est-il possible de fondre dans l'image d'arrière-plan via jQuery?
div {
background-repeat: no-repeat;
background-position: center;
background-size: contain;
background-image: url(http://upload.wikimedia.org/wikipedia/commons/8/84/Konqi_svg.svg);
border: 1px solid #666;
height: 10em;
}
<div>Text</div>
[~ # ~] éditer [~ # ~]
J'ai fait un violon illustrant mon scénario. Fondamentalement, ceci configure un background-image
et un transition
, et change le background-image
avec jQuery. Dans mes tests, il n'y a pas de transition animée entre les deux images.
EDIT2
Mon révisé violon fonctionne!
je cherche depuis des lustres et finalement, j'ai tout mis en place pour trouver ma solution. Les gens disent que vous ne pouvez pas insérer/masquer l’image de fond background-image-id de html-background. C’est vraiment faux, comme vous pouvez le constater en mettant en oeuvre la démo mentionnée ci-dessous
CSS:
html, body
height: 100%; /* ges Hoehe der Seite -> weitere Hoehenangaben werden relativ hierzu ausgewertet */
overflow: hidden; /* hide scrollbars */
opacity: 1.0;
-webkit-transition: background 1.5s linear;
-moz-transition: background 1.5s linear;
-o-transition: background 1.5s linear;
-ms-transition: background 1.5s linear;
transition: background 1.5s linear;
Changer l'image de fond du corps peut maintenant être facilement fait en utilisant JavaScript:
switch (dummy)
case 1:
$(document.body).css({"background-image": "url("+URL_of_pic_One+")"});
waitAWhile();
case 2:
$(document.body).css({"background-image": "url("+URL_of_pic_Two+")"});
waitAWhile();
Probablement pas avec jquery mais vous pouvez avec les transitions css3 voir cet exemple:
http://css3.bradshawenterprises.com/cfimg/
voir aussi cette réponse
Vous pouvez donner la valeur d'opacité comme
div {opacity: 0.4;}
Pour IE
, vous pouvez spécifier comme
div { filter:alpha(opacity=10));}
Réduisez la valeur - Augmentez la transparence.
Ce n'est pas possible de le faire comme ça, mais vous pouvez superposer un div opaque entre le div avec l'image d'arrière-plan et le texte et le masquer en fondu, ce qui donne l'impression que l'arrière-plan apparaît en fondu.
C’est ce qui a fonctionné pour moi et son css pur
css
html {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
body {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
#bg {
width: 100%;
height: 100%;
background: url('/image.jpg/') no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
-webkit-animation: myfirst 5s ; /* Chrome, Safari, Opera */
animation: myfirst 5s ;
}
/* Chrome, Safari, Opera */
@-webkit-keyframes myfirst {
from {opacity: 0.2;}
to {opacity: 1;}
}
/* Standard syntax */
@keyframes myfirst {
from {opacity: 0.2;}
to {opacity: 1;}
}
html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div id="bg">
<!-- content here -->
</div> <!-- end bg -->
</body>
</html>
Avec le navigateur moderne, je préfère une approche beaucoup plus légère avec un peu de Js et CSS3 ...
transition: background 300ms ease-in 200ms;
Regardez cette démo:
jquery:
$("div").fadeTo(1000 , 1);
css
div {
background: url("../images/example.jpg") no-repeat center;
opacity:0;
Height:100%;
}
html
<div></div>
Vous pouvez atténuer votre image de fond de différentes manières depuis Firefox 4 ...
Votre CSS:
.box {
background: #CCCCCC;
-webkit-transition: background 0.5s linear;
-moz-transition: background 0.5s linear;
-o-transition: background 0.5s linear;
transition: background 0.5s linear;
}
.box:hover {
background: url(path/to/file.png) no-repeat #CCCCCC;
}
Votre XHTML:
<div class="box">
Some Text …
</div>
Et c'est tout.
Je sais que je suis en retard, mais jQuery fonctionnait sur tous les navigateurs (je l'ai testé sur chrome, firefox et Ie 9) et les éléments d'avant-plan sont toujours affichés au lieu de la propriété css3 transition.
créer 2 wrapper absolu et en utilisant z-index.
Commencez par définir les éléments qui doivent figurer au premier plan avec la valeur de propriété z-index la plus élevée, et les autres élémets (tous inclus dans le corps, donc: body {}) avec une valeur de propriété z-index inférieure à celle de front. éléments du sol-un, au moins de 2 nombre inférieur.
Partie HTML:
<div class="wrapper" id="wrapper1"></div>
<div class="wrapper" id="wrapper2"></div>
partie css:
.fore-groundElements{ //select all fore-ground elements
z-index:0; //>=0
}
.wrapper{
background-size: cover;
width:100%;
height:100%;
background-size: 100% 100%;
position:absolute;
}
#wrapper1{
z-index:-1;
}
#wrapper2{
z-index:-2;
}
body{
height:100%;
width:100%;
margin:0px;
display:cover;
z-index:-3 //<=-3
}
que celui javascript/jquery:
j'avais besoin de changer l'image d'arrière-plan toutes les trois secondes, j'ai donc utilisé un délai d'expiration défini.
c'est le code:
$(document).ready(main);
var main = function(){
var imgPath=[imagesPath1,..,...]; // the array in which store the image paths
var newWrapper; // the wrapper to display
var currentWrapper; //the current displayed wrapper which has to be faded
var l=2; // the next image index to be displayed, it is set to 2 because the first two position of the array(first two images) start already setted up
var imgNumber= imgPath.length; //to know when the images are over and restart the carousel
var currentImg; //the next image path to be displayed
$('#wrapper1').css("background-image", 'url'+imgPath[0]); //pre set the first wrapper background images
$('#wrapper2').css("background-image", 'url'+imgPath[1]); //pre set the first wrapper background images
setInterval(myfunction,3000); //refresh the background image every three seconds
function myfunction(){
if(l===imgNumber-1){ //restart the carousel if every single image has already been displayed
l=0;
};
if(l%2==0||l%2==2){ //set the wrapper that will be displaied after the fadeOut callback function
currentWrapper='#wrapper1';
newWrapper='#wrapper2';
}else{
currentWrapper='#wrapper2';
newWrapper='#wrapper1';
};
currentImg=imgPath[l];
$(currentWrapper).fadeOut(1000,function(){ //fade out the current wrapper, so now the back-ground wrapper is fully displayed
$(newWrapper).css("z-index", "-1"); //move the shown wrapper in the fore-ground
$(currentWrapper).css("z-index","-2"); //move the hidden wrapper in the back ground
$(currentWrapper).css("background-image",'url'+currentImg); // sets up the next image that is now shown in the actually hidden background wrapper
$(currentWrapper).show(); //shows the background wrapper, which is not visible yet, and it will be shown the next time the setInterval event will be triggered
l++; //set the next image index that will be set the next time the setInterval event will be triggered
});
}; //end of myFunction
} //end of main
j'espère que ma réponse est claire, si vous avez besoin de plus d'explications, commentez-le.
désolé pour mon anglais :)