J'ai un wrapper positionné au centre avec une image d'arrière-plan répétée en y:
<body>
<div id="wrapper">
...some content
</div>
</body>
#wrapper{
width: 900px;
margin: 0 auto 0 auto;
background-image: url(image.jpg) 250px 0px repeat-y;
}
Problème: lorsque la taille de la fenêtre est supérieure à la hauteur du wrapper héritée de son contenu, l'image ne se répète évidemment pas sur l'axe des y jusqu'en bas de la fenêtre.
J'ai utilisé jQuery pour appliquer dynamiquement le style CSS en ligne à l'encapsuleur en fonction de la hauteur réelle du document (lorsque DOM est prêt et lors de l'événement de redimensionnement de la fenêtre):
$(function(){
$('#wrapper').css({'height':($(document).height())+'px'});
$(window).resize(function(){
$('#wrapper').css({'height':($(document).height())+'px'});
});
});
Le problème avec cette approche est que chaque fois que l'on étend la hauteur de la fenêtre à une taille plus grande que la plus grande taille précédemment redimensionnée, la hauteur du document s'étend par cette différence, ce qui rend le wrapper DIV infini si vous continuez à redimensionner la fenêtre à l'infini et que vous avez une infinie espace d'affichage vertical.
Sur un écran typique de 30 pouces avec une hauteur de 1600 pixels, lorsque l'utilisateur ouvre le site Web avec une hauteur de fenêtre de 1000 pixels et un wrapper de 800 pixels de haut, la requête jQuery ci-dessus définit la hauteur sur 1000 pixels en mosaïque correctement l'image d'arrière-plan. À ce stade, une fois que l'utilisateur étend la la taille de la fenêtre à par exemple 1400px, le 1400px est une nouvelle taille de document "mémorisé par défaut" et ne se met pas à jour même si l'utilisateur redimensionne sa fenêtre à la hauteur originale de 1000px, ajoutant 400px à la hauteur de la barre de défilement au fond.
Comment régler ceci?
MISE À JOUR: (fenêtre) .height ne semble pas fonctionner, car la hauteur de la fenêtre est une hauteur de fenêtre. Lorsque votre fenêtre est plus petite que le contenu et que vous la faites défiler, l'encapsuleur conserve toujours la taille de la fenêtre et ne s'étend pas jusqu'au bas de la position actuelle de la fenêtre.
Je l'ai compris moi-même à l'aide de la réponse de quelqu'un. Mais il l'a supprimé pour une raison quelconque.
Voici la solution:
Écoutez l'événement (window) .resize et appliquez UNIQUEMENT la hauteur CSS en ligne SI la fenêtre est plus grande que la hauteur de #truecontent, sinon conservez intacte
$(function(){
var windowH = $(window).height();
var wrapperH = $('#wrapper').height();
if(windowH > wrapperH) {
$('#wrapper').css({'height':($(window).height())+'px'});
}
$(window).resize(function(){
var windowH = $(window).height();
var wrapperH = $('#wrapper').height();
var differenceH = windowH - wrapperH;
var newH = wrapperH + differenceH;
var truecontentH = $('#truecontent').height();
if(windowH > truecontentH) {
$('#wrapper').css('height', (newH)+'px');
}
})
});
Le moyen le plus simple consiste à ajouter:
$('#ID').css("height", $(document).height());
après que la hauteur de page correcte est déterminée par le navigateur. Si la hauteur du document est modifiée une nouvelle fois, réexécutez le code ci-dessus.
Vous pouvez le faire absolute
et mettre des zéros à top
et bottom
c'est-à-dire:
#fullHeightDiv {
position: absolute;
top: 0;
bottom: 0;
}
moyen le plus simple que j'ai trouvé est la hauteur de la fenêtre d'affichage dans css ..
div {height: 100vh;}
cela prend la hauteur de la fenêtre de la fenêtre du navigateur et la met à jour lors des redimensionnements.
voir "puis-je utiliser" pour la liste de compatibilité du navigateur
html, body {
height:100%;
}
#wrapper {
min-height:100%;
}
c'est comme ça que j'ai répondu
<script type="text/javascript">
function resizebg(){
$('#background').css("height", $(document).height());
}
$(window).resize(function(){
resizebg();
});
$(document).scroll(function(){
resizebg();
});
//initial call
resizebg();
</script>
css:
#background{
position:absolute;
top:0;
left:0;
right:0;
}
donc, fondamentalement, à chaque événement de redimensionnement, je remplacerai la hauteur de la division dans ce cas, une image que j'utilise comme superposition pour l'arrière-plan et l'avoir avec une opacité pas si colorée aussi je peux la teindre dans mon cas avec la couleur d'arrière-plan.
mais c'est une autre histoire
Utilisation #element{ height:100vh}
Cela définira la hauteur du #element
à 100% de viewport
. J'espère que cela t'aides.
comment c'est
<style type="text/css">
#wrapper{
width: 900px;
margin: 0 auto 0 auto;
background: url('image.JPG') 250px 0px repeat-y;
}
</style>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
function handleResize() {
var h = $(window).height();
$('#wrapper').css({'height':h+'px'});
}
$(function(){
handleResize();
$(window).resize(function(){
handleResize();
});
});
</script>
</head>
<body>
<div id="wrapper">
...some content
</div>
</body>
pourquoi n'utilisez-vous pas width: 100%
et height: 100%
.