Я создаю приложение Polymer, основанное на концепциях шаблона prpl, поддерживаемого в Google IO в этом году. В частности, связанные с этим вопросом это означает, что существует index.html файл, который загружает polyfil веб-компонентов и имеет один элемент в своем теле <my-app>
Как правильно нарисовать мое приложение Polymer для управления прокруткой
<my-app>
в свою очередь, использует полимерные элементы <app-header-layout>
установить, чтобы обеспечить эффект водопада на верхняя панель инструментов, некоторые управления сеансом (для обеспечения входа пользователя в систему), а затем делегирует все остальное элементу <my-pages>
. В упрощенных терминах <my-app>
выглядит следующим образом: -
<app-header-layout>
<app-header fixed effects="waterfall">
<app-toolbar>
<h4 >Part of my toolbar</h4>
</app-toolbar>
</app-header>
<my-pages></my-pages>
</app-header-layout>
<my-pages>
использует <iron-pages>
элемента, чтобы позволить пользователю выбирать среди различных страниц, каждая страница которого является его собственным элементом. В упрощенной форме, как это: -
<iron-pages role="main" selected="[[page]]" attr-for-selected="name" >
<my-menu name="home" menu-page="{{page}}"></my-menu>
<my-list name="list" list-page="{{page}}"></my-list>
<my-long-page name="long" long-page="{{page}}"></my-long-page>
</iron-pages>
Причина мой пример имеет три страницы, потому что есть три случая, которые я хочу, чтобы покрыть. <my-menu>
- это гибкая компоновка, состоящая из множества кнопок и нескольких отдельных элементов , используемых для группировки меню в разделы. В обычном сценарии рабочего стола это удобно находится в пределах экрана, но при отображении на смартфоне потребуется прокрутка для доступа к всем кнопкам. <my-long-page>
- пример страницы с большим количеством контента. Для этого потребуется прокрутка для доступа к содержимому в нижней части страницы.
<my-list>
является сложным - он будет состоять из заголовка, а затем элемента <iron-list>
. Пример компоновки выглядит следующим образом: -
<div class="title">
<span>List Page</span>
<paper-button id="return" raised>Return To Menu</paper-button>
</div>
<div class="header">This is the heading for my List</div>
<iron-list items="[[data]]" as="row">
<template>
<div class="row" tabindex$="[[tabIndex]]" index="[[index]]">
<div class="field">[[row.id]]</div>
<div class="field">[[row.name]]</div>
<div class="field">[[row.outcome]]</div>
</div>
</template>
</iron-list>
В основном, мой список страниц есть контролируемый набор столбцов, но есть один класс страницы, где сервер посылает столбцы, которые будут отображаться обратно в запросе AJAX, чтобы получить данные. В этом случае я должен использовать элемент <template is="dom-repeat">
для отображения полей (как в верхнем заголовке списка, так и в содержимом строки списков).
Это приложение выросло органично в течение последних нескольких месяцев, и мой стиль - беспорядок. Несмотря на все мои усилия, большинство страниц имеют полосу прокрутки справа, даже когда контент не оправдывает ее, а страница <my-list>
трудно получить полностью. Поэтому я делаю шаг назад, нарушая стиль и пытаясь приблизиться к нему с нуля. Я хочу использовать Полимеры сгибать-Box Примеси (например, @apply(--layout-vertical);
и т.д.) в каждом из стилей пользовательских элементов для достижения следующего: -
- панель инструментов, которая остается в верхней части страницы всегда, с эффектом водопада, если контент должен прокручиваться под ним.
- Гибкая компоновка, которая будет работать на настольных компьютерах, планшетах и телефонах
- В большинстве случаев горизонтальная полоса прокрутки - когда страницы сжимаются до минимальной ширины после их сгибания, и они все еще находятся за пределами устройства, которым они являются после чего должна появиться горизонтальная полоса прокрутки
- Когда содержимое страницы меньше, чем вертикальное пространство на экране, чтобы не было вертикальной полосы прокрутки, когда больше, чем вертикальное пространство, чтобы иметь полосу прокрутки.
- Страница
<my-list>
должна точно соответствовать экрану в большинстве случаев (поэтому нет полосы прокрутки для страницы в обычных условиях) с высотой элемента<iron-list>
, чтобы полностью заполнить оставшееся вертикальное пространство на экране под заголовками.Разумеется, это вызовет собственную полосу прокрутки, если количество элементов в ее списке превышает доступное пространство. Это пространство для<iron list>
должно иметь минимальную высоту, так что, когда высота экрана слишком мала, тогда и только тогда может появиться вторая, ориентированная на страницу вертикальная полоса прокрутки.
Я изо всех сил, чтобы достичь этого - в частности, элемент с <iron-list>
можно легко установить его высоту до фиксированного размера, и он будет работать, но всякий раз, когда я пытаюсь применить прогибается, кажется, вырастет до полного размера его содержимое, а затем общая страница заканчивается прокруткой, и я теряю заголовок списка. Самое близкое, что я до сих пор использовал, чтобы использовать calc (100vh -200px) для установки высоты, но для этого требуется, чтобы я угадал (или знал) высоту заголовка над списком.
То, что я ищу это руководство относительно того, что положить внутрь <style>
внутри <template>
каждого из пользовательских элементов для достижения целей, перечисленных выше, в самой элегантной манере
Спасибо за весь этот ввод. Мне нужно потратить некоторое время на рассмотрение, прежде чем принимать в качестве ответа. Я решил одну проблему, и из-за этого я скопировал свой стиль приложения (я думаю, пример с использованием более высокой версии фонового изображения app-header), и у него был большой запас в нижней части области страницы. Именно это вызвало ложную дополнительную вертикальную полосу прокрутки. – akc42