J'y travaille depuis quelques heures et la recherche sur le Web et le stackoverflow ne m'ont pas beaucoup aidé. Comment faire pour que #gradient
et #holes
remplissent la page entière?
J'ai utilisé la fonctionnalité Inspecter un élément dans Safari et lorsque je mets en surbrillance l'élément body, il ne remplit pas toute la fenêtre.
alt text http://img534.imageshack.us/img534/9955/screenshot20100201at215.png
HTML:
<body>
<div id="gradient"></div>
<div id="holes"></div>
<div id="header">Header Text</div>
</body>
CSS:
html, body {
height:100%;
margin:0;
padding:0;
}
body {
background-image:url(../Images/Tile.png);
background-color:#7D7D7D;
background-repeat:repeat;
}
#gradient {
background-image:url(../Images/Background.png);
background-repeat:repeat-x;
position:absolute;
top:0px;
left:0px;
height:100%;
right:0px;
}
#holes {
background-image:url(../Images/Holes.png);
background-repeat:repeat;
position:absolute;
top:2px;
left:2px;
height:100%;
right:0px;
}
#header {
background-image:url(../Images/Header.png);
background-repeat:repeat-x;
position:absolute;
top:0px;
left:0px;
width:100%;
padding-top:24px;
height:49px; /* 73 - padding */
color:rgb(113, 120, 128);
font-family:Helvetica, Arial;
font-weight:bold;
font-size:24px;
text-align:center;
text-shadow:#FFF 0px 1px 0px;
}
Eh bien, il me semble que votre élément avec tout le contenu est flottant. Si c'est le cas, son corps ne va pas agrandir le corps à moins qu'il ne soit nettoyé.
Notez que la propriété hauteur spécifiée dans pourcentage est calculée avec le respect du bloc conteneur ..qui ne doit pas nécessairement être l'ancêtre immédiat - " Le bloc conteneur d'une boîte positionnée est établi par l'ancêtre positionné le plus proche ou, s'il n'en existe pas, par le bloc initial contenant " . Je parie que c'est ce qui se passe dans le cas du questionneur puisqu'il n'y a pas d'ancêtre positionné (celui avec position:
réglé soit sur relative
ou absolute
).
Donc, le "bloc contenant" se résout en le bloc contenant initial qui correspond aux dimensions de la fenêtre (fenêtre). Régler position:relative
sur body
tiendra compte de la hauteur de body
et étendra complètement le contenu en position absolue le long de body
.
J'avais le même problème. Corrigé en changeant de position: absolu en position: fixe.
[mettre à jour]
nouvelle approche
.__ Cela devrait le faire ..
utiliser display:table
sur vos 2 éléments devrait le faire (cela fonctionne dans mes tests). (mais vous devrez assigner des valeurs de largeur maintenant ..
Cependant, je ne suis pas sûr que vous deviez définir des éléments imbriqués sous forme de tableau-cellule, etc.
Essayez cependant ..
#gradient
et #holes
les suivants?#gradient {
height:auto!important;
height:100%;
min-height:100%;
..
..
}
#holes{
height:auto!important;
height:100%;
min-height:100%;
..
..
}
$('div.class').css({'height':(($(document).height()))+'px'});
Avez-vous essayé de vous installer comme ça?
#holes {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
Étire l'élément pour remplir toute la surface de la page
Le meilleur moyen est d'utiliser javascript. min-height n'est pas supporté par tous les navigateurs.
Javascript utilisant un prototype:
<script type="text/javascript">
var height = $(document.body).getHeight();
document.write('<div id="yourdiv" style="height:'+height+'px;width:100%;"></div>');
</script>
Appliquez les styles CSS à #gradient & #holes et placez le script après votre DIV.
.background-overlay{
position: absolute;
left: 0;
right: 0;
z-index: -1;
}
<body>
<div id="gradient"></div>
<div id="holes"></div>
<script type="text/javascript">
$(document).ready(function() {
var bodyHeight = $("body").height();
$('#gradient,#holes').height(bodyHeight);
})
</script>
<div id="header">Header Text</div>
Je pense que vous avez bien fait les choses. Cela fonctionne dans Chrome (WebKit aussi!) Et dans IE7/8/Quirks à chaque fois que vous mettez width: 100% sur #gradient et # trous, impossible de tester le safari sur Mac pour le moment vous devriez le voir correctement.
Cela dit, c'est peut-être un problème de doctype, essayez-vous de différents?
Pour être honnête, je pense que je vais simplement overflow:auto
sur mon contenu afin que la page entière ne nécessite pas de défilement