1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
|
---
title: Flexbox
slug: Learn/CSS/CSS_layout/Flexbox
tags:
- Nauka
- Początkujący
- Poradnik
- Poradnik dla początkujących
- flexibox
- po polsku
- podstawa
- podstawowy
- wygląd
- wyświetlanie zawartości
translation_of: Learn/CSS/CSS_layout/Flexbox
---
<div>{{LearnSidebar}}</div>
<div>{{PreviousMenuNext("Learn/CSS/CSS_layout/Practical_positioning_examples", "Learn/CSS/CSS_layout/Grids", "Learn/CSS/CSS_layout")}}</div>
<p class="summary">Flexbox to nowa technologia która już ma szerokie wsparcie wśród przeglądarek, dlatego jego używanie staje się coraz bardziej powszechne. Flexbox wykorzystuje narzędzia, które pozwalają na szybkie tworzenie kompleksowego i elastycznego układu strony. Flexbox to jednowymiarowa metoda rozmieszczania elementów w wierszach lub kolumnach, przedmioty rozciągają się aby wypełnić dodatkową przestrzeń lub kurczą się aby dopasować się do mniejszych przestrzeni. W tym artykule zawarto podstawowe informacje na ten temat.</p>
<table class="learn-box standard-table">
<tbody>
<tr>
<th scope="row">Wymogi:</th>
<td>Podstawy HTML (zajrzyj do <a href="/en-US/docs/Learn/HTML/Introduction_to_HTML">Introduction to HTML</a>) oraz znajomość zasad funkcjonowania CSS ( więcej na ten temat znajdziesz tu <a href="/en-US/docs/Learn/CSS/Introduction_to_CSS">Introduction to CSS</a>.)</td>
</tr>
<tr>
<th scope="row">Cel:</th>
<td>Nauczenie się jak używać Flexboxa do tworzenia kreatywnego układu strony.</td>
</tr>
</tbody>
</table>
<h2 id="Dlaczego_Flexbox">Dlaczego Flexbox?</h2>
<p>Przez długi czas jedynymi rzeczowymi narzędziami działającymi w przeglądarkach, do tworzenia układu strony w CSS były właściwości: float i position. Są dobre i działają, ale w niektórych przypadkach mogą być ograniczające i frustrujące.</p>
<p>Poniższe wymagania dotyczące układu są trudne lub niemożliwe do osiągnięcia dzięki wcześniej wspomnianym narzędziom:</p>
<ul>
<li>Pionowe wycentrowanie blokowego elementu z zawartością, względem rodzica.</li>
<li>Sprawienie by wszystkie "dzieci" w pojemniku zajęły taką samą ilość dostępnej szerokośći/wysokości, bez względu na to jaka szerokość/wysokość jest dostępna.</li>
<li>Umieszczenie kolumn o takiej samej wysokości w wielokolumnowym układzie nawet jeśli zawierają inną liczbę znaków</li>
</ul>
<p>Jak zauważysz w kolejnych sekcjach, flexbox ułatwia tworzenie układów strony. Zabawmy się!</p>
<h2 id="Wprowadzenie_i_prosty_przykład">Wprowadzenie i prosty przykład</h2>
<p>W tym artykule będziemy zachęcać cię do pracy poprzez serię ćwiczeń, które ułatwią ci zrozumienie jak działa flexbox. Aby zacząć musisz zrobić kopię pliku startowego — <a href="https://github.com/mdn/learning-area/blob/master/css/css-layout/flexbox/flexbox0.html">flexbox0.html</a> z naszego repozytorium na gitHubie — załadować w przeglądarce ( Firefox albo Chrome), i spojrzeć na kod w twoim edytorze kodu. Możesz także podejrzeć kod na żywo - <a href="http://mdn.github.io/learning-area/css/css-layout/flexbox/flexbox0.html">see it live here</a>.</p>
<p>Zauważ, że mamy element {{htmlelement("header")}} z nagłówkiem w środku oraz {{htmlelement("section")}} zawierający trzy {{htmlelement("article")}}. Użyjemy tego do stworzenia dość standardowego układu trzy-kolumnowego.</p>
<p><img alt="" src="flexbox-example1.png" style="border-style: solid; border-width: 1px; display: block; height: 324px; margin: 0px auto; width: 800px;"></p>
<h2 id="Określanie_które_elementy_układu_wykorzystać_jako_elastyczne_pudełka.">Określanie, które elementy układu wykorzystać jako elastyczne pudełka.</h2>
<p>Aby zacząć musimy wybrać elementy, które mają zmienić położenie. Żeby to zrobić, ustawiamy specjalną wartość {{cssxref("display")}} na rodzicu elementu, na który chcemy oddziaływać. W tym przypadku musimy poukładać elementy {{htmlelement("article")}}, więc display ustawiamy na{{htmlelement("section")}} (section staje się elastycznym kontenerem dla trzech bloków "article").</p>
<pre class="brush: css notranslate">section {
display: flex;
}</pre>
<p>Rezultatem tego powinno być takie coś:</p>
<p><img alt="" src="flexbox-example2.png" style="border-style: solid; border-width: 1px; display: block; height: 348px; margin: 0px auto; width: 800px;"></p>
<p>Pojedyncza deklaracja daje nam wszystko czego potrzebujemy — niewiarygodne, co nie? Mamy nasz układ kolumn z kilkoma kolumnami o jednakowych rozmiarach i mających tą samą wysokość. Dzieje się tak dlatego że domyślne wartości ustawione są w taki sposób żeby rowiązywać problem nierównych kolumn. Więcej o tym później.</p>
<div class="note">
<p><strong>Zanotuj</strong>: Możesz także ustawić display o wartości <code>inline-flex</code> jeśli życzysz sobie ułożenia liniowych elementów jako blokowe.</p>
</div>
<h2 id="Aside">Aside </h2>
<p>Elementy blokowe w modelu flex box układają się względem dwóch osi:</p>
<p><img alt="flex_terms.png" class="default internal" src="flex_terms.png"></p>
<ul>
<li>Główna oś biegnie w kierunku, w którym układane są elementy blokowe (na przykład jako rzędy wszerz strony lub kolumny wzdłuż). Początek i koniec tej osi nazywane są <strong>main start</strong> i <strong>main end</strong>.</li>
<li>Oś poprzeczna jest osią biegnącą prostopadle do kierunku układu elementów. Początek i koniec osi są nazywane <strong>cross start</strong> i <strong>cross end.</strong></li>
<li>Rodzic ma ustawioną wartość <strong>display:flex</strong> czyli {{htmlelement("section")}} w naszym przykładzie) i jest nazywany kontenerem - <strong>flex container</strong>.</li>
<li>Elementy poukładane jako elastyczne w kontenerze są nazywane <strong>flex items</strong> ( {{htmlelement("article")}} elementy w naszym przykładzie).</li>
</ul>
<p>Pamiętaj o tej terminologii podczas następujących sekcji. Zawsze możesz tu wrócić jeśli zagubisz się w jakimś używanym tutaj terminie.</p>
<h2 id="Kolumny_czy_wiersze">Kolumny czy wiersze?</h2>
<p>Flexbox wprowadza wartość nazywaną {{cssxref("flex-direction")}}, która określa w którym kierunku main axis - oś główna biegnie (w jakim kierunku układają się dzieci typu flexbox) - domyślnie ustawiona jest wartość row, co powoduje że elementy układają się w wierszu w kierunku, w którym działa domyśny język przegądarki (z lewej do prawej w przypadku Angielskich przegądarek) </p>
<p>Spróbuj dodać następującą deklarację do pliku css:</p>
<pre class="brush: css notranslate">flex-direction: column;</pre>
<p>Jak widzisz elementy ponownie ułożyły się kolumnowo tak jak przed dodaniem jakiegokolwiek css. Zanim zaczniemy dalej usuń tą deklarację ze swojego przykładu.</p>
<div class="note">
<p><strong>Zanotuj</strong>: Możesz również ułożyć elementy w odwrotnym kierunku używając wartośći <code>row-reverse</code> and <code>column-reverse</code>. Poeksperymentuj także z tymi właściwościami!</p>
</div>
<h2 id="Zawijanie">Zawijanie</h2>
<p>Jednym z problemów który pojawia się kiedy umieszczasz dużą liczbę elementów różnej szerokości i wysokości mogą one zacząć się wylewać z elementu rodzica niszcząc układ strony.</p>
<p>Zajrzyjmy do przykłady <a href="https://github.com/mdn/learning-area/blob/master/css/css-layout/flexbox/flexbox-wrap0.html">flexbox-wrap0.html</a>, i wypróbujmy <a href="http://mdn.github.io/learning-area/css/css-layout/flexbox/flexbox-wrap0.html">viewing it live</a> (zrób kopię pliku jeśli chcesz podążać za tym przykładem):</p>
<p><img alt="" src="flexbox-example3.png" style="display: block; height: 646px; margin: 0px auto; width: 800px;"></p>
<p>Widzimy tutaj że elementy potomne rzeczywiście się wylewają poza rodzica. Jednym ze sposobów który umożliwia umiejscowienie tych elementów jest następująca deklaracja :</p>
<pre class="brush: css notranslate">flex-wrap: wrap;</pre>
<p>Przetestuj to teraz; jak widzisz układ strony wygląda lepiej w tym zestawieniu:</p>
<p><img alt="" src="flexbox-example4.png" style="display: block; height: 646px; margin: 0px auto; width: 800px;"></p>
<p>Teraz musimy powielić wiersze - w każdym wierszu mieści się sensowna liczba elementów potomnych, a wszystkie przepełnienia przenoszą się do kolejnego wiersza. Deklaracja <code>flex: 200px</code> ustawia właściwość dla każdego elementu "articles", która mówi że szerokość ma wynosić co najmniej 200px; wrócimy do tego trochę później. Jak mogłeś zauważyć ostatnie kilka dzieci w ostatnim wierszu są trochę szersze, więc cały wiersz jest wypełniony.</p>
<p>Ale jest jeszcze coś co możemy zrobić. Po pierwsze, spróbuj zmienić twój flex-direction na wartość <code>row-reverse</code> - teraz jak widzisz, masz nadal wielowierszowy układ strony, ale zaczynający się od przeciwnego rogu okna przeglądarki i płynący w przeciwnym kierunku.</p>
<h2 id="flex-flow_w_skrócie">flex-flow w skrócie</h2>
<p>W tym punkcie dobrze zauważyć że istnieje skrót {{cssxref("flex-direction")}} i {{cssxref("flex-wrap")}} — {{cssxref("flex-flow")}}. Na przykład możesz zamienić to:</p>
<pre class="brush: css notranslate">flex-direction: row;
flex-wrap: wrap;</pre>
<p>na to:</p>
<pre class="brush: css notranslate">flex-flow: row wrap;</pre>
<h2 id="Elastyczne_wymiarowanie_elementów_flex">Elastyczne wymiarowanie elementów flex</h2>
<p>Wróćmy teraz do naszego pierwszego przykładu, spójrzmy jak możemy kontrolować jaką przestrzeń zajmują elementy. Uruchom kopię <a href="https://github.com/mdn/learning-area/blob/master/css/css-layout/flexbox/flexbox0.html">flexbox0.html</a>, albo zrób kopię z pliku <a href="https://github.com/mdn/learning-area/blob/master/css/css-layout/flexbox/flexbox1.html">flexbox1.html</a> jako nowy punkt startowy (<a href="http://mdn.github.io/learning-area/css/css-layout/flexbox/flexbox1.html">see it live</a>).</p>
<p>Po pierwsze dodaj następującą regułę na dole twojego pliku CSS:</p>
<pre class="brush: css notranslate">article {
flex: 1;
}</pre>
<p>Jest to niepodzielna wartość procentowa określająca jaką część dostęnej przestrzeni wzdłuż głównej osi będzie zajmować każdy element elastyczny. W tym przypadku nadajemy każdemu elementowi {{htmlelement("article")}} wartość 1, co znaczy że wszystkie zajmują tyle samo wolnego miejsca, ile pozostało po ustawieniu dopełnienia i marginesu. Jest to proporcja co oznacza że nadanie każdemu elementowi wartośći 400000 dałoby dokładnie ten sam efekt.</p>
<p>Teraz dodaj następującą zasadę poniżej poprzedniej:</p>
<pre class="brush: css notranslate">article:nth-of-type(3) {
flex: 2;
}</pre>
<p>Teraz kiedy odświeżysz zauważysz że trzeci element {{htmlelement("article")}} zajmuje dwa razy tyle szerokości co pozostałe dwa — w sumie dostęne są cztery jednostki procentowe. Pierwsze dwa elementy mają po jeden, każdy więc zajmuje 1/4 dostępnej przestrzeni. Trzeci ma dwie jednostki, więc zajmuje 2/4 dostęnej przestrzeni (czyli 1/2).</p>
<p>Możesz także ustawić minimalną wartość rozmiaru wewnątrz wartości flex. Spróbuj zaktualizować twój przykład następującymi zasadami:</p>
<pre class="brush: css notranslate">article {
flex: 1 200px;
}
article:nth-of-type(3) {
flex: 2 200px;
}</pre>
<p>To w zasadzie stwierdza "Każdy element najpierw będzie otrzymywał 200px dostępnej przetrzeni. Potem reszta dostępnej przestrzeni będzie dzielona według wartości procentowych." Spróbuj odświeżyć i zobaczysz różnicę w tym jaka przestrzeń jest dzielona przez elementy. </p>
<p><img alt="" src="flexbox-example1.png" style="border-style: solid; border-width: 1px; display: block; height: 324px; margin: 0px auto; width: 800px;"></p>
<p>Prawdziwą wartość flexbox można zauważyć w flexibility/responsiveness — jeśli zmienisz rozmiar okna przeglądarki i dodasz {{htmlelement("article")}} element, układ strony nadal będzie działał prawidłowo.</p>
<h2 id="flex_shorthand_versus_longhand">flex: shorthand versus longhand</h2>
<p>{{cssxref("flex")}} to wartość skrótowa, którą możesz opisać trzy różne wartości:</p>
<ul>
<li>The unitless proportion value we discussed above. This can be specified individually using the {{cssxref("flex-grow")}} longhand property.</li>
<li>A second unitless proportion value — {{cssxref("flex-shrink")}} — that comes into play when the flex items are overflowing their container. This specifies how much of the overflowing amount is taken away from each flex item's size, to stop them overflowing their container. This is quite an advanced flexbox feature, and we won't be covering it any further in this article.</li>
<li>The minimum size value we discussed above. This can be specified individually using the {{cssxref("flex-basis")}} longhand value.</li>
</ul>
<p>We'd advise against using the longhand flex properties unless you really have to (for example, to override something previously set). They lead to a lot of extra code being written, and they can be somewhat confusing.</p>
<h2 id="Horizontal_and_vertical_alignment">Horizontal and vertical alignment</h2>
<p>You can also use flexbox features to align flex items along the main or cross axes. Let's explore this by looking at a new example — <a href="https://github.com/mdn/learning-area/blob/master/css/css-layout/flexbox/flex-align0.html">flex-align0.html</a> (<a href="http://mdn.github.io/learning-area/css/css-layout/flexbox/flex-align0.html">see it live also</a>) — which we are going to turn into a neat, flexible button/toolbar. At the moment you'll see a horizontal menu bar, with some buttons jammed into the top left hand corner.</p>
<p><img alt="" src="flexbox-example5.png" style="display: block; height: 77px; margin: 0px auto; width: 600px;"></p>
<p>First, take a local copy of this example.</p>
<p>Now, add the following to the bottom of the example's CSS:</p>
<pre class="brush: css notranslate">div {
display: flex;
align-items: center;
justify-content: space-around;
}</pre>
<p>Refresh the page and you'll see that the buttons are now nicely centered, horizontally and vertically. We've done this via two new properties.</p>
<p>{{cssxref("align-items")}} controls where the flex items sit on the cross axis.</p>
<ul>
<li>By default, the value is <code>stretch</code>, which stretches all flex items to fill the parent in the direction of the cross axis. If the parent hasn't got a fixed width in the cross axis direction, then all flex items will become as long as the longest flex items. This is how our first example got equal height columns by default.</li>
<li>The <code>center</code> value that we used in our above code causes the items to maintain their intrinsic dimensions, but be centered along the cross axis. This is why our current example's buttons are centered vertically.</li>
<li>You can also have values like <code>flex-start</code> and <code>flex-end</code>, which will align all items at the start and end of the cross axis respectively. See {{cssxref("align-items")}} for the full details.</li>
</ul>
<p>You can override the {{cssxref("align-items")}} behavior for individual flex items by applying the {{cssxref("align-self")}} property to them. For example, try adding the following to your CSS:</p>
<pre class="brush: css notranslate">button:first-child {
align-self: flex-end;
}</pre>
<p>Have a look at what effect this has, and remove it again when you've finished.</p>
<p>{{cssxref("justify-content")}} controls where the flex items sit on the main axis.</p>
<ul>
<li>The default value is <code>flex-start</code>, which makes all the items sit at the start of the main axis.</li>
<li>You can use <code>flex-end</code> to make them sit at the end.</li>
<li><code>center</code> is also a value for <code>justify-content</code>, and will make the flex items sit in the center of the main axis.</li>
<li>The value we've used above, <code>space-around</code>, is useful — it distributes all the items evenly along the main axis, with a bit of space left at either end.</li>
<li>There is another value, <code>space-between</code>, which is very similar to <code>space-around</code> except that it doesn't leave any space at either end.</li>
</ul>
<p>We'd like to encourage you to play with these values to see how they work before you continue.</p>
<h2 id="Ordering_flex_items">Ordering flex items</h2>
<p>Flexbox also has a feature for changing the layout order of flex items, without affecting the source order. This is another thing that is impossible to do with traditional layout methods.</p>
<p>The code for this is simple: try adding the following CSS to your button bar example code:</p>
<pre class="brush: css notranslate">button:first-child {
order: 1;
}</pre>
<p>Refresh, and you'll now see that the "Smile" button has moved to the end of the main axis. Let's talk about how this works in a bit more detail:</p>
<ul>
<li>By default, all flex items have an {{cssxref("order")}} value of 0.</li>
<li>Flex items with higher order values set on them will appear later in the display order than items with lower order values.</li>
<li>Flex items with the same order value will appear in their source order. So if you have four items with order values of 2, 1, 1, and 0 set on them respectively, their display order would be 4th, 2nd, 3rd, then 1st.</li>
<li>The 3rd item appears after the 2nd because it has the same order value and is after it in the source order.</li>
</ul>
<p>You can set negative order values to make items appear earlier than items with 0 set. For example, you could make the "Blush" button appear at the start of the main axis using the following rule:</p>
<pre class="brush: css notranslate">button:last-child {
order: -1;
}</pre>
<h2 id="Nested_flex_boxes">Nested flex boxes</h2>
<p>It is possible to create some pretty complex layouts with flexbox. It is perfectly ok to set a flex item to also be a flex container, so that its children are also laid out like flexible boxes. Have a look at <a href="https://github.com/mdn/learning-area/blob/master/css/css-layout/flexbox/complex-flexbox.html">complex-flexbox.html</a> (<a href="http://mdn.github.io/learning-area/css/css-layout/flexbox/complex-flexbox.html">see it live also</a>).</p>
<p><img alt="" src="flexbox-example7.png" style="border-style: solid; border-width: 1px; display: block; margin: 0px auto;"></p>
<p>The HTML for this is fairly simple. We've got a {{htmlelement("section")}} element containing three {{htmlelement("article")}}s. The third {{htmlelement("article")}} contains three {{htmlelement("div")}}s. :</p>
<pre class="notranslate">section - article
article
article - div - button
div button
div button
button
button</pre>
<p>Let's look at the code we've used for the layout.</p>
<p>First of all, we set the children of the {{htmlelement("section")}} to be laid out as flexible boxes.</p>
<pre class="brush: css notranslate">section {
display: flex;
}</pre>
<p>Next, we set some flex values on the {{htmlelement("article")}}s themselves. Take special note of the 2nd rule here — we are setting the third {{htmlelement("article")}} to have its children laid out like flex items too, but this time we are laying them out like a column.</p>
<pre class="brush: css notranslate">article {
flex: 1 200px;
}
article:nth-of-type(3) {
flex: 3 200px;
display: flex;
flex-flow: column;
}
</pre>
<p>Next, we select the first {{htmlelement("div")}}. We first use <code>flex:1 100px;</code> to effectively give it a minimum height of 100px, then we set its children (the {{htmlelement("button")}} elements) to also be laid out like flex items. Here we lay them out in a wrapping row, and align them in the center of the available space like we did in the individual button example we saw earlier.</p>
<pre class="brush: css notranslate">article:nth-of-type(3) div:first-child {
flex:1 100px;
display: flex;
flex-flow: row wrap;
align-items: center;
justify-content: space-around;
}</pre>
<p>Finally, we set some sizing on the button, but more interestingly we give it a flex value of 1. This has a very interesting effect, which you'll see if you try resizing your browser window width. The buttons will take up as much space as they can and sit as many on the same line as they can, but when they can no longer fit comfortably on the same line, they'll drop down to create new lines.</p>
<pre class="brush: css notranslate">button {
flex: 1;
margin: 5px;
font-size: 18px;
line-height: 1.5;
}</pre>
<h2 id="Cross_browser_compatibility">Cross browser compatibility</h2>
<p>Flexbox support is available in most new browsers — Firefox, Chrome, Opera, Microsoft Edge and IE 11, newer versions of Android/iOS, etc. However you should be aware that there are still older browsers in use that don't support Flexbox (or do, but support a really old, out-of-date version of it.)</p>
<p>While you are just learning and experimenting, this doesn't matter too much; however if you are considering using flexbox in a real website you need to do testing and make sure that your user experience is still acceptable in as many browsers as possible.</p>
<p>Flexbox is a bit trickier than some CSS features. For example, if a browser is missing a CSS drop shadow, then the site will likely still be usable. Not supporting flexbox features however will probably break a layout completely, making it unusable.</p>
<p>We'll discuss strategies for overcoming tricky cross browser support issues in a future module.</p>
<h2 id="Podsumowanie">Podsumowanie</h2>
<p>Tu kończy się nasza krótka wycieczka po flexboxie. Mamy nadzieję że dobrze się bawiłeś i będziesz się dobrze bawił robiąc postępy w nauce.</p>
<p>W dalszych artykułach przyjrzymy się innnemu ważnemu aspektowi układu strony w CSS - grid system (układ siatkowy).</p>
<div>{{PreviousMenuNext("Learn/CSS/CSS_layout/Practical_positioning_examples", "Learn/CSS/CSS_layout/Grids", "Learn/CSS/CSS_layout")}}</div>
<div>
<h2 id="W_tym_module">W tym module</h2>
<ul>
<li><a href="/en-US/docs/Learn/CSS/CSS_layout/Introduction">Introduction to CSS layout</a></li>
<li><a href="/en-US/docs/Learn/CSS/CSS_layout/Floats">Floats</a></li>
<li><a href="/en-US/docs/Learn/CSS/CSS_layout/Positioning">Positioning</a></li>
<li><a href="/en-US/docs/Learn/CSS/CSS_layout/Practical_positioning_examples">Practical positioning examples</a></li>
<li><a href="/en-US/docs/Learn/CSS/CSS_layout/Flexbox">Flexbox</a></li>
<li><a href="/en-US/docs/Learn/CSS/CSS_layout/Grids">Grids</a></li>
</ul>
</div>
|