Статьи

ZK в действии: стиль и макет

В предыдущих постах ZK in Action мы реализовали функцию CRUD с использованием ZK MVVM . Мы также быстро просмотрели некоторый код стиля, который заслуживает большего объяснения.

В этой статье мы рассмотрим, как добавлять новые правила стилей CSS в виджеты ZK и как переопределить существующие стили. Мы также познакомим вас с некоторыми основами макета пользовательского интерфейса в ZK.

Задача

  • Используйте макет ZK и виджеты контейнеров для размещения функции инвентаризации CRUD, которую мы создали в предыдущих постах.
  • Стиль виджетов ZK

ZK Особенности в действии

  • BorderLayout
  • Hlayout
  • Tabbox
  • Включают
  • sclass
  • zclass

Использование макетов и контейнеров Borderlayout и Hlayout

Borderlayout делит окно на 5 секций, как показано ниже:

Без лишних слов рассмотрим разметку и посмотрим, как она работает:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<window ...'>
 <borderlayout width='100%' height='100%'>
  <north size='15%'>
   <hlayout width='100%' height='100%'>
   <label hflex='9' value='Alpha Dental' />
   <label hflex='1' value='Sign Out' ></label>
   </hlayout>
  </north>
  <east size='10%'></east>
  <center>
   <tabbox width='100%' height='100%' orient='vertical'>
    <tabs width='15%'>
     <tab label='Inventory' />
     <tab label='TBD' />
     <tab label='TBD'/>
    </tabs>
    <tabpanels>
     <tabpanel>
      <include src='inventory.zul'/>
     </tabpanel>
     <tabpanel></tabpanel>
     <tabpanel></tabpanel>
    </tabpanels>
   </tabbox>
  </center>
  <west size='10%' ></west>
  <south size='10%'></south>
 </borderlayout>
  • в строке 3 и 27 виджеты север и юг можно настроить по высоте, но не по ширине.
  • в строках 9 и 26 виджеты на восток и запад можно отрегулировать по ширине, но не по высоте
  • В строке 10 размеры виджета в центре зависят от значений, введенных для виджетов север, запад, юг и восток.
  • со строки 4 по 7 мы обертываем две метки Hlayout, чтобы они отображались бок о бок пропорционально указанному нами атрибуту hflex. То есть метка, назначенная с помощью hflex = ‘9’, в 9 раз больше ширины метки, назначенной с помощью hflex = ‘1’.
  • каждый внутренний виджет (север, запад и т. д.) может принимать только один дочерний компонент, поэтому несколько виджетов должны быть обернуты одним контейнерным виджетом, таким как Hlayout, перед размещением внутри внутренних виджетов Borderlayout (север, запад и т. д.)
  • В строке 11 мы помещаем элемент Tabbox и устанавливаем его вертикальную ориентацию в ожидании встраивания в него нашей функции CRUD инвентаря
  • в строке 12-16 мы ставим заголовок для каждой вкладки
  • строка 18, Tabpanel — это контейнер, который содержит содержимое вкладки
  • В строке 19 мы встраиваем нашу функцию инвентаризации CRUD внутри тега Include. На этой странице будут прикреплены виджеты на сайте inventory.zul.

Переопределение существующих правил стилей ZK

Свойства шрифта ZK по умолчанию и цвета фона были изменены, чтобы заголовки были представлены более заметно. Давайте быстро объясним, как это делается.
Используя Chrome Developer Tool или расширение Firebug, мы можем легко проверить источник нашего Borderlayout и найти класс стилей ZK для виджетов ZK, как показано ниже:

Отсюда мы узнали, что шаблон именования для выделенной области — это z-north-body. Точно так же мы могли бы сделать то же самое для всей разметки интереса и пойти дальше, переопределяя их правила стиля CSS:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<zk>
<style>
  .z-tab-ver .z-tab-ver-text { font-size: 18px; }
  .z-north-body, .z-south-body { background:#A3D1F0 }
  .z-east-body, .z-west-body { background:#F8F9FB }
</style>
<window border='none' width='100%' height='100%'>
 <borderlayout width='100%' height='100%'>
  <north size='15%'>...</north>
  <east size='10%'></east>
  <center>...</center>
  <west size='10%'></west>
  <south size='10%'></south>
 </borderlayout>
</window>
</zk>

Добавление дополнительных правил стиля с помощью атрибута стиля

Здесь мы модифицируем стиль надписей, содержащихся в виджете «Север». Поскольку мы хотим, чтобы наш новый стиль влиял только на эти две метки, а не на все, для нас не имеет смысла переопределять первоначальный стиль, как мы это делали раньше. Для этих изолированных модификаций достаточно просто назначить правила стиля атрибуту ‘style’, который поставляется с виджетами ZK:

1
2
3
4
5
6
<north size='15%'>
 <hlayout width='100%' height='100%'>
 <label value='Alpha Dental' style='font-size: 32px; font-style: italic; font-weight:bold; color:white; margin-left:8px;'/>
 <label value='Sign Out' style='font-size: 14px; font-weight:bold; color:grey; line-height:26px'></label>
 </hlayout>
</north>...

Добавление дополнительных правил стилей через Sclass

Альтернативой назначению правил стилей непосредственно в разметке и загрязнению кода является объявление класса стилей, сокращенно обозначаемого как «sclass», и назначение правил атрибуту «sclass», как показано здесь:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<zk>
<style>
  .company-heading {
   font-size: 32px;
   font-style: italic;
   font-weight:bold;
   color:white;
   margin-left:8px;
  }
</style>
<window ...>
 <borderlayout ...>
  <north ...> <label value='Alpha Dental' sclass='company-heading'/></north>
  ...
 </borderlayout>
</window>
</zk>

В двух словах

  • В этом посте рассматриваются три способа изменения стиля ZK по умолчанию: переопределить существующий класс стилей ZK, назначить правила стиля непосредственно атрибуту стиля виджета или определить класс CSS в файле CSS или в теге Style, а затем назначить класс для атрибут sclass виджета
  • Используйте инструмент разработчика (такой как Firebug), чтобы проверить виджеты ZK и выяснить, какой класс стиля ZK следует переопределить
  • Атрибут hlex позволяет разработчикам определять ширину виджетов пропорционально друг другу
  • Виджеты макета помогают разработчикам разделить окно презентации на разделы

Ссылки по теме:

Руководство по стилю ZK
BorderLayout
Hlayout
Hflex

Ссылка: ZK в действии [4]: ​​стилизация и верстка от нашего партнера JCG Лэнса Лу в блоге Tech Dojo .