Share
Embed
CSS Layout: O ontem, o hoje e o depois
Partindo do ontem com layouts em tabelas e passando pelo hoje com o box model, iremos explorar as limitações dessas abordagens para entender o que as novas técnicas do depois – flexbox, grids, regions e exclusions – vêm a solucionar.
Almir Filho
June 15, 2013
Transcript
153 slides
-
tabelas box model flexbox 1990 1995 1998 2012 ? regions
exclusions & <pre> grid ? -
• 1995 html 3.0 • <table> • nunca foi aprovado
• text flow ao redor de <img> • elementos matematicos -
html 3.2 spec “HTML 3.2 includes a widely deployed subset
of the specification given in RFC 1942 and can be used to markup tabular material or for layout purposes.” W3C HTML 3.2 specification – http://www.w3.org/TR/REC-html32 -
codigo <!-- ** M A I N T A B
L E ** --> <A NAME="topofpage"> <TABLE WIDTH=598 BORDER=0 CELLPADDING=0 CELLSPACING=0> <!-- ROW 1 --> <TR VALIGN="TOP"> <!-- ** M A R G I N M E N U ** --> <TD WIDTH=128 ROWSPAN=3 VALIGN="TOP" BGCOLOR="#CCC"> <IMG SRC="/web/19961022105458im_/http://www4.apple.com elements/spacer2.gif" WIDTH=128 HEIGHT=1 ALT=""><BR> <!-- SERVER SIDE IMAGE MAP --> <A HREF="/web/19961022105458/http://www5.apple.com/cgi imagemap/mapserve.acgi$home/newsidebar.map"> <IMG SRC="/web/19961022105458im_/http://www4.apple.com elements/sidebar.gif" WIDTH=125 HEIGHT=262 BORDER=0 ALT="Navigation Graphic - See Below" ISMAP USEMAP="#newsidebar"></A> -
• conteudo e estilo misturados problemas • render nao incremental
• baixa acessibilidade -
• 1996 (com o HTML 3.2) css 1 • separa
estilo da marcacao • reuso de estilos • independente do conteudo (?) -
css 1 • block-level elements • margin, padding e border
• width e height • display e float -
• 1998 - 2011! css 2.1 • position • top,
bottom, left e right • min-height e max-height • min-width e max-width -
• 1999 - HOJE css 3 • CSS basic user
interface module level 3 • box-sizing: border-box -
margin-top margin-bottom margin-left margin-right padding-top padding-bottom padding-left padding-right width x
height border-top-width border-bottom-width border-left-width border-right-width top bottom left right -
margin-top margin-bottom margin-left margin-right padding-top padding-bottom padding-left padding-right border-top-width border-bottom-width
border-left-width border-right-width width x height top bottom left right bo x- siz i ng: bor der-box ; -
• alinhar verticalmente problemas Conteudo .box { vertical-align: middle; }
display: table-cell; -
• igualar altura de regioes problemas Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non <aside> .box { height: 200px; } aside, .text { height: 100%; float: left; } -
• igualar altura de regioes problemas Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non <aside> .box { height: 200px; } aside, .text { height: 100%; float: left; } Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ofelquys lotomania ipsum tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -
• igualar altura de regioes problemas Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non <aside> .box { height: 200px; } aside, .text { height: 100%; float: left; } Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ofelquys lotomania ipsum tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. -
• igualar altura de regioes problemas Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non <aside> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ofelquys lotomania ipsum tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. .box { height: 200px; display: table-row; } aside, .right { height: 100%; float: left; display: table-cell; } -
• otimizado para UI layout • comportamento previsivel • agnostico
de direcao flexbox -
vantagens • agnostico a direcao • modificar ordem s/ estrutura
• alinhamento left, right, center, top, bottom, whatever -
versões • 2009: display:box; box-{*} • 2011: display:box; flex() •
2012: display:flex; flex-{*} -
vocabulário flex-item flex-item main size cross size main axis cross
axis flex-container -
grow and shrink .a .a .b .container { display: flex;
flex-direction: row; } .container 600px -
flex-grow .a .a .b .a { flex-basis: 113px; flex-grow: 0;
flex-shrink: 1; } .b { flex-basis: 333px; flex-grow: 1; flex-shrink: 0; } .container 600px -
.a .a .b .a { flex-basis: 113px; flex-grow: 0; flex-shrink:
1; } .container 800px .b { flex-basis: 333px; flex-grow: 1; flex-shrink: 0; } flex-grow -
flex-shrink .a .a .b .container 600px .a { flex-basis: 113px;
flex-grow: 0; flex-shrink: 1; } .b { flex-basis: 333px; flex-grow: 1; flex-shrink: 0; } -
.a .b .container 500px .a .a { flex-basis: 113px; flex-grow:
0; flex-shrink: 1; } .b { flex-basis: 333px; flex-grow: 1; flex-shrink: 0; } flex-shrink -
cálculo do espaço .a .b .container 800px .c .a {
flex: 1; } .b { flex: 2; } .c { flex: 1; } css .container { display: flex; } -
centralizar elementos .a .container { display: flex; } .container .a
{ margin: auto; } -
centralizar elementos .a .container .container { display: flex; } .a
{ margin: auto; } -
html • separacao de conteudo e apresentacao • HTML como
template • layouts de impressos -
Mauris iaculis porttitor posuere. Praesent id metus massa, ut blandit
odio. Proin quis tortor orci. Etiam at risus et justo dignissim congue. Donec congue lacinia dui, a porttitor lectus condimentum laoreet. Nunc eu ullamcorper orci. Quisque eget odio ac lectus vestibulum faucibus eget in metus. In pellentesque faucibus vestibulum. Nulla at nulla justo, eget luctus tortor. Nulla facilisi. Duis aliquet egestas purus in blandit. Curabitur vulputate, ligula lacinia scelerisque tempor, lacus lacus ornare ante, ac egestas est urna sit amet arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed layout em colunas Phasellus molestie magna non est bibendum non venenatis nisl tempor. Suspendisse dictum feugiat nisl ut dapibus. Mauris iaculis porttitor posuere. Praesent id metus massa, ut blandit odio. Proin quis tortor orci. Etiam at risus et justo dignissim congue. Donec congue lacinia dui, a porttitor lectus condimentum laoreet. Nunc eu ullamcorper orci. Quisque eget odio ac lectus vestibulum faucibus eget in metus. In pellentesque faucibus vestibulum. Nulla at nulla justo, eget luctus tortor. Nulla facilisi. Duis aliquet egestas purus in blandit. Curabitur vulputate, ligula lacinia scelerisque tempor, lacus lacus ornare ante, ac egestas est urna sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac tempor dui sagittis. In condimentum facilisis porta. Sed nec diam eu diam mattis viverra. Nulla fringilla, orci ac euismod semper, magna diam porttitor mauris, quis sollicitudin sapien justo in libero. Vestibulum mollis mauris enim. Morbi euismod magna ac lorem rutrum elementum. Donec viverra auctor lobortis. Pellentesque eu est a nulla placerat dignissim. Morbi a enim in magna semper bibendum. -
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, Mauris iaculis porttitor posuere. Praesent id metus massa, ut blandit odio. Proin quis tortor orci. Etiam at risus et justo dignissim congue. Donec congue lacinia dui, a porttitor lectus condimentum laoreet. Nunc eu ullamcorper orci. Quisque eget odio ac lectus vestibulum faucibus eget in metus. In pellentesque faucibus vestibulum. Nulla at nulla justo, eget luctus tortor. Nulla facilisi. Duis aliquet egestas purus in blandit. Curabitur vulputate, ligula lacinia scelerisque tempor, lacus lacus ornare ante, ac egestas est urna sit amet arcu. layouts complexos -
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, Mauris iaculis porttitor posuere. Praesent id metus massa, ut blandit odio. Proin quis tortor orci. Etiam at risus et justo dignissim congue. Donec congue lacinia dui, a porttitor lectus condimentum laoreet. Nunc eu ullamcorper orci. Quisque eget odio ac lectus vestibulum faucibus eget in metus. In pellentesque faucibus vestibulum. Nulla at nulla justo, eget luctus tortor. Nulla facilisi. Duis aliquet egestas purus in blandit. Curabitur vulputate, ligula lacinia scelerisque tempor, lacus lacus ornare ante, ac egestas est urna sit amet arcu. layouts complexos -
html <div class=”content”> <p> ... </p> </div> <div class=”region region-1”></div>
<img src=”” /> <div class=”region region-2”></div> <div class=”region region-3”></div> <div class=”region region-4”></div> -
html <div class=”content”> <p> ... </p> </div> <div class=”region region-1”></div>
<img src=”” /> <div class=”region region-2”></div> <div class=”region region-3”></div> <div class=”region region-4”></div> -
a tirania do retângulo border-radius? • molda apenas estilo •
nao molda conteudo -
a tirania do retângulo Sed at ast molestie augue tad
sitep amet leo consequat siuop posuere. Vestibulum ante ipsum tade primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum bdolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac tempor dui sagittis. In condimentum facilisis porta. Sed nec diam eu diam mattis viverra. Nulla fringilla, orci ac amet euism Sed Sed ast molestie augue sitep amet leo consequat siuop posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus temo eleifend ut et magna. Lorem ipsum dolor sito amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies actased tempor dui sagittis. In at sectum condimentum facilisis porta. Sed nec diam eu et magna. Lorem ipsum dolor sito amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies actased -
shape-inside .circulo { // shape-inside: circle(cx, cy, radius); shape-inside: circle(50%,
50%, 50%); } Sed ast molestie augue sitep amet leo consequat siuop posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac tempor dui sagittis. In condimentum facilisis porta. Sed nec diam eu diam mattis viverra. Nulla fringilla, orci ac amet euism Sed -
shape-inside A Sed molestie augue sit amet leo consequat as
due to a posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac am .estrela { shape-inside: polygon(0px 150px, ...); } -
shapes com regions A Sed molestie augue sit amet leo
consequat as due to a posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum dolor sit amet, soc at consectetur adipisg elit. Vivamus luctus urna sed urna ultricies ser am Sed ast molestie augue sitep amet leo consequat siuop posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac tempor dui sagittis. In condimentum facilisis porta. Sed nec diam eu diam mattis viverra. Nulla fringilla, orci ac amet euism Sed -
shape-outside Sed ast molestie augue sitep amet leo consequat siuop
posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac tempor dui sagittis. In condimentum facilisis porta. Sed nec diam eu diam mattis viverra. nulla fringilla, orci ac amet euism sed orci ac amet euism <div class="circulo"></div> <p>Lorem ipsum dolor sit amet...</p> -
shape-outside Sed ast molestie augue sitep amet leo consequat siuop
posuere. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac tempor dui sagittis. In condimentum facilisis porta. Sed nec diam eu diam mattis viverra. nulla fringilla, orci ac amet euism sed orci ac amet euism .circulo { float: left; shape-outside: circle(50px, 50%, 50%); } -
• 2012 (W3C draft) css grid layout • divide o
espaco em regioes -
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non LOOP Lorem ipsum Dolor sit amet Consectetur adipisicing Sed do eiusmod bla bla footer -
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non LOOP Lorem ipsum Dolor sit amet Consectetur adipisicing Sed do eiusmod bla bla footer flexivel fixo -
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod kracta caio gondim lorem tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non LOOP Lorem ipsum Dolor sit amet Consectetur adipisicing Sed do eiusmod bla bla footer flexivel fixo -
css grid-template-rows: auto auto auto; 1 2 3 4 5
6 grid-template-columns: auto auto; display: grid; -
css 1 2 3 4 5 6 grid-template-columns: auto auto;
AREA DA TELA -
css content 1 3 4 5 6 RESIZE grid-template-columns: auto
minmax(min-content, 1fr); -
css content 1 3 4 5 6 RESIZE MAIS grid-template-columns:
auto minmax(min-content, 1fr); -
minmax() minmax(800px, 1fr); minmax(2fr, 3fr); minmax(50%, 100%); minmax(10em, 80%); minmax(min-content,
1fr); minmax(70%, max-content); minmax(calc(70% + 80px + 9em), 1fr); minmax(min-content, max-content) = auto -
html <div class="reg5">c5</div> <div class="reg1">c1</div> <div class="reg2">c2</div> <div class="reg3">c3</div> <div
class="reg4">c4</div> • sem blocos para linha/coluna <div class="reg6">c6</div> 1 2 3 4 5 6 <div class="container"> </div> -
html • a ordem nao importa 1 2 3 4
5 6 <div class="container"> </div> <div class="reg5">c5</div> <div class="reg1">c1</div> <div class="reg2">c2</div> <div class="reg3">c3</div> <div class="reg4">c4</div> <div class="reg6">c6</div> -
css 2 3 4 5 6 .reg1 { grid-column: 1;
grid-row: 1; } c1 -
css 2 3 5 6 .reg1 { grid-column: 1; grid-row:
1; } c1 .reg4 { grid-column: 2; grid-row: 2; } c4 -
css 2 5 6 .reg1 { grid-column: 1; grid-row: 1;
} c1 .reg4 { grid-column: 2; grid-row: 2; } c4 .reg3 { grid-column: 1; grid-row: 2; } c3 -
css 2 5 6 .reg1 { grid-column: 1; grid-row: 1;
} c1 .reg4 { grid-column: 2; grid-row: 2; } c4 .reg3, .reg6 { grid-column: 1; grid-row: 2; } c3 c6 -
grid-template header aside content footer .container { display: grid; grid-template-areas:
"header header" "aside content" "footer footer"; } -
grid-template .container { display: grid; grid-template-areas: "header header" "aside content"
"footer footer"; } .reg1 { grid-area: header } .reg2 { grid-area: aside } .reg3 { grid-area: content } .reg4 { grid-area: content } .reg5 { grid-area: content } .reg6 { grid-area: footer } -
templates responsivos @media (orientation: landscape){ .container { grid-template-areas: "header header
header" "menu content aside" "footer footer footer"; } } @media (orientation: portrait){ .container { grid-template-areas: "header header" "menu menu" "content content" "aside footer"; } } -
tabelas box model flexbox regions exclusions 1990 1995 1998 2012
? & <pre> grid ?