Je développe une page jQuery Mobile dans laquelle mon CSS est
.ui-content {
background: transparent url('./images/bg.jpg');
background-size : 100% 100%;
min-height: 100%;
color:#FFFFFF;
text-shadow:1px 1px 1px #000000;
}
mais la page affiche comme ça
Je ne veux pas de cet espace vide entre le contenu et le pied de page Hauteur du contenu jusqu'au pied de page
J'ai ajouté un Pure CSS Solution ci-dessous.
J'ai remarqué que .ui-content
div ne remplit pas l'espace vide à 100%, il manque toujours 2px
. Celles-ci proviennent de fixe barres d'outils en-tête et pied de page, car elles ont respectivement margin-top: -1px
et margin-bottom: -1px
. ( violon )
Ce n'était pas évident auparavant, car page div _ et pied de page_ ont le même data-theme="b"
noir__. J'ai changé le .ui-page
de background-color: red;
pour montrer la différence.
Par conséquent, pour obtenir les meilleurs résultats, il est nécessaire de vérifier si barres d'outils sont corrigés. Voici la solution améliorée.
var screen = $.mobile.getScreenHeight();
var header = $(".ui-header").hasClass("ui-header-fixed") ? $(".ui-header").outerHeight() - 1 : $(".ui-header").outerHeight();
var footer = $(".ui-footer").hasClass("ui-footer-fixed") ? $(".ui-footer").outerHeight() - 1 : $(".ui-footer").outerHeight();
/* content div has padding of 1em = 16px (32px top+bottom). This step
can be skipped by subtracting 32px from content var directly. */
var contentCurrent = $(".ui-content").outerHeight() - $(".ui-content").height();
var content = screen - header - footer - contentCurrent;
$(".ui-content").height(content);
Étant donné que fixe barres d'outils dans jQuery Mobile 1.2 et versions ultérieures ne reçoivent pas -1
pour top
bottom
, il n'est pas nécessaire de soustraire 1px
de .outerHeight()
de la barre d'outils.
var header = $(".ui-header").outerHeight();
var footer = $(".ui-footer").outerHeight();
_/ Démo - avec barres d'outils fixes
Démo - sans barres d'outils fixes (1)
(1) Sur la page du navigateur de bureau, défilez de 1 pixel Cependant, sur les appareils mobiles, ce n'est pas le cas. Cela est dû à la hauteur de body
définie sur 99.9%
et de .ui-page
à 100%
.
Ceci est juste pour ajouter quelques points à la réponse de @ Omar.
Sa mise à jour VIOLON
Mettez son code de redimensionnement dans une fonction et ajoutez scroll (0,0) en haut. Ceci élimine les problèmes étranges pouvant survenir lors des changements d'orientation (portrait par paysage) sur certains appareils.
function ScaleContentToDevice(){
scroll(0, 0);
var content = $.mobile.getScreenHeight() - $(".ui-header").outerHeight() - $(".ui-footer").outerHeight() - $(".ui-content").outerHeight() + $(".ui-content").height();
$(".ui-content").height(content);
}
La fonction doit ensuite être appelée sur pagecontainershow (pageshow si jQM 1.3) et vous devez ajouter un gestionnaire pour le redimensionnement et l’orientation de la fenêtre afin de conserver la taille correcte du contenu lorsque la taille de la fenêtre de visualisation change:
$(document).on( "pagecontainershow", function(){
ScaleContentToDevice();
});
$(window).on("resize orientationchange", function(){
ScaleContentToDevice();
});
Remarque importante: Utilisez cette solution pour des pages spécifiques pour lesquelles vous ne souhaitez pas que le contenu de la page ou de la page défile verticalement. Parce que la page
height
sera définie sur100%
, elle ne défilera donc pas et vous ferez face à ce problème - problème .
Plein écran:
html,
body,
#pageID { /* specify page */
height: 100%;
margin: 0;
padding: 0;
}
#pageID .ui-content {
padding: 0;
}
.ui-content,
.ui-content #full-height-div { /* divs will inherit page's height */
height: inherit;
}
Barres d'outils fixes (en-tête/pied de page):
html,
body,
#pageID {
height: 100%;
margin: 0;
padding: 0;
}
#pageID,
#pageID * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#pageID .ui-content {
height: inherit; /* inherit height without padding nor border */
}
Barres d'outils flottantes:
html,
body,
#pageID {
height: 100%;
margin: 0;
padding: 0;
}
#pageID,
#pageID * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#pageID .ui-content {
height: calc(100% - 89px); /* 88px = header's height 44px and footer's 44px plus 1px */
}
Vous pouvez atteindre "hauteur 100%" avec CSS uniquement. Ajoutez les éléments suivants à votre sélecteur de contenu d'interface utilisateur:
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
Testé sur jQuery Mobile v1.4.3
Je change la réponse de @ezanker.
Cela fonctionne, mais si j'ai deux pages, la page 2 sera redimensionnée lorsque je passerai à la page 2 de la page 1.
Et si je change l'événement pagecontainershow
en pagecontainerbeforeshow
, il ne fonctionnera pas correctement.
Je débogue et trouve la hauteur de l'en-tête ou du pied de page qui est erroné avant le spectacle.
code
function ScaleContentToDevice(nextPage){
var screen = $.mobile.getScreenHeight();
var header = nextPage.children(".ui-header").hasClass("ui-header-fixed") ? nextPage.children(".ui-header").outerHeight() - 1 : nextPage.children(".ui-header").outerHeight();
var footer = nextPage.children(".ui-footer").hasClass("ui-footer-fixed") ? nextPage.children(".ui-footer").outerHeight() - 1 : nextPage.children(".ui-footer").outerHeight()
var contentCurrent = nextPage.children(".ui-content").outerHeight() - nextPage.children(".ui-content").height();
var content = screen - header - footer - contentCurrent;
nextPage.children(".ui-content").height(content);
}
$(document).on( "pagecontainershow", function(event, ui){
var nextPage = $(ui.toPage[0]);
ScaleContentToDevice(nextPage);
});
Avec CSS pur fonctionne bien pour les pages de portrait. Vous devez définir les positions supérieure et inférieure en fonction de la hauteur de votre en-tête et du pied de page.
position: absolute;
top: 88px; /*your header height*/
right: 0;
bottom: 44px; /*your footer height */
left: 0;
background: white;
la réponse simple n’est pas de redimensionner le contenu, mais de changer la couleur de fond de la page active comme ceci ...
.ui-page-active {background: #f1f1f1; }
... pour correspondre à la couleur du contenu de l'interface utilisateur et tout à coup le problème disparaît.