--=REKLAMA=--

Beez/rozmieszczenie głównych elementów strony

Z Joomla!WikiPL

W szablonie Beez projektant przewidział pięć głównych elementów strony. Każdy został objęty znacznikiem opakowującym div z atrybutem identyfikującym:

  1. #header: nagłówek obejmujący: logo i narzędzia użytkownika (menu nawigacyjne, ścieżka powrotu, przełącznik rozmiaru czcionki, wyszukiwarka)
  2. #left: lewy pasek nawigacyjny
  3. #main (#main2): centralny obszar treści głównej
  4. #right: prawy pasek dodatkowych informacji
  5. #footer: stopka.

W kodzie źródłowym elementy te występują w takiej kolejności, jak wyszczególniona została powyżej. W takiej również kolejności ich zawartość zostanie umieszczona w dokumencie źródłowym. Jest to tzw. kolejność źródłowa - kolejność wpisywania elementów w pliku HTML, a w naszym przypadku w pliku index.php, na podstawie którego generowany jest źródłowy dokument HTML (ang. source ordered). Kod HTML odpowiada - zgodnie z zasadą rozdzielenia treści i prezentacji - jedynie za wyodrębnienie elementów treści oraz zidentyfikowanie i uporządkowanie ich logicznej struktury. Rozmieszczenia elementów na stronie dokonujemy za pomocą CSS.

Elementy blokowe (ang. block box) w HTML standardowo układają się w kolejności występowania, jeden pod drugim. Bez odpowiedniego sformatowania główne elementy składowe strony zostałyby więc rozmieszczone tak, jak widzimy na pierwszym z poniższych rysunków. Aby je rozmieścić zgodnie z zamierzeniem, potrzebne okazały się dodatkowe znaczniki "opakowujące". Projektant zastosował w tej roli uniwersalny znacznik div z identyfikatorami:

  • #contentarea (#contentarea2): obejmujące lewy i prawy pasek oraz obszar centralny z treścią główną
  • #wrapper: obejmujący obszar z treścią główną i prawy pasek.

Beez layout.png

Odwołania w HTML

Miejsce przechowywania - w pliku: index.php

  1. $showRightColumn = $this->countModules('user1 or user2 or right or top');
  2. $showRightColumn &= JRequest::getCmd('layout') != 'form';
  3. $showRightColumn &= JRequest::getCmd('task') != 'edit'

Powyższy kod zawiera definicję zmiennej $showRightColumn ($pokazPrawyPasek). W pierwszym wierszu zastosowana jest funkcja $this->countModules (), zliczajaca moduły w pozycjach modułów umieszczonych w prawym pasku. Znaczenie tego wiersza można by "przetłumaczyć" następująco: $showRightColumn = 1 jeżeli w pozycji user1 albo w pozycji user2 albo w pozycji right albo w pozycji top został opublikowany jakiś moduł. W przeciwnym przypadku $showRightColumn= 0. Kolejne dwa wiersze służą zbadaniu, czy nie wystąpił jeden z dwóch przypadków: czy nie jest wyświetlany układ formularza (służącego do edycji artykułów) albo czy nie zostało wywołane zadanie edit. Wynik badania zostanie dołączony (dodany) do wyniku operacji z pierwszego wiersza. Całość interpretowana jest następująco: Jeżeli w pozycjach modułów umieszczonych w prawym pasku został opublikowany jakiś moduł i jeżeli nie został wywołany układ formularza, ani też nie zostało wywołane zadanie edit, to $showRightColumn = 1, czyli prawy pasek ma być widoczny. W przeciwnym przypadku $showRightColumn = 0, czyli prawy pasek ma być niewidoczny. Wyliczona wartość wykorzystywana jest w kodzie trzykrotnie: w wierszach #82 i #90 oraz instrukcji warunkowej rozpoczynającej się w wierszu #103.

W wierszach #82 i #90 zastosowana jest instrukcja echo i tzw. składnia dwukropka. Instrukcję w wierszu #82 odczytujemy następująco: jeżeli $showRightColumn = 1 wpisz 'contentarea2', a jeśli $showRightColumn = 0, wpisz identyfikator 'contentarea'. Podobnie z instrukcją w wierszu #90, gdzie mamy inne identyfikatory.

Miejsce przechowywania - w pliku: index.php

<!--wiersze #42 - #80-->
      <div id="header">
         <!-- kod nagłówka wiersze #43 - #78 -->
         <div class="wrap">&nbsp;</div>
      </div><!-- end header -->

