Wiki source code of Skin 10.x: Layout Variations

Last modified by Vincent Massol on 2024/11/19 16:15

Show last authors
1 {{velocity output="false"}}
2 $xwiki.ssx.use('Proposal.Skin10x.LayoutVariations')
3 {{/velocity}}
4
5 {{toc start="2"/}}
6
7 == Current Layouts ==
8
9 Our current layout is a full width one, with a central area (##.main##) and 2 panels areas (###leftPanels##, ###rightPanels##).
10
11 (% class="row" %)
12 (((
13 (% class="col-xs-12 col-sm-6" %)
14 (((
15 {{code language="html"}}
16 <body id="body">
17 <div id="xwikimaincontainer">
18 <div id="xwikimaincontainerinner">
19 <div id="menuview"></div>
20 <div id="headerglobal"></div>
21 <div class="content" id="contentcontainer">
22 <div id="contentcontainerinner">
23 <div class="leftsidecolumns">
24 <div id="contentcolumn">
25 <div class="main">
26 <div id="mainContentArea">
27 <ol id="hierarchy"></ol>
28 <div class="xcontent"></div>
29 </div>
30 <div id="xdocFooter"></div>
31 <div id="xwikidata"></div>
32 </div>
33 </div>
34 <div id="leftPanels"></div>
35 </div>
36 <div id="rightPanels">
37 </div>
38 </div>
39 </div>
40 <div id="footerglobal"></div>
41 </div>
42 </div>
43 </body>
44 {{/code}}
45 )))
46
47 (% class="col-xs-12 col-sm-6" %)
48 (((
49 {{gallery}}
50 image:currentLayout.png
51 {{/gallery}}
52
53
54 The issue with the current structure is that it's very limiting in terms of layout variations it offers. Also it contains a lot of legacy containers that limit the layout placement and also bloats the structure.
55
56 When we integrated Bootstrap 3, one important thing we did is that we used LESS, its extend() function and the .make-*-column() mixins when we generated the layout, instead of using the ##.container##, ##.row## and ##.col-*-*## classes (which some got deprecated in the Bootstrap 4 version).
57
58 Still, in order to fully benefit of the new Flexbox or Grid capabilities we would need to simplify the structure and the divitis nesting, plus changing our core Float layout technique.
59 )))
60 )))
61
62 == Possible Layouts ==
63
64 (% class="row" %)
65 (((
66 (% class="col-xs-12 col-sm-6" %)
67 (((
68 If we were to replicate the default layout for 10.x it would be:
69
70 {{html clean="false"}}
71 <div id="wrapper0">
72 <div class="wrapper">
73 <div class="header">Header</div>
74 <div class="content">Content</div>
75 <div class="panels">Panels</div>
76 <div class="panels">Panels</div>
77 <div class="footer">Footer</div>
78 </div>
79 </div>
80 {{/html}}
81
82
83 Also the structure could be simplified to something like:
84
85 {{code language="html"}}
86 <body>
87 <div class="header">H</div>
88 <div class="content">C</div>
89 <div class="panels">A</div>
90 <div class="panels">B</div>
91 <div class="footer">F</div>
92 </body>
93 {{/code}}
94 )))
95
96 (% class="col-xs-12 col-sm-6" %)
97 (((
98 (% class="row" %)
99 (((
100 (% class="col-xs-3" %)
101 (((
102 No side column
103 {{html clean="false"}}<div id="wrapper0-HLHR">
104 <div class="wrapper">
105 <div class="header">H</div>
106 <div class="content">C</div>
107 <div class="panels">A</div>
108 <div class="panels">B</div>
109 <div class="footer">F</div>
110 </div>
111 </div>{{/html}}
112 )))
113
114 (% class="col-xs-3" %)
115 (((
116 Left column
117 {{html clean="false"}}<div id="wrapper0-HR">
118 <div class="wrapper">
119 <div class="header">H</div>
120 <div class="content">C</div>
121 <div class="panels">A</div>
122 <div class="panels">B</div>
123 <div class="footer">F</div>
124 </div>
125 </div>{{/html}}
126 )))
127
128 (% class="col-xs-3" %)
129 (((
130 Right column
131 {{html clean="false"}}<div id="wrapper0-HL">
132 <div class="wrapper">
133 <div class="header">H</div>
134 <div class="content">C</div>
135 <div class="panels">A</div>
136 <div class="panels">B</div>
137 <div class="footer">F</div>
138 </div>
139 </div>{{/html}}
140 )))
141
142 (% class="col-xs-3" %)
143 (((
144 Both columns
145 {{html clean="false"}}<div id="wrapper0">
146 <div class="wrapper">
147 <div class="header">H</div>
148 <div class="content">C</div>
149 <div class="panels">A</div>
150 <div class="panels">B</div>
151 <div class="footer">F</div>
152 </div>
153 </div>{{/html}}
154 )))
155 )))
156
157
158 The above are all the layout variations available on XWiki 10.x with the Flamingo Skin. On top of the layout variations, each panel area can have 3 size: Small, Medium, Large.
159 )))
160 )))
161
162 === Full Width vs. Centered Layouts ===
163
164 One of the major requests for public website is the ability to easily change (without the need of a custom skin) the layout from full width to centered. On xwiki.org for example we have some homepages centered, while the content pages are full width.
165
166 (% class="row" %)
167 (((
168 (% class="col-xs-3 col-sm-2" %)
169 (((
170 Full Width
171 {{html clean="false"}}<div id="wrapper0">
172 <div class="wrapper">
173 <div class="header">H</div>
174 <div class="content">C</div>
175 <div class="panels">A</div>
176 <div class="panels">B</div>
177 <div class="footer">F</div>
178 </div>
179 </div>{{/html}}
180 )))
181
182 (% class="col-xs-3 col-sm-2" %)
183 (((
184 Centered
185 {{html clean="false"}}<div id="wrapper1-C">
186 <div class="wrapper">
187 <div class="header">H</div>
188 <div class="content">C</div>
189 <div class="panels">A</div>
190 <div class="panels">B</div>
191 <div class="footer">F</div>
192 </div>
193 </div>{{/html}}
194 )))
195 )))
196
197 === Column Layouts ===
198
199 Having a Grid system it allows multiple variation of column placement. Being in just 1 dimension, the following could be also implemented / fallbacked on Flexbox, which is the current layout technique used in Bootstrap 4.
200 Some of the following examples go beyond the current XWiki layout capabilities, so they would provide extra layout extensibility.
201
202 (% class="row" %)
203 (((
204 (% class="col-xs-3 col-sm-2" %)
205 (((
206 [[2-1>>attach:Layout2-1.png]]
207 {{html clean="false"}}<div id="wrapper2-1">
208 <div class="wrapper">
209 <div class="header"></div>
210 <div class="content">C</div>
211 <div class="panels">A</div>
212 <div class="panels">B</div>
213 <div class="footer"></div>
214 </div>
215 </div>{{/html}}
216 )))
217
218 (% class="col-xs-3 col-sm-2" %)
219 (((
220 [[2-2>>attach:Layout2-2.png]]
221 {{html clean="false"}}<div id="wrapper2-2">
222 <div class="wrapper">
223 <div class="header"></div>
224 <div class="content">C</div>
225 <div class="panels">A</div>
226 <div class="panels">B</div>
227 <div class="footer"></div>
228 </div>
229 </div>{{/html}}
230 )))
231
232 (% class="col-xs-3 col-sm-2" %)
233 (((
234 2-3
235 {{html clean="false"}}<div id="wrapper2-3">
236 <div class="wrapper">
237 <div class="header"></div>
238 <div class="content">C</div>
239 <div class="panels">A</div>
240 <div class="panels">B</div>
241 <div class="footer"></div>
242 </div>
243 </div>{{/html}}
244 )))
245
246 (% class="col-xs-3 col-sm-2" %)
247 (((
248 2-4
249 {{html clean="false"}}<div id="wrapper2-4">
250 <div class="wrapper">
251 <div class="header"></div>
252 <div class="content">C</div>
253 <div class="panels">A</div>
254 <div class="panels">B</div>
255 <div class="footer"></div>
256 </div>
257 </div>{{/html}}
258 )))
259
260 (% class="col-xs-3 col-sm-2" %)
261 (((
262 2-5
263 {{html clean="false"}}<div id="wrapper2-5">
264 <div class="wrapper">
265 <div class="header"></div>
266 <div class="content">C</div>
267 <div class="panels">A</div>
268 <div class="panels">B</div>
269 <div class="footer"></div>
270 </div>
271 </div>{{/html}}
272 )))
273
274 (% class="col-xs-3 col-sm-2" %)
275 (((
276 2-6
277 {{html clean="false"}}<div id="wrapper2-6">
278 <div class="wrapper">
279 <div class="header"></div>
280 <div class="content">C</div>
281 <div class="panels">A</div>
282 <div class="panels">B</div>
283 <div class="footer"></div>
284 </div>
285 </div>{{/html}}
286 )))
287 )))
288
289
290 (% class="row" %)
291 (((
292 (% class="col-xs-3 col-sm-2" %)
293 (((
294 [[2-7>>attach:Layout2-7.png]]
295 {{html clean="false"}}<div id="wrapper2-7">
296 <div class="wrapper">
297 <div class="header"></div>
298 <div class="content">C</div>
299 <div class="panels">A</div>
300 <div class="panels">B</div>
301 <div class="footer"></div>
302 </div>
303 </div>{{/html}}
304 )))
305
306 (% class="col-xs-3 col-sm-2" %)
307 (((
308 2-7-1
309 {{html clean="false"}}<div id="wrapper2-7">
310 <div class="wrapper">
311 <div class="header"></div>
312 <div class="content">C</div>
313 <div class="panels">A</div>
314 <div class="panels">B</div>
315 <div class="panels">D</div>
316 <div class="panels">E</div>
317 <div class="footer"></div>
318 </div>
319 </div>{{/html}}
320 )))
321
322 (% class="col-xs-3 col-sm-2" %)
323 (((
324 2-8
325 {{html clean="false"}}<div id="wrapper2-8">
326 <div class="wrapper">
327 <div class="header"></div>
328 <div class="content">C</div>
329 <div class="panels">A</div>
330 <div class="panels">B</div>
331 <div class="footer"></div>
332 </div>
333 </div>{{/html}}
334 )))
335
336 (% class="col-xs-3 col-sm-2" %)
337 (((
338 [[2-9>>attach:Layout2-9.png]]
339 {{html clean="false"}}<div id="wrapper2-9">
340 <div class="wrapper">
341 <div class="header"></div>
342 <div class="content">C</div>
343 <div class="panels">A</div>
344 <div class="panels">B</div>
345 <div class="footer"></div>
346 </div>
347 </div>{{/html}}
348 )))
349
350 (% class="col-xs-3 col-sm-2" %)
351 (((
352 [[2-10>>attach:Layout2-10.png]]
353 {{html clean="false"}}<div id="wrapper2-10">
354 <div class="wrapper">
355 <div class="header"></div>
356 <div class="content">C</div>
357 <div class="panels">A</div>
358 <div class="panels">B</div>
359 <div class="footer"></div>
360 </div>
361 </div>{{/html}}
362 )))
363
364 (% class="col-xs-3 col-sm-2" %)
365 (((
366 [[2-11>>attach:Layout2-11.png]]
367 {{html clean="false"}}<div id="wrapper2-11">
368 <div class="wrapper">
369 <div class="header"></div>
370 <div class="content">C</div>
371 <div class="panels">A</div>
372 <div class="panels">B</div>
373 <div class="footer"></div>
374 </div>
375 </div>{{/html}}
376 )))
377 )))
378
379
380 (% class="row" %)
381 (((
382 (% class="col-xs-3 col-sm-2" %)
383 (((
384 [[2-12>>attach:Layout2-12.png]]
385 {{html clean="false"}}<div id="wrapper2-12">
386 <div class="wrapper">
387 <div class="header"></div>
388 <div class="content">C</div>
389 <div class="panels">A</div>
390 <div class="panels">B</div>
391 <div class="footer"></div>
392 </div>
393 </div>{{/html}}
394 )))
395 )))
396
397 === Header Footer Layouts ===
398
399 The classic layouts usually include a header and a footer, so these are some possible layout variations:
400
401 (% class="row" %)
402 (((
403 (% class="col-xs-3 col-sm-2" %)
404 (((
405 3-1
406 {{html clean="false"}}<div id="wrapper3-1">
407 <div class="wrapper">
408 <div class="header">H</div>
409 <div class="content">C</div>
410 <div class="panels">A</div>
411 <div class="panels">B</div>
412 <div class="footer">F</div>
413 </div>
414 </div>{{/html}}
415 )))
416
417 (% class="col-xs-3 col-sm-2" %)
418 (((
419 3-2
420 {{html clean="false"}}<div id="wrapper3-2">
421 <div class="wrapper">
422 <div class="header">H</div>
423 <div class="content">C</div>
424 <div class="panels">A</div>
425 <div class="panels">B</div>
426 <div class="footer">F</div>
427 </div>
428 </div>{{/html}}
429 )))
430
431 (% class="col-xs-3 col-sm-2" %)
432 (((
433 3-3
434 {{html clean="false"}}<div id="wrapper3-3">
435 <div class="wrapper">
436 <div class="header">H</div>
437 <div class="content">C</div>
438 <div class="panels">A</div>
439 <div class="panels">B</div>
440 <div class="footer">F</div>
441 </div>
442 </div>{{/html}}
443 )))
444
445 (% class="col-xs-3 col-sm-2" %)
446 (((
447 3-4
448 {{html clean="false"}}<div id="wrapper3-4">
449 <div class="wrapper">
450 <div class="header">H</div>
451 <div class="content">C</div>
452 <div class="panels">A</div>
453 <div class="panels">B</div>
454 <div class="footer">F</div>
455 </div>
456 </div>{{/html}}
457 )))
458
459 (% class="col-xs-3 col-sm-2" %)
460 (((
461 3-5
462 {{html clean="false"}}<div id="wrapper3-5">
463 <div class="wrapper">
464 <div class="header">H</div>
465 <div class="content">C</div>
466 <div class="panels">A</div>
467 <div class="panels">B</div>
468 <div class="footer">F</div>
469 </div>
470 </div>{{/html}}
471 )))
472
473 (% class="col-xs-3 col-sm-2" %)
474 (((
475 3-6
476 {{html clean="false"}}<div id="wrapper3-6">
477 <div class="wrapper">
478 <div class="header">H</div>
479 <div class="content">C</div>
480 <div class="panels">A</div>
481 <div class="panels">B</div>
482 <div class="footer">F</div>
483 </div>
484 </div>{{/html}}
485 )))
486 )))
487
488 === Advanced Grid Layouts ===
489
490 Grid allow us to create all sorts of layouts, from asymmetric to overlapping ones. The possibilities are endless. Here are some examples the future skin could transform into (or all) if the new Grid layout technique would be integrated:
491
492 (% class="row" %)
493 (((
494 (% class="col-xs-3 col-sm-2" %)
495 (((
496 4-1
497 {{html clean="false"}}<div id="wrapper4-1">
498 <div class="wrapper">
499 <div class="header">H</div>
500 <div class="content">C</div>
501 <div class="panels">A</div>
502 <div class="panels">B</div>
503 <div class="panels">D</div>
504 <div class="panels">E</div>
505 <div class="panels">G</div>
506 <div class="footer">F</div>
507 </div>
508 </div>{{/html}}
509 )))
510
511 (% class="col-xs-3 col-sm-2" %)
512 (((
513 4-2
514 {{html clean="false"}}<div id="wrapper4-2">
515 <div class="wrapper">
516 <div class="header">H</div>
517 <div class="content">C</div>
518 <div class="panels">A</div>
519 <div class="panels">B</div>
520 <div class="panels">D</div>
521 <div class="panels">E</div>
522 <div class="footer">F</div>
523 </div>
524 </div>{{/html}}
525 )))
526
527 (% class="col-xs-3 col-sm-2" %)
528 (((
529 4-3
530 {{html clean="false"}}<div id="wrapper4-3">
531 <div class="wrapper">
532 <div class="header">H</div>
533 <div class="content">C</div>
534 <div class="panels">A</div>
535 <div class="panels">B</div>
536 <div class="panels">D</div>
537 <div class="panels">E</div>
538 <div class="footer">F</div>
539 </div>
540 </div>{{/html}}
541 )))
542
543 (% class="col-xs-3 col-sm-2" %)
544 (((
545 4-4
546 {{html clean="false"}}<div id="wrapper4-4">
547 <div class="wrapper">
548 <div class="header">H</div>
549 <div class="content">C</div>
550 <div class="panels">A</div>
551 <div class="panels">B</div>
552 <div class="footer">F</div>
553 </div>
554 </div>{{/html}}
555 )))
556
557 (% class="col-xs-3 col-sm-2" %)
558 (((
559 4-5
560 {{html clean="false"}}<div id="wrapper4-5">
561 <div class="wrapper">
562 <div class="header">H</div>
563 <div class="content">C</div>
564 <div class="panels">A</div>
565 <div class="panels">B</div>
566 <div class="panels">D</div>
567 <div class="panels">E</div>
568 <div class="footer">F</div>
569 </div>
570 </div>{{/html}}
571 )))
572
573 (% class="col-xs-3 col-sm-2" %)
574 (((
575 4-6
576 {{html clean="false"}}<div id="wrapper4-6">
577 <div class="wrapper">
578 <div class="header">H</div>
579 <div class="content">C</div>
580 <div class="panels">A</div>
581 <div class="panels">B</div>
582 <div class="panels">D</div>
583 <div class="footer">F</div>
584 </div>
585 </div>{{/html}}
586 )))
587 )))
588
589
590 (% class="row" %)
591 (((
592 (% class="col-xs-3 col-sm-2" %)
593 (((
594 [[4-7>>attach:Layout4-7.png]]
595 {{html clean="false"}}<div id="wrapper4-7">
596 <div class="wrapper">
597 <div class="header">H</div>
598 <div class="content">C</div>
599 <div class="panels">A</div>
600 <div class="panels">B</div>
601 <div class="panels">D</div>
602 <div class="panels">E</div>
603 <div class="panels">G</div>
604 <div class="footer">F</div>
605 </div>
606 </div>{{/html}}
607 )))
608
609 (% class="col-xs-3 col-sm-2" %)
610 (((
611 [[4-8>>attach:Layout4-8.png]]
612 {{html clean="false"}}<div id="wrapper4-8">
613 <div class="wrapper">
614 <div class="header">H</div>
615 <div class="content">C</div>
616 <div class="panels">A</div>
617 <div class="panels">B</div>
618 <div class="panels">D</div>
619 <div class="panels">E</div>
620 <div class="footer">F</div>
621 </div>
622 </div>{{/html}}
623 )))
624
625 (% class="col-xs-3 col-sm-2" %)
626 (((
627 [[4-9>>attach:Layout4-9.png]]
628 {{html clean="false"}}<div id="wrapper4-9">
629 <div class="wrapper">
630 <div class="header">H</div>
631 <div class="content">C</div>
632 <div class="panels">A</div>
633 <div class="panels">B</div>
634 <div class="footer">F</div>
635 </div>
636 </div>{{/html}}
637 )))
638
639 (% class="col-xs-3 col-sm-2" %)
640 (((
641 [[4-10>>attach:Layout4-10.png]]
642 {{html clean="false"}}<div id="wrapper4-10">
643 <div class="wrapper">
644 <div class="header">H</div>
645 <div class="content">C</div>
646 <div class="panels">A</div>
647 <div class="panels">B</div>
648 <div class="panels">D</div>
649 <div class="panels">E</div>
650 <div class="panels">G</div>
651 <div class="panels">I</div>
652 <div class="footer">F</div>
653 </div>
654 </div>{{/html}}
655 )))
656
657 (% class="col-xs-3 col-sm-2" %)
658 (((
659 [[4-11>>attach:Layou4-11.png]]
660 {{html clean="false"}}<div id="wrapper4-11">
661 <div class="wrapper">
662 <div class="header">H</div>
663 <div class="content">C</div>
664 <div class="panels">A</div>
665 <div class="panels">B</div>
666 <div class="panels">D</div>
667 <div class="panels">E</div>
668 <div class="footer">F</div>
669 </div>
670 </div>{{/html}}
671 )))
672
673 (% class="col-xs-3 col-sm-2" %)
674 (((
675 [[4-12>>attach:Layout4-12.png]]
676 {{html clean="false"}}<div id="wrapper4-12">
677 <div class="wrapper">
678 <div class="header">H</div>
679 <div class="content">C</div>
680 <div class="panels">A</div>
681 <div class="panels">B</div>
682 </div>
683 </div>{{/html}}
684 )))
685 )))
686
687
688
689 (% class="row" %)
690 (((
691 (% class="col-xs-3 col-sm-2" %)
692 (((
693 [[4-13>>attach:Layout4-13.png]]
694 {{html clean="false"}}<div id="wrapper4-13">
695 <div class="wrapper">
696 <div class="header">H</div>
697 <div class="content">C</div>
698 <div class="panels">A</div>
699 <div class="footer">F</div>
700 </div>
701 </div>{{/html}}
702 )))
703 )))
704
705
706 This flexibility is also great for different view ports, allowing optimised layouts for mobile, tablet view that prioritise the content no matter where they are placed in the structure. Also we could allow customising the layout at the Page level, so the user could choose something different for Homepage, Dashboard, Blog pages, etc.
707
708 Also not depending on Bootstrap's 3 grid system means we are not limited to a 12 columns grid system.
709
710 The possibilities are endless. On top of the grid we could also add angled containers and having the ability to create overlapping layouts, any layout variation can be created.
711
712 == Preview examples ==
713
714 {{gallery}}
715 image:Layout4-12.png
716 image:Layout4-13.png
717 image:Layout4-7.png
718 image:Layout2-2.png
719 image:Layout4-9.png
720 image:Layout2-10.png
721 image:Layou4-11.png
722 {{/gallery}}

Get Connected