Управление размерами блочных контейнеров
Управление размерами блочных контейнеров
И первое, что мы сделаем, — заставим блочные контейнеры на наших Web-страницах изменять свои размеры так, чтобы занимать всю клиентскую область окна Web-обозревателя и при этом не выходить за ее пределы.
Сначала откроем таблицу стилей main.css и найдем в ней стиль переопределения тега <BODY>. Изменим его так, как показано в листинге 16.1.
Листинг 16.1
BODY { color: #3B4043; background-color: #F8F8F8; font-family: Verdana, Arial, sans-serif; margin: 0px; overflow: hidden }
Мы добавили в этот стиль атрибут overflow со значением hidden, тем самым убрав у всей Web-страницы полосы прокрутки. Они нам не нужны, более того, появляясь в самый неподходящий момент, они могут нарушить местоположение блочных контейнеров.
Сохраним таблицу стилей. И сразу же откроем файл Web-сценариев main.js. В самом его начале, еще до вызова метода onReady объекта Ext, вставим код листинга 16.2.
Листинг 16.2
function adjustContainers() {
var clientWidth = Ext.lib.Dom.getViewportWidth();
var clientHeight = Ext.lib.Dom.getViewportHeight();
var cNavbarWidth = Ext.get("cnavbar"). getWidth();
var cHeaderHeight = Ext.get("cheader"). getHeight();
var cCopyrightHeight = Ext.get("ccopyright"). getHeight();
Ext.get("cheader"). setWidth(clientWidth);
var cNavbarHeight = clientHeight — cHeaderHeight — cCopyrightHeight -30; Ext.get("cnavbar"). setHeight(cNavbarHeight); Ext.get("cmain"). setHeight(cNavbarHeight); Ext.get("cmain"). setWidth(clientWidth — cNavbarWidth—10); Ext.get("ccopyright"). setWidth(clientWidth);
}
В конце тела функции, которую мы передаем в качестве параметра методу onReady
объекта Ext, вставим два выражения:
Ext.fly(window). on("resize", adjustContainers);
adjustContainers();
Сохраним файл main.js. Откроем Web-страницу index.htm в Web-обозревателе — и сразу отметим, что блочные контейнеры приняли такие размеры, чтобы занять всю клиентскую область окна Web-обозревателя. Попробуем изменить размеры окна и понаблюдаем, как меняются размеры контейнеров.
Но как все это работает? Сейчас разберемся.
Код, добавленный нами в файл main.js, объявляет функцию adjustContainers, которая станет обработчиком события resize окна Web-обозревателя. Именно эта функция будет задавать размеры контейнеров. Давайте рассмотрим ее код построчно.
Сначала мы получаем ширину и высоту клиентской области окна Web-обозревателя:
var clientWidth = Ext.lib.Dom.getViewportWidth();
var clientHeight = Ext.lib.Dom.getViewportHeight();
К данным значениям мы будем обращаться не один раз, так что лучше сохранить их в переменных. Ведь доступ к переменной выполняется значительно быстрее, чем вызов метода.
Затем получаем ширину контейнера cnavbar, высоту контейнеров cheader и ccopyright:
var cNavbarWidth = Ext.get("cnavbar"). getWidth();
var cHeaderHeight = Ext.get("cheader"). getHeight();
var cCopyrightHeight = Ext.get("ccopyright"). getHeight();
Эти значения также понадобятся нам в дальнейшем.
Далее задаем ширину контейнера cheader равной ширине клиентской области окна Web-обозревателя:
Ext.get("cheader"). setWidth(clientWidth);
Вычисляем высоту контейнеров cnavbar и cmain:
var cNavbarHeight = clientHeight — cHeaderHeight — cCopyrightHeight -30;
Для этого вычитаем из высоты клиентской области высоту контейнеров cheader и ccopyright и дополнительно 30 пикселов — чтобы создать отступ между нижним краем контейнера ccopyright и нижним краем клиентской области.
Задаем полученное ранее значение в качестве высоты контейнеров cnavbar и cmain:
Ext.get("cnavbar"). setHeight(cNavbarHeight); Ext.get("cmain"). setHeight(cNavbarHeight);
Задаем ширину контейнера cmain:
Ext.get("cmain"). setWidth(clientWidth — cNavbarWidth — 10);
Ее значение получаем, вычтя из ширины клиентской области ширину контейнера cnavbar и еще 10 пикселов — величину внешнего отступа между ними (он задан в именованном стиле navbar атрибутом стиля margin-right).
Напоследок задаем ширину контейнера ccopyright равной ширине клиентской области окна Web-обозревателя:
Ext.get("ccopyright"). setWidth(clientWidth);
На этом выполнение функции adjustContainers закончилось.
Теперь рассмотрим два выражения, помещенные в тело функции, являющейся параметром метода onReady объекта Ext.
Привязываем функцию adjustContainers в качестве обработчика к событию resize окна Web-обозревателя:
Ext.fly(window). on("resize", adjustContainers);
И сразу же ее вызываем, чтобы контейнеры приняли правильные размеры сразу после загрузки Web-страницы:
adjustContainers();
Вот и все. Согласитесь — ничего сложного.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Размещение текста при помощи контейнеров блоков: <fo:block-container>
Размещение текста при помощи контейнеров блоков: <fo:block-container> Процессоры XSL-FO в одном отношении похожи на браузеры HTML: они вставляют блоки в «поток» (flow) страницы, что означает, что эти блоки могут перемещаться по документу, как в HTML-браузере. С другой стороны, иногда
Стили, задающие параметры контейнеров
Стили, задающие параметры контейнеров И неудивительно. Вспомним, что мы знаем о контейнерах, и блочных, и встроенных. Они никак не отображаются в Web-обозревателе!Чтобы ощутить пользу от контейнеров, мы должны применить к ним стили. Именно для этого контейнеры и
Управление размерами блочных контейнеров
Управление размерами блочных контейнеров И первое, что мы сделаем, — заставим блочные контейнеры на наших Web-страницах изменять свои размеры так, чтобы занимать всю клиентскую область окна Web-обозревателя и при этом не выходить за ее пределы.Сначала откроем таблицу
Файлы блочных устройств
Файлы блочных устройств Файлы блочных устройств служат интерфейсом к устройствам, обмен данными с которыми происходит большими фрагментами, называемыми блоками. При этом ядро операционной системы обеспечивает необходимую буферизацию. Примером физических устройств,
Стили, задающие параметры контейнеров
Стили, задающие параметры контейнеров И неудивительно. Вспомним, что мы знаем о контейнерах, и блочных, и встроенных. Они никак не отображаются в Web-обозревателе!Чтобы ощутить пользу от контейнеров, мы должны применить к ним стили. Именно для этого контейнеры и
Глава 6 Управление данными с помощью контейнеров
Глава 6 Управление данными с помощью контейнеров 6.0. Введение Эта глава описывает структуры данных стандартной библиотеки, используемые для хранения данных. Часто они также называются контейнерами (containers), так как они содержат («contain») хранящиеся в них объекты. Также эта
6.9. Хранение контейнеров в контейнерах
6.9. Хранение контейнеров в контейнерах ПроблемаИмеется несколько экземпляров стандартного контейнера (list, set и т.п.) и требуется сохранить их в еще одном контейнере.РешениеСохраните в главном контейнере указатели на остальные контейнеры. Например, можно использовать map
Работа с гарнитурами и размерами шрифтов
Работа с гарнитурами и размерами шрифтов Давайте теперь построим более сложное приложение. Позволяющее пользователю манипулировать объектом Font, поддерживаемым формой. Это приложение предоставит пользователю возможность указать гарнитуру шрифта, используя встроенный
Совет 7. При использовании контейнеров указателей, для которых вызывался оператор new, не забудьте вызвать delete для указателей перед уничтожением контейнера
Совет 7. При использовании контейнеров указателей, для которых вызывался оператор new, не забудьте вызвать delete для указателей перед уничтожением контейнера Контейнеры STL отличаются умом и сообразительностью. Они поддерживают итераторы для перебора как в прямом, так и в
Совет 12. Разумно оценивайте потоковую безопасность контейнеров STL
Совет 12. Разумно оценивайте потоковую безопасность контейнеров STL Мир стандартного С++ выглядит старомодным и не подверженным веяниям времени. В этом мире все исполняемые файлы компонуются статически, в нем нет ни файлов, отображаемых на память, ни общей памяти. В нем нет
Совет 23. Рассмотрите возможность замены ассоциативных контейнеров сортированными векторами
Совет 23. Рассмотрите возможность замены ассоциативных контейнеров сортированными векторами Многие программисты STL, столкнувшись с необходимостью структуры данных с быстрым поиском, немедленно выбирают стандартные ассоциативные контейнеры set, multiset, map и multimap. В этом
Совет 44. Используйте функции контейнеров вместо одноименных алгоритмов
Совет 44. Используйте функции контейнеров вместо одноименных алгоритмов Некоторые контейнеры содержат функции, имена которых совпадают с именами алгоритмов STL. Так, в ассоциативных контейнерах существуют функции count, find, lower_bound, upper_bound и equal_range, а в контейнере list
Адаптеры контейнеров (Container adaptors)
Адаптеры контейнеров (Container adaptors) Часто бывает полезно обеспечить ограниченные интерфейсы контейнеров. Библиотека предоставляет stack, queue и priority_queue через адаптеры, которые могут работать с различными типами
Современный город: система подземных контейнеров для сбора мусора Николай Маслухин
Современный город: система подземных контейнеров для сбора мусора Николай Маслухин Опубликовано 06 марта 2013 Огромное количество мусора, его хранение и регулярный вывоз — постоянная головная боль всех мегаполисов. Мусорные баки быстро
Дронов Владимир
Просмотр ограничен
Смотрите доступные для ознакомления главы 👉