Miejsce przechowywania - w pliku: index.php

  1.       <div id="<?php echo $showRightColumn ? 'contentarea2' : 'contentarea'; ?>">
  2.          <a name="mainmenu"></a>
  3.          <div id="left">
  4.             <jdoc:include type="modules" name="left" style="beezDivision" headerLevel="3" />
  5.          </div><!-- left -->
  6.  
  7.          <a name="content"></a>
  8.          <div id="wrapper">
  9.             <div id="<?php echo $showRightColumn ? 'main2' : 'main'; ?>">
  10.                <?php if ($this->getBuffer('message')) : ?>
  11.                <div class="error">
  12.                   <h2>
  13.                      <?php echo JText::_('Message'); ?>
  14.                   </h2>
  15.                   <jdoc:include type="message" />
  16.                </div>
  17.                <?php endif; ?>
  18.  
  19.                <jdoc:include type="component" />
  20.             </div><!-- end main or main2 -->
  21.  
  22.             <?php if ($showRightColumn) : ?>
  23.             <div id="right">
  24.  
  25.                <a name="additional"></a>
  26.                <h2 class="unseen">
  27.                   <?php echo JText::_('Additional Information'); ?>
  28.                </h2>
  29.  
  30.                <jdoc:include type="modules" name="top" style="beezDivision" headerLevel="3" />
  31.                <jdoc:include type="modules" name="user1" style="beezDivision" headerLevel="3" />
  32.                <jdoc:include type="modules" name="user2" style="beezDivision" headerLevel="3" />
  33.                <jdoc:include type="modules" name="right" style="beezDivision" headerLevel="3" />
  34.  
  35.             </div><!-- right -->
  36.             <?php endif; ?>
  37.  
  38.          <div class="wrap"></div>
  39.          </div><!-- wrapper -->
  40.       </div><!-- contentarea -->

Miejsce przechowywania - w pliku: index.php

  1.       <div id="footer">
  2.          <p class="syndicate">
  3.             <jdoc:include type="modules" name="syndicate" />
  4.          </p>
  5.  
  6.          <p>
  7.             <?php echo JText::_('Powered by');?> <a href="http://www.joomla.org/">Joomla!</a>
  8.          </p>
  9.  
  10.          <div class="wrap"></div>
  11.       </div><!-- footer -->
  12.    </div><!-- all -->

Odwołania w CSS

#header

Podstawowy styl

Miejsce przechowywania - w pliku: position.css

  1. #header
  2. {
  3.    background: #fff;
  4.    color: #000000;
  5.    margin: 0;
  6.    position: relative;
  7.    text-align: right;
  8.    border-bottom: solid 4px #ccc;
  9. }

Style dodatkowe

Miejsce przechowywania: position.css

  1. *
  2. {
  3.     margin: 0;
  4.     padding: 0;
  5. }
