Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Confoo: You can use CSS for that!

944 views

Published on

Today we have CSS specifications for animation and transitions, complex layout, custom properties and much more. In addition to the breadth of modern CSS specifications, our evergreen, auto-updating browsers sneak in new features with every release.

In this talk, I’ll be taking a look at some of the things that CSS is capable of, some of which you might think you need a JavaScript framework or at least a pre-processor to achieve.

Published in: Technology
  • Be the first to comment

Confoo: You can use CSS for that!

  1. 1. You can use CSS for that! @rachelandrew @confooca
  2. 2. Box Alignment level 3 Lining things up with
  3. 3. This is the vertical- centering module.
  4. 4. .box { display: flex; align-items: center; justify-content: center; } <div class="box"> <img alt="balloon" src="square- balloon.jpg"> </div> Flexbox Centre the content of .box.
  5. 5. http://codepen.io/rachelandrew/pen/XKaZWm
  6. 6. http://codepen.io/rachelandrew/pen/RavbmN
  7. 7. .wrapper { display: flex; } .wrapper li { min-width: 1%; flex: 1 0 25%; } .wrapper li:nth-child(2) { align-self: center; } .wrapper li:nth-child(3) { align-self: flex-start; } .wrapper li:nth-child(4) { align-self: flex-end; } Flexbox Aligning items within the flex container
  8. 8. Box Alignment defines how these properties work in other layout methods.
  9. 9. The box alignment properties in CSS are a set of 6 properties that control alignment of boxes within other boxes. CSS BOX ALIGNMENT LEVEL 3 https://drafts.csswg.org/css-align/
  10. 10. CSS BOX ALIGNMENT LEVEL 3 ▸ justify-content ▸ align-content ▸ justify-self ▸ align-self ▸ justify-items ▸ align-items
  11. 11. CSS Grid Layout A proper layout system with
  12. 12. .wrapper { display: grid; grid-template-columns: repeat(4, 1fr); } .wrapper li { min-width: 1%; } .wrapper li:nth-child(2) { align-self: center; } .wrapper li:nth-child(3) { align-self: start; } .wrapper li:nth-child(4) { align-self: end; } CSS Grid Layout Aligning grid items with the Box Alignment properties.
  13. 13. http://codepen.io/rachelandrew/pen/jqdNoL
  14. 14. “Unlike Flexbox, however, which is single-axis–oriented, Grid Layout is optimized for 2-dimensional layouts: those in which alignment of content is desired in both dimensions.” CSS GRID LAYOUT https://drafts.csswg.org/css-grid/
  15. 15. .cards { display:grid; grid-template-columns: 1fr 1fr 1fr; grid-gap: 10px; } CSS Grid Layout Defining a 3 column grid
  16. 16. http://codepen.io/rachelandrew/pen/qqdGOa
  17. 17. .cards { display:flex; flex-wrap: wrap; } .card { flex: 1 1 250px; margin: 5px; } Flexbox Flexbox can wrap flex items onto multiple rows. A new row becomes a new flex container for the purposes of distributing space.
  18. 18. http://codepen.io/rachelandrew/pen/VjzrgG
  19. 19. .cards { display:grid; grid-template-columns: repeat(auto-fill, minmax(200px,1fr)); grid-gap: 10px; } CSS Grid Layout Create as many columns as will fit into the container with a minimum width of 200px, and a maximum of 1fr.
  20. 20. minmax()
  21. 21. http://codepen.io/rachelandrew/pen/QKwvxJ
  22. 22. .home-hero { display: grid; grid-gap: 1px; grid-auto-rows: minmax(150px, auto); } minmax() Rows should be a minimum of 150px and a maximum of auto
  23. 23. CSS Grid auto-placement
  24. 24. <ul class="colors"> <li style="background- color:#FFFFFF;color:black" class="white">FFF FFF </li> <li style="background- color:#CCCCCC;color:black">CCC CCC </li> <li style="background- color:#999999;color:black" class="span3">999 999 </li> </ul> Grid auto-placement I have a list with all ye olde web safe colours in it.
  25. 25. .colors { display: grid; grid-template-columns: repeat(auto-fill,minmax(80px, 1fr)); grid-gap: 2px; grid-auto-rows: minmax(80px, auto); } Grid auto-placement I auto-fill columns and rows with minmax()
  26. 26. http://codepen.io/rachelandrew/pen/LRWPNp/
  27. 27. .white { grid-column: 1 / -1; grid-row: 3; } .black { grid-column: 1 / -1; grid-row: 6; } .span2 { grid-column-end: span 2; grid-row-end: span 2; } .span3 { grid-column-end: span 3; grid-row-end: span 3; } .tall4 { grid-row-end: span 4; } Grid auto-placement Adding classes to some elements, by setting the value of grid-column-end and grid-row-end to span.
  28. 28. .colors { display: grid; grid-template-columns: repeat(auto-fill,minmax(80px, 1fr)); grid-gap: 2px; grid-auto-rows: minmax(80px, auto); grid-auto-flow: dense; } Grid auto-placement grid-auto-flow with a value of dense
  29. 29. http://gridbyexample.com/browsers/
  30. 30. display: contents Vanishing boxes with
  31. 31. The element itself does not generate any boxes, but its children and pseudo-elements still generate boxes as normal. For the purposes of box generation and layout, the element must be treated as if it had been replaced with its children and pseudo- elements in the document tree. DISPLAY: CONTENTS https://drafts.csswg.org/css-display/#box-generation
  32. 32. allow indirect children to become flex or grid items
  33. 33. <div class="wrapper"> <h1></h1> <p></p> <blockquote class="inset"></blockquote> <p></p> <ul class="images"> <li></li> <li></li> </ul> <p></p> </div> display: contents All elements are direct children of ‘wrapper’ except for the li elements.
  34. 34. .wrapper { max-width: 700px; margin: 40px auto; display: grid; grid-column-gap: 30px; grid-template-columns:1fr 1fr; } .wrapper h1, .wrapper p { grid-column: 1 / -1; } .inset { grid-column: 1 ; font: 1.4em/1.3 'Lora', serif; padding: 0; margin: 0; } .inset + p { grid-column: 2; } display: contents A two column grid. The h1, p and blockquote with a class of inset are all direct children.
  35. 35. http://codepen.io/rachelandrew/pen/gLborW
  36. 36. .images { display: contents; } display: contents The ul has a class of images. By applying display: contents the ul is removed and the li elements become direct children.
  37. 37. http://codepen.io/rachelandrew/pen/gLborW
  38. 38. https://www.chromestatus.com/feature/5663606012116992
  39. 39. CSS Shapes Getting curvy with
  40. 40. CSS Shapes describe geometric shapes for use in CSS. For Level 1, CSS Shapes can be applied to floats. A circle shape on a float will cause inline content to wrap around the circle shape instead of the float’s bounding box. CSS SHAPES https://drafts.csswg.org/css-shapes/
  41. 41. .balloon { float: left; width: 429px; shape-outside: circle(50%); } <div class="box"> <img class="balloon" src="round- balloon.png" alt="balloon"> <p>...</p> </div> CSS Shapes A simple shape using the 
 shape-outside property
  42. 42. http://codepen.io/rachelandrew/pen/KrvyQq
  43. 43. .box::before { content: ""; display: block; float: left; width: 429px; height: 409px; shape-outside: circle(50%); } CSS Shapes Floating generated content to create a shape
  44. 44. http://codepen.io/rachelandrew/pen/mErqxy
  45. 45. .balloon { float: right; width: 640px; height: 427px; shape-outside: ellipse(33% 50% at 460px); -webkit-clip-path: ellipse(28% 50% at 460px); clip-path: ellipse(28% 50% at 460px); } CSS Shapes Using clip-path to cut away part of an image
  46. 46. http://codepen.io/rachelandrew/pen/vKJmXR
  47. 47. http://caniuse.com/#feat=css-shapes
  48. 48. Feature Queries Can I Use this with
  49. 49. The ‘@supports’ rule is a conditional group rule whose condition tests whether the user agent supports CSS property:value pairs. FEATURE QUERIES https://www.w3.org/TR/css3-conditional/#at-supports
  50. 50. http://caniuse.com/#feat=css-featurequeries
  51. 51. Anything new in CSS you can use feature queries to detect support.
  52. 52. @supports (display: grid) { .has-grid { /* CSS for grid browsers here */ } } Feature Queries Checking for support of Grid Layout
  53. 53. @supports ((display: grid) and (shape- outside: circle())) { .has-grid-shapes { /* CSS for these excellent browsers here */ } } Feature Queries Test for more than one thing
  54. 54. Using Feature Queries ▸ Write CSS for browsers without support ▸ Override those properties inside the feature queries ▸ See https://hacks.mozilla.org/2016/08/using-feature-queries-in-css/
  55. 55. .balloon { border: 1px solid #999; padding: 2px; } @supports ((shape-outside: ellipse()) and ((clip-path: ellipse()) or (-webkit-clip- path:ellipse()))) { .balloon { border: none; padding: 0; float: right; width: 640px; min-width: 640px; height: 427px; shape-outside: ellipse(33% 50% at 460px); -webkit-clip-path: ellipse(28% 50% at 460px); clip-path: ellipse(28% 50% at 460px); } } Feature Queries Write CSS for browsers without support, override that and add new CSS inside the feature query.
  56. 56. http://codepen.io/rachelandrew/pen/vKJmXR
  57. 57. http://codepen.io/rachelandrew/pen/vKJmXR
  58. 58. Websites that enhance themselves as the platform improves.
  59. 59. Initial Letter Fancy introductions with
  60. 60. Large, decorative letters have been used to start new sections of text since before the invention of printing. In fact, their use predates lowercase letters entirely. This [initial-letter] property specifies styling for dropped, raised, and sunken initial letters. INITIAL LETTER https://drafts.csswg.org/css-inline/#initial-letter-styling
  61. 61. h1+p::first-letter { initial-letter: 4 3; } Initial Letter Make the initial letter four lines tall, one line above the content and 3 into the content.
  62. 62. http://codepen.io/rachelandrew/full/WobvQq/
  63. 63. http://codepen.io/rachelandrew/full/WobvQq/
  64. 64. Currently Safari 9+ only.
  65. 65. h1+p::first-letter { font-weight: bold; initial-letter: 7 ; background-color: rgb(114,110,151); padding: 2em .5em; margin: 0 5px 0 0; color: #fff; border-radius: 50% ; float: left; shape-outside: margin-box; } Initial Letter Adding additional styling to the initial letter.
  66. 66. http://codepen.io/rachelandrew/pen/LbEpPX
  67. 67. @supports (initial-letter: 3) or (- webkit-initial-letter: 3) { h1+p::first-letter { font-weight: bold; initial-letter: 7 ; background-color: rgb(114,110,151); padding: 2em .5em; margin: 0 5px 0 0; color: #fff; border-radius: 50% ; float: left; shape-outside: margin-box; } } Initial Letter Using feature queries to test for support before adding rules that style the first letter.
  68. 68. http://codepen.io/rachelandrew/pen/LbEpPX
  69. 69. Writing modes Upside down and back to front with
  70. 70. http://codepen.io/rachelandrew/pen/LbVQNW
  71. 71. .wrapper { display: grid; grid-template-columns: auto 1fr; grid-gap: 40px; } h1 { writing-mode: vertical-rl; transform: rotate(180deg); text-align: right; grid-column: 1; align-self: start; justify-self: start; } Writing Modes Using vertical-rl then flipping the text with a transform.
  72. 72. http://codepen.io/rachelandrew/pen/LbVQNW
  73. 73. http://caniuse.com/#feat=css-writing-mode
  74. 74. Custom properties Variables in CSS with
  75. 75. This module introduces a family of custom author-defined properties known collectively as custom properties, which allow an author to assign arbitrary values to a property with an author-chosen name, and the var() function, which allow an author to then use those values in other properties elsewhere in the document. CSS CUSTOM PROPERTIES (CSS VARIABLES) https://drafts.csswg.org/css-variables/
  76. 76. :root { --primary: blue; --secondary: orange; } h1 { color: var(--primary); } Custom Properties Define variables then use them in CSS
  77. 77. :root { --primary: blue; --secondary: orange; } @supports (--primary: blue) { h1 { color: var(--primary); } h2 { color: var(--secondary); } } Custom Properties Can be tested for using feature queries
  78. 78. http://codepen.io/rachelandrew/pen/mErpZA
  79. 79. http://caniuse.com/#feat=css-variables
  80. 80. calc() Adding things up with
  81. 81. Basic mathematics in CSS
  82. 82. <div class="wrapper"> <div class="box box1"> <p>…</p> <div>height is defined by the flex container.</div> </div> <div class="box box2"> <div>height is 140px</div> </div> <div class="box box3"> <div>height is 14em</div> </div> </div> calc() Three boxes, each with a div nested inside.
  83. 83. .box2 { height: 140px; } .box3 { height: 14em; transition: height 0.5s ease; } .box3:hover { height: 30em; } calc() Two of the outer boxes have a height, box1 is the height of the content inside. Box3 will grow on hover.
  84. 84. .box > div { color: #fff; border-radius: 5px; position: absolute; bottom: 20px; right: 20px; width: 30%; height: calc(50% - 20px); } calc() In the CSS for the inner box, we calculate the height as 50% - 20px.
  85. 85. http://codepen.io/rachelandrew/full/VmYYqM/
  86. 86. http://caniuse.com/#feat=calc
  87. 87. position: sticky Staying put with
  88. 88. A stickily positioned box is positioned similarly to a relatively positioned box, but the offset is computed with reference to the nearest ancestor with a scrolling box, or the viewport if no ancestor has a scrolling box. POSITION: STICKY https://drafts.csswg.org/css-position/#sticky-pos
  89. 89. <dl class="authors"> <dt>A</dt> <dd>John Allsopp</dd> <dd>Rachel Andrew</dd> <dt>B</dt> <dd>. . .</dd> </dl> position: sticky A dl with dt elements followed by multiple dd elements.
  90. 90. .authors dt { position: sticky; top: 0; } position: sticky Applying position: sticky to the dt
  91. 91. http://codepen.io/rachelandrew/pen/NbPamG
  92. 92. http://caniuse.com/#feat=css-sticky
  93. 93. Scroll snapping Snap to it with
  94. 94. https://drafts.csswg.org/css-scroll-snap-1/
  95. 95. http://caniuse.com/#feat=css-snappoints
  96. 96. .gallery { scroll-snap-type: mandatory; scroll-snap-destination: 0 100% ; scroll-snap-points-x: repeat(100%); } Scroll Snapping Current Firefox implementation - spec has since changed!
  97. 97. http://codepen.io/rachelandrew/pen/NbPGYg
  98. 98. .gallery { scroll-snap-type: mandatory; scroll-snap-destination: 0 100% ; scroll-snap-points-y: repeat(100%); } Scroll Snapping Current Firefox implementation - spec has since changed!
  99. 99. http://codepen.io/rachelandrew/pen/xRbXqr
  100. 100. Getting our hands on all the new shiny
  101. 101. Tell browser vendors you want these features
  102. 102. https://developer.microsoft.com/en-us/microsoft-edge/platform/status/shapes/?q=shapes
  103. 103. Please comment on emerging specifications
  104. 104. https://github.com/w3c/csswg-drafts/issues
  105. 105. Thank you https://rachelandrew.co.uk/speaking/ event/confoo-vancouver-2016

×