--=REKLAMA=--
W szablonie Beez projektant przewidział pięć głównych elementów strony. Każdy został objęty znacznikiem opakowującym div z atrybutem identyfikującym:
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:
Miejsce przechowywania - w pliku: index.php
$showRightColumn = $this->countModules('user1 or user2 or right or top');
$showRightColumn &= JRequest::getCmd('layout') != 'form';
$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"> </div> </div><!-- end header -->
Miejsce przechowywania - w pliku: index.php
<div id="<?php echo $showRightColumn ? 'contentarea2' : 'contentarea'; ?>">
<a name="mainmenu"></a>
<div id="left">
<jdoc:include type="modules" name="left" style="beezDivision" headerLevel="3" />
</div><!-- left -->
<a name="content"></a>
<div id="wrapper">
<div id="<?php echo $showRightColumn ? 'main2' : 'main'; ?>">
<?php if ($this->getBuffer('message')) : ?>
<div class="error">
<h2>
<?php echo JText::_('Message'); ?>
</h2>
<jdoc:include type="message" />
</div>
<?php endif; ?>
<jdoc:include type="component" />
</div><!-- end main or main2 -->
<?php if ($showRightColumn) : ?>
<div id="right">
<a name="additional"></a>
<h2 class="unseen">
<?php echo JText::_('Additional Information'); ?>
</h2>
<jdoc:include type="modules" name="top" style="beezDivision" headerLevel="3" />
<jdoc:include type="modules" name="user1" style="beezDivision" headerLevel="3" />
<jdoc:include type="modules" name="user2" style="beezDivision" headerLevel="3" />
<jdoc:include type="modules" name="right" style="beezDivision" headerLevel="3" />
</div><!-- right -->
<?php endif; ?>
<div class="wrap"></div>
</div><!-- wrapper -->
</div><!-- contentarea -->
Miejsce przechowywania - w pliku: index.php
<div id="footer">
<p class="syndicate">
<jdoc:include type="modules" name="syndicate" />
</p>
<p>
<?php echo JText::_('Powered by');?> <a href="http://www.joomla.org/">Joomla!</a>
</p>
<div class="wrap"></div>
</div><!-- footer -->
</div><!-- all -->
Miejsce przechowywania - w pliku: position.css
#header
{
background: #fff;
color: #000000;
margin: 0;
position: relative;
text-align: right;
border-bottom: solid 4px #ccc;
}
Miejsce przechowywania: position.css
*
{
margin: 0;
padding: 0;
}
Miejsce przechowywania - plik: position.css
#all
{
background: #FFFFFF;
border: solid 1px #DBB0CD;
color: #000000;
font-size: 0.8em;
margin: 0 auto;
max-width: 1000px;
padding: 0 3px 3px 3px;
text-align: left;
}
Dziedziczona jest własność font-size.
Miejsce przechowywania - plik: position.css
body
{
background: #F2E3ED;
color: #000000;
font-family: arial, helvetica, sans-serif;
font-size: 100.1%;
padding: 0px;
text-align: center;
}
Dziedziczona jest własność: font-family.
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.
Miejsce przechowywania - w pliku: position.css
#contentarea, #contentarea2
{
border: solid 0px #000;
margin: 0;
padding: 0px 0px 0px 0px;
position: relative;
overflow: hidden;
}
Miejsce przechowywania: position.css
*
{
margin: 0;
padding: 0;
}
Miejsce przechowywania - plik: position.css
#all
{
background: #FFFFFF;
border: solid 1px #DBB0CD;
color: #000000;
font-size: 0.8em;
margin: 0 auto;
max-width: 1000px;
padding: 0 3px 3px 3px;
text-align: left;
}
Dziedziczone są własności: color, font-size i text-align.
Miejsce przechowywania - plik: position.css
body
{
background: #F2E3ED;
color: #000000;
font-family: arial, helvetica, sans-serif;
font-size: 100.1%;
padding: 0px;
text-align: center;
}
Dziedziczona jest własność: font-family.
Miejsce przechowywania - w pliku: ieonly.css
#contentarea,#contentarea2 { width: expression(document . body . clientWidth > 980 ? "980px" : "auto"); }
Miejsce przechowywania - w pliku: ieonly.css
.leading, #contentarea2, #main { zoom: 1; }
Miejsce przechowywania - w pliku: position.css
#wrapper { margin: 0 0 0 21%}
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.
Miejsce przechowywania: position.css
*
{
margin: 0;
padding: 0;
}
Miejsce przechowywania - plik: position.css
#all
{
background: #FFFFFF;
border: solid 1px #DBB0CD;
color: #000000;
font-size: 0.8em;
margin: 0 auto;
max-width: 1000px;
padding: 0 3px 3px 3px;
text-align: left;
}
Dziedziczone są własności: color, font-size i text-align.
Miejsce przechowywania - plik: position.css
body
{
background: #F2E3ED;
color: #000000;
font-family: arial, helvetica, sans-serif;
font-size: 100.1%;
padding: 0px;
text-align: center;
}
Dziedziczone jest własność: font-family.
Miejsce przechowywania - w pliku: ieonly.css
#wrapper
{border:solid 0px; width:100%}
Miejsce przechowywania - w pliku: position.css
#left
{
background: #FFFFFF;
border-right: solid 0px #EEEEEE;
float: left;
margin: 20px 0 0 0;
width: 21%;
}
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.
Miejsce przechowywania: position.css
*
{
margin: 0;
padding: 0;
}
Miejsce przechowywania - plik: position.css
#all
{
background: #FFFFFF;
border: solid 1px #DBB0CD;
color: #000000;
font-size: 0.8em;
margin: 0 auto;
max-width: 1000px;
padding: 0 3px 3px 3px;
text-align: left;
}
Dziedziczone są własności: color, font-size i text-align.
Miejsce przechowywania - plik: position.css
body
{
background: #F2E3ED;
color: #000000;
font-family: arial, helvetica, sans-serif;
font-size: 100.1%;
padding: 0px;
text-align: center;
}
Dziedziczone jest własność: font-family.
Miejsce przechowywania - w pliku: position.css
#right
{
color: #000;
float:left;
width: 28%;
padding-top:10px
}
Miejsce przechowywania: position.css
*
{
margin: 0;
padding: 0;
}
Miejsce przechowywania - plik: position.css
#all
{
background: #FFFFFF;
border: solid 1px #DBB0CD;
color: #000000;
font-size: 0.8em;
margin: 0 auto;
max-width: 1000px;
padding: 0 3px 3px 3px;
text-align: left;
}
Dziedziczone są własności: font-size i text-align.
Miejsce przechowywania - plik: position.css
body
{
background: #F2E3ED;
color: #000000;
font-family: arial, helvetica, sans-serif;
font-size: 100.1%;
padding: 0px;
text-align: center;
}
Dziedziczone jest własność: font-family.
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.
Miejsce przechowywania - w pliku: position.css
#main2
{
background: #fff;
width:64%;
padding: 25px 20px 20px 20px;
position: relative;
min-height:520px;
float:left;
}
#main
{
background: #fff;
margin: 0 0px 0 0;
padding: 25px 20px 20px 20px;
position: relative;
}
Miejsce przechowywania: position.css
*
{
margin: 0;
padding: 0;
}
Miejsce przechowywania - plik: position.css
#all
{
background: #FFFFFF;
border: solid 1px #DBB0CD;
color: #000000;
font-size: 0.8em;
margin: 0 auto;
max-width: 1000px;
padding: 0 3px 3px 3px;
text-align: left;
}
Dziedziczone są własności: color, font-size i text-align. Miejsce przechowywania - plik: position.css
body
{
background: #F2E3ED;
color: #000000;
font-family: arial, helvetica, sans-serif;
font-size: 100.1%;
padding: 0px;
text-align: center;
}
Dziedziczone jest własność: font-family.
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.