Dodatkowe informacje: position.css/*

Style dziedziczone

Miejsce przechowywania - plik: position.css

  1. #all
  2. {
  3.    background: #FFFFFF;
  4.    border: solid 1px #DBB0CD;
  5.    color: #000000;
  6.    font-size: 0.8em;
  7.    margin: 0 auto;
  8.    max-width: 1000px;
  9.    padding: 0 3px 3px 3px;
  10.    text-align: left;
  11. }

Dziedziczona jest własność font-size.

Miejsce przechowywania - plik: position.css

  1. body
  2. {
  3.    background: #F2E3ED;
  4.    color: #000000;
  5.    font-family: arial, helvetica, sans-serif;
  6.    font-size: 100.1%;
  7.    padding: 0px;
  8.    text-align: center;
  9. }

Dziedziczona jest własność: font-family.

Objaśnienie

Nagłówek jest osadzony wewnątrz elementu div#all opakowującego wszystkie elementy strony. Własność position: relative; umożliwia zastosowanie pozycjonowania absolutnego do elementów umieszczonych wewnątrz nagłówka - tutaj elementu div#fontsize.

#contentarea - #contentarea2

Podstawowy styl

Miejsce przechowywania - w pliku: position.css

  1. #contentarea, #contentarea2
  2. {
  3.    border: solid 0px #000;
  4.    margin: 0;
  5.    padding: 0px 0px 0px 0px;
  6.    position: relative;
  7.    overflow: hidden;
  8. }

Style dodatkowe

Miejsce przechowywania: position.css

  1. *
  2. {
  3.     margin: 0;
  4.     padding: 0;
  5. }
Dodatkowe informacje: position.css/*

Style dziedziczone

Miejsce przechowywania - plik: position.css

  1. #all
  2. {
  3.    background: #FFFFFF;
  4.    border: solid 1px #DBB0CD;
  5.    color: #000000;
  6.    font-size: 0.8em;
  7.    margin: 0 auto;
  8.    max-width: 1000px;
  9.    padding: 0 3px 3px 3px;
  10.    text-align: left;
  11. }

Dziedziczone są własności: color, font-size i text-align.

Miejsce przechowywania - plik: position.css

  1. body
  2. {
  3.    background: #F2E3ED;
  4.    color: #000000;
  5.    font-family: arial, helvetica, sans-serif;
  6.    font-size: 100.1%;
  7.    padding: 0px;
  8.    text-align: center;
  9. }

Dziedziczona jest własność: font-family.

Obejścia dla IE

Miejsce przechowywania - w pliku: ieonly.css

  1. #contentarea,#contentarea2 { width: expression(document . body . clientWidth > 980 ? "980px" : "auto"); }

Miejsce przechowywania - w pliku: ieonly.css

  1. .leading, #contentarea2, #main { zoom: 1; }

Objaśnienie

#wrapper

Podstawowy styl

Miejsce przechowywania - w pliku: position.css

  1. #wrapper { margin: 0 0 0 21%}

Objaśnienie

Pojemnik div#wrapper obejmuje obszar głównej treści (div#main lub div#main2). W arkuszu stylów zdefiniowana jest tylko jedna właściwość - lewy margines wielkości 21%. W ten sposób tworzone jest miejsce na lewy pasek (taką szerokość ustalono w stylu #left). Przeglądarka wylicza owe 21% z szerokości obszaru obejmującego, a więc #contentarea lub #contentarea2.

Style dodatkowe

Miejsce przechowywania: position.css

  1. *
  2. {
  3.     margin: 0;
  4.     padding: 0;
  5. }
Dodatkowe informacje: position.css/*

Style dziedziczone

Miejsce przechowywania - plik: position.css

  1. #all
  2. {
  3.    background: #FFFFFF;
  4.    border: solid 1px #DBB0CD;
  5.    color: #000000;
  6.    font-size: 0.8em;
  7.    margin: 0 auto;
  8.    max-width: 1000px;
  9.    padding: 0 3px 3px 3px;
  10.    text-align: left;
  11. }

Dziedziczone są własności: color, font-size i text-align.

Miejsce przechowywania - plik: position.css

  1. body
  2. {
  3.    background: #F2E3ED;
  4.    color: #000000;
  5.    font-family: arial, helvetica, sans-serif;
  6.    font-size: 100.1%;
  7.    padding: 0px;
  8.    text-align: center;
  9. }

Dziedziczone jest własność: font-family.

Obejścia dla IE

Miejsce przechowywania - w pliku: ieonly.css

  1. #wrapper
  2. {border:solid 0px; width:100%}

#left

Podstawowy styl

Miejsce przechowywania - w pliku: position.css

  1. #left
  2. {
  3.    background: #FFFFFF;
  4.    border-right: solid 0px #EEEEEE;
  5.    float: left;
  6.    margin: 20px 0 0 0;
  7.    width: 21%;
  8. }

Objaśnienie

Deklarowanie własności background: #FFFFFF; jest zbyteczne, ponieważ pasek boczny położony jest na białym obszarze obejmującego go pojemnika div#contentarea lub div#contentarea2. Zbyteczna jest również deklaracja ramki po prawej stronie, skoro jej grubość została ustalona na 0px. Istotne są natomiast trzy kolejne właściwości. Właściwość float: left; przenosi element #left na lewą stronę i umożliwia opływanie go z prawej strony przez elementy następujące po nim. Właściwość width:21% ustala zmienną szerokość lewego paska, zależną od szerokości obszaru div#contentarea lub div#contentarea2. 20-pikselowy margines określony w deklaracji margin: 20px 0 0 0; odsuwa nieco lewy pasek od nagłówka.

Style dodatkowe

Miejsce przechowywania: position.css

  1. *
  2. {
  3.     margin: 0;
  4.     padding: 0;
  5. }
Dodatkowe informacje: position.css/*

Style dziedziczone

Miejsce przechowywania - plik: position.css

  1. #all
  2. {
  3.    background: #FFFFFF;
  4.    border: solid 1px #DBB0CD;
  5.    color: #000000;
  6.    font-size: 0.8em;
  7.    margin: 0 auto;
  8.    max-width: 1000px;
  9.    padding: 0 3px 3px 3px;
  10.    text-align: left;
  11. }

Dziedziczone są własności: color, font-size i text-align.

Miejsce przechowywania - plik: position.css

  1. body
  2. {
  3.    background: #F2E3ED;
  4.    color: #000000;
  5.    font-family: arial, helvetica, sans-serif;
  6.    font-size: 100.1%;
  7.    padding: 0px;
  8.    text-align: center;
  9. }

Dziedziczone jest własność: font-family.

#right

Podstawowy styl

Miejsce przechowywania - w pliku: position.css

  1. #right
  2. {
  3.    color: #000;
  4.    float:left;
  5.    width: 28%;
  6.    padding-top:10px
  7.  
  8. }

Style dodatkowe

Miejsce przechowywania: position.css

  1. *
  2. {
  3.     margin: 0;
  4.     padding: 0;
  5. }
Dodatkowe informacje: position.css/*

Style dziedziczone

Miejsce przechowywania - plik: position.css

  1. #all
  2. {
  3.    background: #FFFFFF;
  4.    border: solid 1px #DBB0CD;
  5.    color: #000000;
  6.    font-size: 0.8em;
  7.    margin: 0 auto;
  8.    max-width: 1000px;
  9.    padding: 0 3px 3px 3px;
  10.    text-align: left;
  11. }

Dziedziczone są własności: font-size i text-align.

Miejsce przechowywania - plik: position.css

  1. body
  2. {
  3.    background: #F2E3ED;
  4.    color: #000000;
  5.    font-family: arial, helvetica, sans-serif;
  6.    font-size: 100.1%;
  7.    padding: 0px;
  8.    text-align: center;
  9. }

Dziedziczone jest własność: font-family.

Objaśnienie

Prawy pasek osadzony jest wewnątrz elementu opakowującego div#wrapper razem z obszarem przeznaczonym na treść główną - div#main lub div#main2. W stylach #right oraz #main2 ustawiono właściwość float:left; i ustalono szerokości obu elementów (64% dla #main2 i 28% dla #right, co razem daje 92% szerokości obszaru div#wrapper - pozostałe 8% zapewnia miejsce na odstępy między kolumnami.

Ustawienie szerokości jest w przypadku elementów pływających konieczne. Obszar div#main2 wypełniając 64% szerokości elementu #wrapper, pozostawia miejsce, które jest zajmowane przez następujący po nim w kodzie źródłowym prawy pasek. Dzięki określeniu szerokości elementu pływającego przeglądarka potrafi zrobić miejsce na element opływający. Szerokość może być stała, określona w px czy emach, a także zmienna, wyrażona procentowo, jak w tym przypadku.

W układach opartych na elementach pływających ważna jest również kolejność źródłowa - kod elementu pływającego musi być umieszczony przed kodem elementu opływającego.

#main #main2

Podstawowy styl

Miejsce przechowywania - w pliku: position.css

  1. #main2
  2. {
  3.    background: #fff;
  4.    width:64%;
  5.    padding: 25px 20px 20px 20px;
  6.    position: relative;
  7.    min-height:520px;
  8.    float:left;
  9.  
  10.  
  11. }
  12.  
  13. #main
  14. {
  15.    background: #fff;
  16.    margin: 0 0px 0 0;
  17.    padding: 25px 20px 20px 20px;
  18.    position: relative;
  19. }

Style dodatkowe

Miejsce przechowywania: position.css

  1. *
  2. {
  3.     margin: 0;
  4.     padding: 0;
  5. }
Dodatkowe informacje: position.css/*

Style dziedziczone

Miejsce przechowywania - plik: position.css

  1. #all
  2. {
  3.    background: #FFFFFF;
  4.    border: solid 1px #DBB0CD;
  5.    color: #000000;
  6.    font-size: 0.8em;
  7.    margin: 0 auto;
  8.    max-width: 1000px;
  9.    padding: 0 3px 3px 3px;
  10.    text-align: left;
  11. }

Dziedziczone są własności: color, font-size i text-align. Miejsce przechowywania - plik: position.css

  1. body
  2. {
  3.    background: #F2E3ED;
  4.    color: #000000;
  5.    font-family: arial, helvetica, sans-serif;
  6.    font-size: 100.1%;
  7.    padding: 0px;
  8.    text-align: center;
  9. }

Dziedziczone jest własność: font-family.

Objaśnienie

Obszar centralny, przeznaczony na treść główną osadzony jest wewnątrz elementu opakowującego div#wrapper razem z obszarem przeznaczonym na prawy pasek - div#right. Arkusz stylów zawiera alternatywne definicje stylów dla #main i #main2. Identyfikator #main2 nadawany jest centralnemu obszarowi wówczas, gdy wyświetlany jest prawy pasek z modułami towarzyszącymi treści głównej.

Ustawienie float:left w stylu #main2 jest przekształca obszar z treścią główną w element pływający o szerokości mniejszej niż szerokość elementu obejmującego, dzięki czemu możliwe jest "wpłynięcie" na pozostawione miejsce prawego paska. Ustawienie szerokości obszaru #main2 jest potrzebne, aby pozostawić niewielki odstęp między kolumną centralną a prawym paskiem.

Własność position: relative; powoduje, że wszystkie elementy pozycjonowane wewnątrz tego elementu będą pozycjonowane względem jego położenia.


Dziękujemy za wkład

» Stefan Wajda [zwiastun],