Подтвердить что ты не робот

Установить высоту контента 100% jquery mobile

Я разрабатываю страницу jQuery Mobile, в которой мой CSS

.ui-content {
  background: transparent url('./images/bg.jpg');
  background-size : 100% 100%;
  min-height: 100%;
  color:#FFFFFF;
  text-shadow:1px 1px 1px #000000;
}

но страница отображается следующим образом

enter image description here

Я не хочу, чтобы пустое пространство между контентом и нижним колонтитулом высота содержимого до нижнего колонтитула

4b9b3361

Ответ 1

Update

Я добавил Pure CSS Solution ниже.

Я заметил, что .ui-content div не заполняет пустое пространство 100%, он все еще отсутствует 2px. Это происходит из фиксированных панелей заголовков и нижних колонтитулов, так как они имеют margin-top: -1px и margin-bottom: -1px соответственно. (fiddle)

enter image description here

Это было не очевидно, так как обе страницы и нижний колонтитул имеют тот же черный data-theme="b". Я изменил .ui-page background-color: red;, чтобы показать разницу.

Поэтому для достижения наилучших результатов необходимо проверить, установлены ли панели инструментов. Ниже приведено расширенное решение.

jQM >= 1.3

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

jQM <= 1,2

Поскольку фиксированные панели инструментов в jQuery Mobile 1.2 и ниже не получают -1 для top/bottom, нет необходимости вычитать 1px из панели инструментов .outerHeight().

var header = $(".ui-header").outerHeight();

var footer = $(".ui-footer").outerHeight();

Демо - w/fixed toolbars

Демо - без фиксированных панелей инструментов (1)

(1) На странице браузера рабочего стола будет прокручиваться на 1px; однако на мобильном устройстве этого нет. Это вызвано высотой body, установленной на 99.9% и .ui-page до 100%.

Ответ 2

Это просто добавить пару аргументов в ответ @Omar.

Обновленный FIDDLE

Поместите свой код масштабирования внутри функции и добавьте прокрутку (0,0) вверх. Это устраняет странные проблемы, которые могут возникать при изменении ориентации (портретный пейзаж) на некоторых устройствах.

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

Затем функция должна быть вызвана на pagecontainershow (страницы, если jQM 1.3), и вы должны добавить обработчик для изменения размера окна и изменения ориентации, чтобы сохранить размер контента должным образом при изменении размера видового экрана:

$(document).on( "pagecontainershow", function(){
    ScaleContentToDevice();        
});

$(window).on("resize orientationchange", function(){
    ScaleContentToDevice();
});

Ответ 3

Чистое решение CSS

Важное примечание: Используйте это решение для определенных страниц, где вы не хотите, чтобы страница или контент страницы прокручивались по вертикали. Поскольку страница height будет установлена ​​на 100%, следовательно, она не будет прокручиваться, и вы столкнетесь с этой проблемой .

  • Полноэкранный режим:

    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 height */
      height: inherit;
    }
    

    Демо


  1. Исправлены панели инструментов (верхний/нижний колонтитул):

    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 */
    }
    

    Демо


    1. Плавающие панели инструментов:

      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 height 44px and footer 44px plus 1px */
      }
      

      Демо

Ответ 4

Вы можете достичь "высоты 100%" только с помощью CSS. Добавьте в свой селектор ui-содержимого следующее:

position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;

Протестировано на jQuery Mobile v1.4.3

Ответ 5

С чистым CSS прекрасно работает для портретных страниц. Вы должны установить верхнее и нижнее положение в зависимости от высоты вашего верхнего и нижнего колонтитулов

position: absolute;
top: 88px; /*your header height*/
right: 0;
bottom: 44px; /*your footer height */
left: 0;
background: white;

Ответ 6

Я изменяю ответ @ezanker.

Это работает, но если у меня есть две страницы, страница 2 изменит размер, когда я перейду на страницу 2 со страницы 1.

И если я меняю событие pagecontainershow на pagecontainerbeforeshow, он работает неправильно.

Я отлаживаю и обнаруживаю, что высота верхнего или нижнего колонтитула неверна перед показом.

код

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

Ответ 7

position: fixed;
height: 100%;

сделает это!