1 1 00:00:01,270 --> 00:00:04,120 Hi, I hope you're doing great today. 2 2 00:00:04,120 --> 00:00:05,900 It's been some time since I last 3 3 00:00:05,900 --> 00:00:08,150 added a new video to this course, 4 4 00:00:08,150 --> 00:00:11,420 so I thought it was about time to do just that. 5 5 00:00:11,420 --> 00:00:13,980 So a lot of stuff has been added to CSS 6 6 00:00:13,980 --> 00:00:15,430 over the last couple of years, 7 7 00:00:15,430 --> 00:00:17,210 so this seems like a great time 8 8 00:00:17,210 --> 00:00:20,726 to show you a bit of what's new in CSS. 9 9 00:00:20,726 --> 00:00:23,920 So first up, we have a lot of new properties 10 10 00:00:23,920 --> 00:00:25,960 and techniques in CSS now, 11 11 00:00:25,960 --> 00:00:30,660 stuff like more complex gradients, shapes, clips, masks, 12 12 00:00:30,660 --> 00:00:34,870 background blending, image filters, CSS variables, 13 13 00:00:34,870 --> 00:00:38,220 truly responsive images, and so much more. 14 14 00:00:38,220 --> 00:00:39,640 It's really incredible. 15 15 00:00:39,640 --> 00:00:41,300 And with these new properties, 16 16 00:00:41,300 --> 00:00:43,450 we can build even more compelling designs 17 17 00:00:43,450 --> 00:00:46,160 just using the power of CSS. 18 18 00:00:46,160 --> 00:00:50,110 So again, it really has become powerful over the last year. 19 19 00:00:50,110 --> 00:00:51,200 Alright? 20 20 00:00:51,200 --> 00:00:54,840 Now as we're actually laying out elements on the page, 21 21 00:00:54,840 --> 00:00:56,920 for a long time, we've been using floats 22 22 00:00:56,920 --> 00:00:58,570 to build layouts, right? 23 23 00:00:58,570 --> 00:01:01,020 So just like you learned in this course. 24 24 00:01:01,020 --> 00:01:04,630 And that technique is, of course, still 100% valid, 25 25 00:01:04,630 --> 00:01:07,360 but it always actually had a small problem. 26 26 00:01:07,360 --> 00:01:09,840 It was always a bit hacky, so to say, 27 27 00:01:09,840 --> 00:01:12,450 because floats were not originally invented 28 28 00:01:12,450 --> 00:01:13,840 to build layouts. 29 29 00:01:13,840 --> 00:01:16,770 It's also a bit difficult sometimes to build layouts 30 30 00:01:16,770 --> 00:01:19,840 and page components just using floats, 31 31 00:01:19,840 --> 00:01:23,430 and that is why amazing new ways of laying out elements 32 32 00:01:23,430 --> 00:01:27,150 were introduced into CSS over the last couple of years, 33 33 00:01:27,150 --> 00:01:30,083 and these are Flexbox and CSS grid. 34 34 00:01:30,083 --> 00:01:34,460 So Flexbox is an amazing new technology that allows us 35 35 00:01:34,460 --> 00:01:37,270 to lay out elements in a one dimensional row 36 36 00:01:37,270 --> 00:01:40,550 without using floats or other hacks like that. 37 37 00:01:40,550 --> 00:01:43,810 It makes it so easy to place elements exactly where we 38 38 00:01:43,810 --> 00:01:47,160 want them to be with just a very small amount of code, 39 39 00:01:47,160 --> 00:01:50,990 making Flexbox perfect for building small page components 40 40 00:01:50,990 --> 00:01:52,910 like navigation or carts. 41 41 00:01:52,910 --> 00:01:54,183 Now about CSS grid, 42 42 00:01:54,183 --> 00:01:57,162 it's an even more cutting edge technology that we use 43 43 00:01:57,162 --> 00:02:01,640 to lay out elements in a fully fledged two dimensional grid, 44 44 00:02:01,640 --> 00:02:03,441 and some people say it's a bit like tables, 45 45 00:02:03,441 --> 00:02:06,620 but it's actually much more powerful than that. 46 46 00:02:06,620 --> 00:02:09,730 So since we can use a real two dimensional grid, 47 47 00:02:09,730 --> 00:02:12,120 CSS grid is absolutely perfect 48 48 00:02:12,120 --> 00:02:14,830 for building big overall page layouts 49 49 00:02:14,830 --> 00:02:16,390 and more complex components. 50 50 00:02:16,390 --> 00:02:18,650 Again, with a lot less CSS code 51 51 00:02:18,650 --> 00:02:21,410 and even HTML code than before. 52 52 00:02:21,410 --> 00:02:23,959 Now the biggest limitation of all these new features is, 53 53 00:02:23,959 --> 00:02:26,450 as always, browser support. 54 54 00:02:26,450 --> 00:02:28,220 While new versions of all browsers 55 55 00:02:28,220 --> 00:02:30,140 already support everything I mentioned here, 56 56 00:02:30,140 --> 00:02:32,790 there are always some users that lag behind 57 57 00:02:32,790 --> 00:02:35,390 and don't have the latest versions installed. 58 58 00:02:35,390 --> 00:02:39,520 Now imagine we rely on CSS grid to entirely lay out a page, 59 59 00:02:39,520 --> 00:02:41,900 and then like 5% of our users 60 60 00:02:41,900 --> 00:02:43,880 actually don't support CSS grid. 61 61 00:02:43,880 --> 00:02:45,770 That would then make our website 62 62 00:02:45,770 --> 00:02:47,800 impossible to use for these people. 63 63 00:02:47,800 --> 00:02:49,710 That's why we have to be very careful 64 64 00:02:49,710 --> 00:02:52,050 in adopting this new modern stuff 65 65 00:02:52,050 --> 00:02:53,900 and always have a really good idea 66 66 00:02:53,900 --> 00:02:56,100 of what our target audience looks like 67 67 00:02:56,100 --> 00:02:57,700 in terms of browser usage. 68 68 00:02:57,700 --> 00:02:58,660 Alright? 69 69 00:02:58,660 --> 00:03:00,780 Now since I cannot really show you all of this 70 70 00:03:00,780 --> 00:03:02,640 in just one video of course, 71 71 00:03:02,640 --> 00:03:05,317 I'm only gonna introduce you to Flexbox right now. 72 72 00:03:05,317 --> 00:03:07,520 That's because if I were to learn 73 73 00:03:07,520 --> 00:03:09,011 only one of these technologies, 74 74 00:03:09,011 --> 00:03:11,560 then it would be definitely Flexbox, 75 75 00:03:11,560 --> 00:03:14,540 because it's had by far the biggest impact 76 76 00:03:14,540 --> 00:03:16,170 on my own personal work. 77 77 00:03:16,170 --> 00:03:19,270 It really makes a huge difference to me and my work, 78 78 00:03:19,270 --> 00:03:22,040 and browser support is actually pretty good right now, 79 79 00:03:22,040 --> 00:03:24,000 which makes it a perfect technology 80 80 00:03:24,000 --> 00:03:26,759 to start using right now in my opinion. 81 81 00:03:26,759 --> 00:03:29,602 Now before we actually start using it in practice, 82 82 00:03:29,602 --> 00:03:31,660 I want to just give you an overview 83 83 00:03:31,660 --> 00:03:34,037 of all the CSS properties that are part 84 84 00:03:34,037 --> 00:03:36,810 of the Flexbox specification. 85 85 00:03:36,810 --> 00:03:38,670 I have all the property names here 86 86 00:03:38,670 --> 00:03:40,380 and then all the possible values 87 87 00:03:40,380 --> 00:03:43,038 where the bold one is the default one, right? 88 88 00:03:43,038 --> 00:03:45,100 I'm not gonna go over these right now, 89 89 00:03:45,100 --> 00:03:47,820 but it's a good reference for you to print out or create 90 90 00:03:47,820 --> 00:03:51,270 just a print screen image so that you can keep it handy 91 91 00:03:51,270 --> 00:03:53,600 and check it as we build our example 92 92 00:03:53,600 --> 00:03:56,050 throughout the rest of this video. 93 93 00:03:56,050 --> 00:03:58,580 Now what I do want to focus on right now is that 94 94 00:03:58,580 --> 00:04:02,128 in Flexbox we can define an element as a flex container, 95 95 00:04:02,128 --> 00:04:06,169 and then all the child elements will become flex items. 96 96 00:04:06,169 --> 00:04:09,650 Now each flex container has a main axis, 97 97 00:04:09,650 --> 00:04:11,980 as you can see in the diagram in the top, 98 98 00:04:11,980 --> 00:04:13,455 and along this main axis, 99 99 00:04:13,455 --> 00:04:17,260 all of the flex items can be aligned in some way. 100 100 00:04:17,260 --> 00:04:19,550 Then there's also the cross axis, 101 101 00:04:19,550 --> 00:04:22,360 which is always perpendicular to the main axis, 102 102 00:04:22,360 --> 00:04:25,340 and we can also align items along this axis. 103 103 00:04:25,340 --> 00:04:27,913 And we can control all of this using the properties 104 104 00:04:27,913 --> 00:04:30,010 that you can see here on this slide. 105 105 00:04:30,010 --> 00:04:30,850 Alright? 106 106 00:04:30,850 --> 00:04:33,810 But enough talking now, because this sounds more complicated 107 107 00:04:33,810 --> 00:04:35,750 than it actually is, okay? 108 108 00:04:35,750 --> 00:04:38,320 So let's now actually build a very small component 109 109 00:04:38,320 --> 00:04:40,709 using the power of Flexbox in practice. 110 110 00:04:40,709 --> 00:04:43,930 So this is a small component that we're gonna build 111 111 00:04:43,930 --> 00:04:47,660 using Flexbox, and it's like this pizza cart here. 112 112 00:04:47,660 --> 00:04:50,100 So imagine there was like a web application 113 113 00:04:50,100 --> 00:04:51,730 where you could order pizza, 114 114 00:04:51,730 --> 00:04:53,930 and then it could show each of the pizzas 115 115 00:04:53,930 --> 00:04:57,140 using this cart component right here. 116 116 00:04:57,140 --> 00:04:58,070 Alright? 117 117 00:04:58,070 --> 00:04:59,746 Now as you see here, 118 118 00:04:59,746 --> 00:05:02,650 I'm doing this on like a web application called CodePen 119 119 00:05:02,650 --> 00:05:05,970 where we have the HTML and CSS code up here, 120 120 00:05:05,970 --> 00:05:07,740 and then down here we see the result, 121 121 00:05:07,740 --> 00:05:10,100 instead of doing it in a text editor 122 122 00:05:10,100 --> 00:05:12,540 like we did the other project in this course. 123 123 00:05:12,540 --> 00:05:13,714 Okay? 124 124 00:05:13,714 --> 00:05:15,260 So usually, we always code in a text editor, 125 125 00:05:15,260 --> 00:05:17,970 but to code up these small examples like these demos, 126 126 00:05:17,970 --> 00:05:20,600 I like to use a web tool like this, 127 127 00:05:20,600 --> 00:05:21,610 because then we don't have to go 128 128 00:05:21,610 --> 00:05:23,320 through all these setup steps, 129 129 00:05:23,320 --> 00:05:25,070 and so it's a lot quicker 130 130 00:05:25,070 --> 00:05:27,400 to just quickly code up something like this. 131 131 00:05:27,400 --> 00:05:32,200 Now if you want, of course, you can open up your text editor 132 132 00:05:32,200 --> 00:05:35,280 and then create a new HTML file and a new CSS file 133 133 00:05:35,280 --> 00:05:36,930 and do it the more traditional way 134 134 00:05:36,930 --> 00:05:38,678 like we did in this course as well. 135 135 00:05:38,678 --> 00:05:41,855 So what I did here was to start a new CodePen, 136 136 00:05:41,855 --> 00:05:43,540 so this one here, 137 137 00:05:43,540 --> 00:05:45,030 and if you want to do it yourself, 138 138 00:05:45,030 --> 00:05:47,780 you can just head over to CodePen dot io, 139 139 00:05:47,780 --> 00:05:49,710 then you probably have to create a new account, 140 140 00:05:49,710 --> 00:05:51,950 and then just go to new pen. 141 141 00:05:51,950 --> 00:05:53,210 Okay? 142 142 00:05:53,210 --> 00:05:56,483 Now we don't need to JavaScript, so we can just minimize it, 143 143 00:05:56,483 --> 00:05:57,790 and so here we go. 144 144 00:05:57,790 --> 00:05:59,822 We have HTML and CSS. 145 145 00:05:59,822 --> 00:06:02,220 And let's start with some of the setup, 146 146 00:06:02,220 --> 00:06:04,900 just like we did in the Omnifood project. 147 147 00:06:04,900 --> 00:06:06,426 So we have our universal selector, 148 148 00:06:06,426 --> 00:06:08,940 and then we will simply start 149 149 00:06:08,940 --> 00:06:11,250 by setting the margin and padding to zero, 150 150 00:06:11,250 --> 00:06:14,910 so basically do this reset that we also did in our project. 151 151 00:06:14,910 --> 00:06:18,360 So margin zero, padding zero, 152 152 00:06:18,360 --> 00:06:22,783 and also we set box sizing to border box. 153 153 00:06:27,880 --> 00:06:29,960 Border box, okay. 154 154 00:06:29,960 --> 00:06:32,359 Let's just write something here in the HTML 155 155 00:06:32,359 --> 00:06:34,309 so that it actually shows up down here. 156 156 00:06:35,660 --> 00:06:36,833 So here we go. 157 157 00:06:37,906 --> 00:06:41,630 And so now let's define some styles for the HTML 158 158 00:06:41,630 --> 00:06:45,400 and the body, just like we're already used to. 159 159 00:06:45,400 --> 00:06:46,330 Right? 160 160 00:06:46,330 --> 00:06:51,330 So let's set the text color to four four four like this, 161 161 00:06:53,060 --> 00:06:56,140 and we also want a special font family. 162 162 00:06:56,140 --> 00:06:59,170 So we want the font called Roboto, which is on Google Fonts. 163 163 00:06:59,170 --> 00:07:03,420 So again, just like we did on our Omnifood project. 164 164 00:07:03,420 --> 00:07:05,573 So let's go to Google Fonts here, 165 165 00:07:09,320 --> 00:07:10,683 type in Roboto, 166 166 00:07:12,330 --> 00:07:14,290 and so this is the one here. 167 167 00:07:14,290 --> 00:07:15,660 Just hit this plus here, 168 168 00:07:15,660 --> 00:07:17,350 and probably this now looks a bit different 169 169 00:07:17,350 --> 00:07:19,820 than by the time I recorded the rest of the course, 170 170 00:07:19,820 --> 00:07:22,443 but it still works the same actually. 171 171 00:07:23,390 --> 00:07:26,120 And so now we want to embed this font, 172 172 00:07:26,120 --> 00:07:27,840 and we're not going to do it in the HTML 173 173 00:07:27,840 --> 00:07:30,430 like we did with this link element. 174 174 00:07:30,430 --> 00:07:33,280 But instead, we're going to import it right into CSS. 175 175 00:07:33,280 --> 00:07:35,869 So just go ahead and copy this line of code here. 176 176 00:07:35,869 --> 00:07:38,740 We can now close this, 177 177 00:07:38,740 --> 00:07:42,100 and right at the beginning of everything here, 178 178 00:07:42,100 --> 00:07:46,530 we then import this font to our CSS document. 179 179 00:07:46,530 --> 00:07:49,733 And now we can go ahead and say font family, 180 180 00:07:52,890 --> 00:07:53,950 Roboto. 181 181 00:07:53,950 --> 00:07:55,130 And if you wait a bit, 182 182 00:07:55,130 --> 00:07:57,370 now you see that it actually changed down here. 183 183 00:07:57,370 --> 00:07:58,707 Okay? 184 184 00:07:58,707 --> 00:08:03,690 Can also give it some nice padding of 100 pixel, 185 185 00:08:03,690 --> 00:08:07,660 and now let's take care of that gradient that we have here. 186 186 00:08:07,660 --> 00:08:11,140 So this green to blue nice modern looking gradient 187 187 00:08:11,140 --> 00:08:12,220 that we have. 188 188 00:08:12,220 --> 00:08:13,490 Alright? 189 189 00:08:13,490 --> 00:08:16,070 So as a comment here, let's define a couple of colors, 190 190 00:08:16,070 --> 00:08:19,208 because we will be using these over and over again, 191 191 00:08:19,208 --> 00:08:22,120 and so I think it makes sense to basically write them 192 192 00:08:22,120 --> 00:08:25,003 down here so we can then come here and copy them. 193 193 00:08:26,750 --> 00:08:31,750 So for green, we have six seven B two six F, 194 194 00:08:32,240 --> 00:08:34,040 then we have our blue color, 195 195 00:08:34,040 --> 00:08:39,040 which is a hexadecimal four C A, four C A, two C D. 196 196 00:08:41,248 --> 00:08:42,650 But then one that's kind of in between, so the mid-color, 197 197 00:08:42,650 --> 00:08:47,510 let's say, and this one is five A A A nine D. 198 198 00:08:47,510 --> 00:08:50,163 Okay, so let's define this gradient. 199 199 00:08:51,827 --> 00:08:56,827 So background, and we want a linear gradient. 200 200 00:08:57,340 --> 00:08:59,300 And we did this also in a course again. 201 201 00:08:59,300 --> 00:09:00,800 So at this point, it's nothing new. 202 202 00:09:00,800 --> 00:09:03,290 So we define the two colors that we want, 203 203 00:09:03,290 --> 00:09:04,890 and we start with the green one. 204 204 00:09:07,370 --> 00:09:08,763 So we catch this one, 205 205 00:09:12,470 --> 00:09:15,253 and going to the blue color. 206 206 00:09:18,300 --> 00:09:20,320 Let's see, and here we go. 207 207 00:09:20,320 --> 00:09:22,320 Now you see that this green here is going actually 208 208 00:09:22,320 --> 00:09:24,930 from the top to the bottom down here. 209 209 00:09:24,930 --> 00:09:26,240 Right, you see that? 210 210 00:09:26,240 --> 00:09:30,420 But here, we actually have it starting here in this corner 211 211 00:09:30,420 --> 00:09:32,740 going to this corner. 212 212 00:09:32,740 --> 00:09:35,060 And so we can do something that we didn't do before, 213 213 00:09:35,060 --> 00:09:37,470 which is to specify the direction in here. 214 214 00:09:37,470 --> 00:09:41,793 So we can say now to bottom right. 215 215 00:09:43,030 --> 00:09:47,520 And now you will see that it starts here and goes here. 216 216 00:09:47,520 --> 00:09:51,283 We could also say to the bottom left, for example, 217 217 00:09:52,120 --> 00:09:54,830 and now you will see that it will start here. 218 218 00:09:54,830 --> 00:09:57,010 So here's the green now, and then here to the blue. 219 219 00:09:57,010 --> 00:09:59,250 So that's the direction it goes. 220 220 00:09:59,250 --> 00:10:01,490 Okay, make sense? 221 221 00:10:01,490 --> 00:10:03,870 But we want it to go to the bottom right. 222 222 00:10:03,870 --> 00:10:05,680 And to see this a bit better, let's actually give us 223 223 00:10:05,680 --> 00:10:09,140 some more space here and maximize this window. 224 224 00:10:09,140 --> 00:10:10,493 Alright, so that's nicer. 225 225 00:10:11,910 --> 00:10:12,910 Okay, and so you see that now 226 226 00:10:12,910 --> 00:10:16,115 when we increase or decrease this here, 227 227 00:10:16,115 --> 00:10:19,080 you see that it kind of goes from here to here, 228 228 00:10:19,080 --> 00:10:20,660 and then it starts over again. 229 229 00:10:20,660 --> 00:10:24,440 And we don't want that to happen, so we want that our body, 230 230 00:10:24,440 --> 00:10:27,110 because basically all of this here is the body, right? 231 231 00:10:27,110 --> 00:10:31,000 We want that to always have the height of the viewport. 232 232 00:10:31,000 --> 00:10:32,730 And remember how we do that. 233 233 00:10:32,730 --> 00:10:36,490 So we actually did it before in the Omnifood project. 234 234 00:10:36,490 --> 00:10:39,630 And the way we do it is to use the 100 235 235 00:10:39,630 --> 00:10:41,480 and then the V H unit. 236 236 00:10:41,480 --> 00:10:44,693 So 100% of the vertical height. 237 237 00:10:46,220 --> 00:10:49,120 And now you see that it actually works, 238 238 00:10:49,120 --> 00:10:52,030 except for these small problems down here, 239 239 00:10:52,030 --> 00:10:53,860 but we're gonna fix them here in a second, 240 240 00:10:53,860 --> 00:10:55,630 so don't worry about that. 241 241 00:10:55,630 --> 00:10:56,950 So I'm not sure what's causing them. 242 242 00:10:56,950 --> 00:11:00,210 Maybe it's a problem here with this web application, 243 243 00:11:00,210 --> 00:11:02,610 but that's no problem, again, don't worry about that. 244 244 00:11:02,610 --> 00:11:05,540 So instead, let's just start with our HTML part here. 245 245 00:11:05,540 --> 00:11:10,363 And so I'm gonna use a figure with the class of pizza. 246 246 00:11:16,420 --> 00:11:18,060 Alright, down in there, 247 247 00:11:18,060 --> 00:11:21,870 let's see what we have in there actually in our example. 248 248 00:11:21,870 --> 00:11:22,970 And now the tabs are gone. 249 249 00:11:22,970 --> 00:11:25,453 Okay, so let's bring it back to the way it was. 250 250 00:11:27,551 --> 00:11:31,100 So we have this entire element here, 251 251 00:11:31,100 --> 00:11:34,173 which is this figure, which is a pizza, right? 252 252 00:11:34,173 --> 00:11:35,006 And then in there, 253 253 00:11:35,006 --> 00:11:38,460 we have this element for the image and this element, 254 254 00:11:38,460 --> 00:11:41,610 so this container and then the element with the price. 255 255 00:11:41,610 --> 00:11:43,183 Okay? 256 256 00:11:43,183 --> 00:11:45,570 So basically three elements side by side. 257 257 00:11:45,570 --> 00:11:46,663 So let's do that. 258 258 00:11:48,190 --> 00:11:51,883 So we have a diff with the class of pizza hero, 259 259 00:11:54,230 --> 00:11:56,330 and now I'm gonna introduce you to something new, 260 260 00:11:56,330 --> 00:11:58,830 because this way of writing a class 261 261 00:11:58,830 --> 00:12:01,320 probably looks pretty weird to you, right, 262 262 00:12:01,320 --> 00:12:03,310 these two underscores, right? 263 263 00:12:03,310 --> 00:12:06,670 And that is the so-called BEM methodology, 264 264 00:12:06,670 --> 00:12:09,940 where B stands for block, E stands for elements, 265 265 00:12:09,940 --> 00:12:12,270 and M stands for modifier. 266 266 00:12:12,270 --> 00:12:15,960 So our block here is pizza, and then each of the elements 267 267 00:12:15,960 --> 00:12:18,620 in there will have the block name on them. 268 268 00:12:18,620 --> 00:12:22,060 So the block will always be there, then two underscores, 269 269 00:12:22,060 --> 00:12:25,000 and then the element, which in this case is the hero. 270 270 00:12:25,000 --> 00:12:27,470 And if we have multiple elements with the same name, 271 271 00:12:27,470 --> 00:12:28,500 but we want, for example, 272 272 00:12:28,500 --> 00:12:32,106 one of them to be slightly different, so be a bit modified, 273 273 00:12:32,106 --> 00:12:36,020 we can use a modifier by using dash dash, 274 274 00:12:36,020 --> 00:12:38,260 for example, type one, something like this. 275 275 00:12:38,260 --> 00:12:39,093 Okay? 276 276 00:12:39,950 --> 00:12:42,830 But here, we just have our block, which is the pizza, 277 277 00:12:42,830 --> 00:12:45,167 and then the element is hero, okay? 278 278 00:12:45,167 --> 00:12:48,770 And this makes it a lot easier to write CSS class names. 279 279 00:12:48,770 --> 00:12:51,410 Instead of having to always come up with them, 280 280 00:12:51,410 --> 00:12:53,770 we have this system that makes it a bit easier 281 281 00:12:53,770 --> 00:12:56,173 for us to always name our classes like this. 282 282 00:12:58,050 --> 00:12:58,883 Okay? 283 283 00:12:58,883 --> 00:13:00,923 Then in here, we will have our image. 284 284 00:13:05,516 --> 00:13:07,880 So where does this image come from? 285 285 00:13:07,880 --> 00:13:11,000 Well I'm using it from the very popular website 286 286 00:13:11,000 --> 00:13:13,060 called Unsplash dot com. 287 287 00:13:13,060 --> 00:13:14,470 So Unsplash dot com, 288 288 00:13:14,470 --> 00:13:17,890 and there we have tons of images that we can use. 289 289 00:13:17,890 --> 00:13:18,850 Okay? 290 290 00:13:18,850 --> 00:13:22,218 So I just used this pizza one, but if you wanna find it, 291 291 00:13:22,218 --> 00:13:24,820 you can just type in pizza in here, 292 292 00:13:24,820 --> 00:13:28,019 and then it's gonna come up somewhere down here I guess. 293 293 00:13:28,019 --> 00:13:29,950 Yep, here we go. 294 294 00:13:29,950 --> 00:13:31,210 And I'll just click here, 295 295 00:13:31,210 --> 00:13:33,087 and instead of having to download it, 296 296 00:13:33,087 --> 00:13:36,273 I will simply copy the image address, 297 297 00:13:37,920 --> 00:13:39,510 and paste that one here. 298 298 00:13:39,510 --> 00:13:41,071 You see? 299 299 00:13:41,071 --> 00:13:43,683 And so now it will basically get the image from this URL. 300 300 00:13:46,510 --> 00:13:48,060 Alright, so that is the image. 301 301 00:13:48,060 --> 00:13:51,550 We should probably give it an alternative text 302 302 00:13:53,290 --> 00:13:54,643 saying that it's a pizza, 303 303 00:13:55,607 --> 00:13:59,348 and then also a class name so we can actually style it. 304 304 00:13:59,348 --> 00:14:00,430 And this one is called, and again, 305 305 00:14:00,430 --> 00:14:04,850 we have the pizza block here, underscore underscore image. 306 306 00:14:04,850 --> 00:14:07,243 Okay, very simple, very straightforward. 307 307 00:14:08,090 --> 00:14:10,690 The next up we have the contents, so the part in the middle 308 308 00:14:10,690 --> 00:14:13,240 where we have all the text and all the description. 309 309 00:14:14,840 --> 00:14:18,090 So this is a diff with the class of pizza 310 310 00:14:22,640 --> 00:14:23,473 content. 311 311 00:14:25,000 --> 00:14:26,423 Let me just write it here, 312 312 00:14:27,350 --> 00:14:28,313 content, 313 313 00:14:32,230 --> 00:14:33,270 and then close it up. 314 314 00:14:33,270 --> 00:14:36,570 And then the last part, which is the price, 315 315 00:14:36,570 --> 00:14:38,980 go ahead and copy this one, 316 316 00:14:38,980 --> 00:14:40,113 so pizza price. 317 317 00:14:44,290 --> 00:14:47,710 And actually, I can already type the correct price in here, 318 318 00:14:47,710 --> 00:14:51,380 which will be $11.99. 319 319 00:14:51,380 --> 00:14:53,300 Okay, and let's now style this a bit, 320 320 00:14:53,300 --> 00:14:55,003 starting with the image here. 321 321 00:15:01,650 --> 00:15:05,810 So in responsive images, or in responsive we design usually, 322 322 00:15:05,810 --> 00:15:08,210 we always wanna give it a width of 100%. 323 323 00:15:08,210 --> 00:15:09,440 Alright? 324 324 00:15:09,440 --> 00:15:11,060 And then down here somewhere, 325 325 00:15:11,060 --> 00:15:13,940 we have the content and the price. 326 326 00:15:13,940 --> 00:15:15,532 Okay? 327 327 00:15:15,532 --> 00:15:16,550 So pizza content and pizza price. 328 328 00:15:16,550 --> 00:15:18,770 And so now, let's start using Flexbox 329 329 00:15:18,770 --> 00:15:21,030 for the very first time. 330 330 00:15:21,030 --> 00:15:23,883 So we're gonna do that on the pizza element. 331 331 00:15:26,260 --> 00:15:27,750 And now remember what I said in the slide 332 332 00:15:27,750 --> 00:15:29,650 about the Flexbox properties, 333 333 00:15:29,650 --> 00:15:32,930 that we can define each element as a Flexbox container, 334 334 00:15:32,930 --> 00:15:34,470 and so that's what we're gonna do here. 335 335 00:15:34,470 --> 00:15:38,200 So this pizza element here will be the Flexbox container, 336 336 00:15:38,200 --> 00:15:39,540 and the three child elements, 337 337 00:15:39,540 --> 00:15:42,490 which are the hero, the content, and the price, 338 338 00:15:42,490 --> 00:15:44,490 will be the flex items that we then 339 339 00:15:44,490 --> 00:15:47,880 can align using Flexbox properties. 340 340 00:15:47,880 --> 00:15:48,713 Okay? 341 341 00:15:48,713 --> 00:15:50,490 And to define a Flexbox container, 342 342 00:15:50,490 --> 00:15:54,990 all we have to do is to say display, flex. 343 343 00:15:54,990 --> 00:15:56,590 And then, like magic, 344 344 00:15:56,590 --> 00:15:59,160 all of the elements will appear side by side. 345 345 00:15:59,160 --> 00:16:00,489 Okay? 346 346 00:16:00,489 --> 00:16:02,820 So automatically everything's now side by side like this. 347 347 00:16:02,820 --> 00:16:03,910 So awesome. 348 348 00:16:03,910 --> 00:16:06,510 That's really a great first step already. 349 349 00:16:06,510 --> 00:16:08,300 Of course it needs a lot of work still, 350 350 00:16:08,300 --> 00:16:10,730 and so let's continue with that. 351 351 00:16:10,730 --> 00:16:14,460 And so I'm gonna put all of these selectors here now. 352 352 00:16:14,460 --> 00:16:15,963 So we have pizza hero. 353 353 00:16:18,007 --> 00:16:20,131 Let me actually copy that so 354 354 00:16:20,131 --> 00:16:23,260 I don't have to write it out all the time. 355 355 00:16:23,260 --> 00:16:26,113 So we have the pizza hero, then we have the content, 356 356 00:16:28,560 --> 00:16:29,893 and also the price. 357 357 00:16:33,900 --> 00:16:36,483 Give it quickly a background of white. 358 358 00:16:41,110 --> 00:16:44,790 And the last one has also this gradient. 359 359 00:16:44,790 --> 00:16:46,233 So this linear gradient. 360 360 00:16:51,000 --> 00:16:52,960 But it actually doesn't go to the bottom right. 361 361 00:16:52,960 --> 00:16:55,853 It should just go to the bottom. 362 362 00:16:58,910 --> 00:17:01,020 Okay now you see it starts at the green 363 363 00:17:01,020 --> 00:17:03,640 and goes down to blue. 364 364 00:17:03,640 --> 00:17:05,900 Alright, and all of this here still looks a bit weird, 365 365 00:17:05,900 --> 00:17:10,130 so let's get rid of this HTML here. 366 366 00:17:10,130 --> 00:17:12,370 Actually, all we really want to style here is the body. 367 367 00:17:12,370 --> 00:17:14,270 So it's no problem to do it like this. 368 368 00:17:15,200 --> 00:17:18,070 And so that looks a bit better already. 369 369 00:17:18,070 --> 00:17:19,630 Let's then define some properties 370 370 00:17:19,630 --> 00:17:21,913 for the pizza container here. 371 371 00:17:24,120 --> 00:17:27,440 So a max width of 800 pixels. 372 372 00:17:27,440 --> 00:17:29,733 So this cart should only have 800 pixels, 373 373 00:17:32,130 --> 00:17:34,430 a border radius of four pixel, 374 374 00:17:34,430 --> 00:17:39,430 and then also a nice box shadow, so that looks a bit nicer. 375 375 00:17:39,880 --> 00:17:41,180 Alright? 376 376 00:17:41,180 --> 00:17:44,500 So 30 pixel, and you can experiment with this 377 377 00:17:44,500 --> 00:17:47,683 as you wish in order to see a different result. 378 378 00:17:49,520 --> 00:17:54,520 So R G B A zero zero zero and point two. 379 379 00:17:55,130 --> 00:17:56,513 Okay? 380 380 00:17:56,513 --> 00:17:58,540 So basically, this is the shadow in the X direction, 381 381 00:17:58,540 --> 00:18:00,418 so like this. 382 382 00:18:00,418 --> 00:18:01,830 This is the shadow in the Y direction, 383 383 00:18:01,830 --> 00:18:03,660 so basically from top to bottom. 384 384 00:18:03,660 --> 00:18:05,060 This is the amount of blur, 385 385 00:18:05,060 --> 00:18:06,410 and this is how far the blur 386 386 00:18:06,410 --> 00:18:09,200 should come out of the element basically. 387 387 00:18:09,200 --> 00:18:10,410 And then finally, this is the color, 388 388 00:18:10,410 --> 00:18:13,470 so black with a 20% opacity. 389 389 00:18:13,470 --> 00:18:16,950 And you see it, now we have this nice shadow here. 390 390 00:18:16,950 --> 00:18:19,130 So that's for a piece element for now. 391 391 00:18:19,130 --> 00:18:21,290 Let's now fix the worst problem that we have here, 392 392 00:18:21,290 --> 00:18:24,300 which is this all too big image. 393 393 00:18:24,300 --> 00:18:25,133 Okay? 394 394 00:18:25,133 --> 00:18:26,750 So this pizza hero here, 395 395 00:18:26,750 --> 00:18:29,110 which is the element that holds this image, 396 396 00:18:29,110 --> 00:18:31,430 which has a width of 100%. 397 397 00:18:31,430 --> 00:18:32,263 Alright? 398 398 00:18:32,263 --> 00:18:35,930 So this pizza hero, we want this to only have about 50% 399 399 00:18:35,930 --> 00:18:38,420 of the width of this entire container. 400 400 00:18:38,420 --> 00:18:39,900 So what could we do? 401 401 00:18:39,900 --> 00:18:44,140 Well we would go ahead and say width of 50%, right, 402 402 00:18:44,140 --> 00:18:45,930 or 45% let's say. 403 403 00:18:45,930 --> 00:18:47,970 But when we're dealing with Flexbox elements, 404 404 00:18:47,970 --> 00:18:49,760 we're not doing it like that. 405 405 00:18:49,760 --> 00:18:52,060 Instead, we're using the flex property. 406 406 00:18:52,060 --> 00:18:54,430 And the flex property can take three values, 407 407 00:18:54,430 --> 00:18:57,030 as you can see from your cheat sheet, 408 408 00:18:57,030 --> 00:18:59,780 so from the slide that I told you to print 409 409 00:18:59,780 --> 00:19:01,650 or to create a print screen. 410 410 00:19:01,650 --> 00:19:04,220 So you see that we have flex grow, 411 411 00:19:04,220 --> 00:19:06,900 flex string, and flex basis. 412 412 00:19:06,900 --> 00:19:10,040 And flex basis is where we define the width 413 413 00:19:10,040 --> 00:19:11,640 of the element if we want. 414 414 00:19:11,640 --> 00:19:13,540 So it's totally optional, but in this case, 415 415 00:19:13,540 --> 00:19:15,090 that's what we want to do. 416 416 00:19:15,090 --> 00:19:15,923 Okay? 417 417 00:19:15,923 --> 00:19:19,260 So we say that we want flex grow to zero, 418 418 00:19:19,260 --> 00:19:22,670 flex string to one, which is the default, and then here, 419 419 00:19:22,670 --> 00:19:26,550 instead of auto, which is the default, we want 45%. 420 420 00:19:26,550 --> 00:19:27,749 Okay? 421 421 00:19:27,749 --> 00:19:31,313 And so now you will see that it only occupies 45%. 422 422 00:19:31,313 --> 00:19:32,146 Okay? 423 423 00:19:32,146 --> 00:19:35,223 Then for the price, we wanna do something similar. 424 424 00:19:37,270 --> 00:19:41,363 So zero, one, and then the width. 425 425 00:19:42,730 --> 00:19:45,577 Remember, so the width is the third value here. 426 426 00:19:45,577 --> 00:19:48,640 And for this one, we want to have a width of 50 pixels. 427 427 00:19:48,640 --> 00:19:51,130 So it doesn't have to be percentage of course. 428 428 00:19:51,130 --> 00:19:53,260 Okay, so now this has 50 pixels here. 429 429 00:19:53,260 --> 00:19:54,805 Perfect. 430 430 00:19:54,805 --> 00:19:55,638 Now how do we actually make it so 431 431 00:19:55,638 --> 00:19:59,060 that this other element here occupies the rest of the space? 432 432 00:19:59,060 --> 00:20:02,701 Well that's where the magic of Flexbox comes in again. 433 433 00:20:02,701 --> 00:20:05,471 So it is this pizza content here, 434 434 00:20:05,471 --> 00:20:07,514 and now what we can do here 435 435 00:20:07,514 --> 00:20:11,040 is to allow the element to grow as much as it can. 436 436 00:20:11,040 --> 00:20:13,270 And so here we're going to use flex, 437 437 00:20:13,270 --> 00:20:16,550 set it to one, and that's it, and wait for it. 438 438 00:20:16,550 --> 00:20:21,090 And yeah, so now it has all the space that it can occupy. 439 439 00:20:21,090 --> 00:20:24,170 So what's not in the pizza or in the price 440 440 00:20:24,170 --> 00:20:26,620 will now be occupied with the content. 441 441 00:20:26,620 --> 00:20:28,940 And if this sounds a bit confusing, then please just look 442 442 00:20:28,940 --> 00:20:32,030 at the element table that I showed you before. 443 443 00:20:32,030 --> 00:20:33,010 Okay? 444 444 00:20:33,010 --> 00:20:36,090 So again, we have this flex property 445 445 00:20:36,090 --> 00:20:38,330 where the first value is flex grow. 446 446 00:20:38,330 --> 00:20:40,260 And in this case, we don't allow the element 447 447 00:20:40,260 --> 00:20:41,710 to grow anything. 448 448 00:20:41,710 --> 00:20:44,150 Then the second one is shrink, 449 449 00:20:44,150 --> 00:20:46,350 and we could also actually set this one to zero, 450 450 00:20:46,350 --> 00:20:48,720 because we don't want to shrink this element. 451 451 00:20:48,720 --> 00:20:51,275 It should always just be 50 pixels. 452 452 00:20:51,275 --> 00:20:52,108 Okay? 453 453 00:20:52,108 --> 00:20:53,240 But it in fact many times 454 454 00:20:53,240 --> 00:20:55,600 just doesn't make much of a difference. 455 455 00:20:55,600 --> 00:20:57,490 So here I'm gonna set it to zero as well, 456 456 00:20:57,490 --> 00:20:59,840 because I don't want it to shrink. 457 457 00:20:59,840 --> 00:21:02,710 Okay, so that's what this zero or this one means. 458 458 00:21:02,710 --> 00:21:05,440 And finally, we define the flex basis, 459 459 00:21:05,440 --> 00:21:08,830 which is basically the width of the element that we want. 460 460 00:21:08,830 --> 00:21:11,090 But we can also not define all of this, 461 461 00:21:11,090 --> 00:21:12,870 but only define the first one, 462 462 00:21:12,870 --> 00:21:15,870 and then just defines the flex grow. 463 463 00:21:15,870 --> 00:21:20,220 So having flex or having flex grow equal to one 464 464 00:21:20,220 --> 00:21:21,890 is actually the exact same thing, 465 465 00:21:21,890 --> 00:21:24,840 but it's a good practice to use it like this. 466 466 00:21:24,840 --> 00:21:27,980 Here we could also use a flex basis like this 467 467 00:21:27,980 --> 00:21:30,847 and set it to 45%, just like this. 468 468 00:21:30,847 --> 00:21:33,180 But again, it's a good practice 469 469 00:21:33,180 --> 00:21:35,870 to always just use the flex property. 470 470 00:21:35,870 --> 00:21:38,770 I'm not really sure why, but that's how it's been defined. 471 471 00:21:40,483 --> 00:21:44,150 Okay, so the magic here again is this flex set to one, 472 472 00:21:44,150 --> 00:21:47,100 which will make it so that all of the space that was empty 473 473 00:21:47,100 --> 00:21:49,830 before is now occupied by this element, 474 474 00:21:49,830 --> 00:21:52,540 because we allow it to grow as much as it can 475 475 00:21:52,540 --> 00:21:54,400 by using flex zero. 476 476 00:21:54,400 --> 00:21:57,810 So if it was zero again, now we would have this. 477 477 00:21:57,810 --> 00:22:01,920 But with flex one, it grows as much as it can. 478 478 00:22:01,920 --> 00:22:04,880 So let's say we had zero here, and then the price, 479 479 00:22:04,880 --> 00:22:06,833 we would have the one now here, 480 480 00:22:08,419 --> 00:22:09,252 and you will now see that it occupied 481 481 00:22:10,350 --> 00:22:11,449 all of this space here, 482 482 00:22:11,449 --> 00:22:13,033 so from here to here, all of the remaining empty space. 483 483 00:22:14,120 --> 00:22:15,653 Right? 484 484 00:22:15,653 --> 00:22:17,903 What we don't want as, we want it to be here, 485 485 00:22:18,770 --> 00:22:23,710 and so that looks a lot better now. 486 486 00:22:23,710 --> 00:22:26,130 Alright, so this looks quite nice already. 487 487 00:22:26,130 --> 00:22:27,027 Let's get rid of this space here, 488 488 00:22:27,027 --> 00:22:32,027 and all we have to do is to say display block. 489 489 00:22:32,170 --> 00:22:35,090 So we had that problem in the other project as well. 490 490 00:22:35,090 --> 00:22:37,250 So always set images to display block. 491 491 00:22:37,250 --> 00:22:38,800 Okay, so let me now show you 492 492 00:22:38,800 --> 00:22:41,710 a little bit more of the Flexbox magic. 493 493 00:22:41,710 --> 00:22:42,543 Okay? 494 494 00:22:42,543 --> 00:22:44,250 So remember that I said that there's 495 495 00:22:44,250 --> 00:22:47,480 always a main axis and a cross axis. 496 496 00:22:47,480 --> 00:22:50,450 So the main axis is in this direction here 497 497 00:22:50,450 --> 00:22:51,782 that I'm moving the mouse now. 498 498 00:22:51,782 --> 00:22:55,300 And the cross axis is perpendicular to that, 499 499 00:22:55,300 --> 00:22:57,500 so from top to bottom, usually. 500 500 00:22:57,500 --> 00:22:58,730 We can actually change that, 501 501 00:22:58,730 --> 00:23:00,550 but more about that a bit later. 502 502 00:23:00,550 --> 00:23:01,383 Okay? 503 503 00:23:01,383 --> 00:23:03,710 So this is usually the main axis, 504 504 00:23:03,710 --> 00:23:06,480 and this is the cross axis. 505 505 00:23:06,480 --> 00:23:10,560 And we can align items along these axis, okay? 506 506 00:23:10,560 --> 00:23:15,560 So let me show you that on the pizza element, okay? 507 507 00:23:18,920 --> 00:23:21,640 Just let's get rid a bit of this padding here, 508 508 00:23:21,640 --> 00:23:24,423 create it to 50, okay. 509 509 00:23:25,300 --> 00:23:28,850 So that's better, it gives us a bit more space again. 510 510 00:23:28,850 --> 00:23:31,720 Can also freeze it here again, 511 511 00:23:31,720 --> 00:23:34,807 and so yeah, that's better now. 512 512 00:23:34,807 --> 00:23:37,220 Okay, now if you want to align these items 513 513 00:23:37,220 --> 00:23:38,760 along one of the axis, 514 514 00:23:38,760 --> 00:23:41,500 we do it always on the flex container. 515 515 00:23:41,500 --> 00:23:42,333 Okay? 516 516 00:23:42,333 --> 00:23:45,570 And that's why in the property overview I have 517 517 00:23:45,570 --> 00:23:47,040 some properties on a container side 518 518 00:23:47,040 --> 00:23:49,660 and some items on the item side. 519 519 00:23:49,660 --> 00:23:50,493 Okay? 520 520 00:23:50,493 --> 00:23:53,348 So on the flex items, we use properties like flex. 521 521 00:23:53,348 --> 00:23:57,260 Okay, so remember, pizza hero is a flex item, 522 522 00:23:57,260 --> 00:23:59,650 and so that's where we use the flex property. 523 523 00:23:59,650 --> 00:24:01,500 But the flex container is the one 524 524 00:24:01,500 --> 00:24:03,759 where we have display set to flex, 525 525 00:24:03,759 --> 00:24:06,700 and this is where we can align the items. 526 526 00:24:06,700 --> 00:24:10,422 So let's start with something called align items 527 527 00:24:10,422 --> 00:24:14,223 and set it to center, and let's see what happens. 528 528 00:24:15,440 --> 00:24:16,880 And here you go. 529 529 00:24:16,880 --> 00:24:18,660 So you see that now all the items 530 530 00:24:18,660 --> 00:24:21,510 are basically aligned along one line here, 531 531 00:24:21,510 --> 00:24:25,060 and so they're aligned along the cross axis. 532 532 00:24:25,060 --> 00:24:27,636 So on this cross axis here, if you imagine this axis, 533 533 00:24:27,636 --> 00:24:30,157 they are now in the middle, 534 534 00:24:30,157 --> 00:24:31,820 so in the center, of the cross axis. 535 535 00:24:31,820 --> 00:24:33,353 Okay? 536 536 00:24:33,353 --> 00:24:34,186 So that is align items center. 537 537 00:24:34,186 --> 00:24:37,490 So align items is always along the cross axis, 538 538 00:24:37,490 --> 00:24:39,580 but there are actually other values, 539 539 00:24:39,580 --> 00:24:41,950 again, as you can see on that cheat sheet. 540 540 00:24:41,950 --> 00:24:45,890 So align items can also for example be flex end, 541 541 00:24:45,890 --> 00:24:50,150 and so now they will be moved all the way to the end. 542 542 00:24:50,150 --> 00:24:51,790 Okay? 543 543 00:24:51,790 --> 00:24:54,580 There of course we have flex start, 544 544 00:24:54,580 --> 00:24:56,300 which is basically the top, 545 545 00:24:56,300 --> 00:24:59,360 and so they're moving to the top of the cross axis. 546 546 00:24:59,360 --> 00:25:02,433 Okay, so again, we're talking about the cross axis here. 547 547 00:25:03,376 --> 00:25:06,673 Okay, and the default here is stretch. 548 548 00:25:08,398 --> 00:25:09,231 So if you don't specify anything, 549 549 00:25:09,231 --> 00:25:11,110 they will be stretched like this. 550 550 00:25:11,110 --> 00:25:12,280 That sorta basically stretch 551 551 00:25:12,280 --> 00:25:15,430 and occupy all of the empty space that there is available. 552 552 00:25:15,430 --> 00:25:18,210 Now if you want something to behave in a different way, 553 553 00:25:18,210 --> 00:25:21,290 you can also specify the alignment on one item. 554 554 00:25:21,290 --> 00:25:22,540 And in order to do that, 555 555 00:25:22,540 --> 00:25:25,320 we use align self instead of align items. 556 556 00:25:25,320 --> 00:25:28,120 So align items does it for all of the elements 557 557 00:25:28,120 --> 00:25:29,770 that are in the flex container, 558 558 00:25:29,770 --> 00:25:32,280 and if you want to then change one individually, 559 559 00:25:32,280 --> 00:25:34,030 we can use align self. 560 560 00:25:34,030 --> 00:25:35,870 So imagine we wanted to do that for the price, 561 561 00:25:35,870 --> 00:25:37,370 we could simply say 562 562 00:25:40,600 --> 00:25:42,020 align self, 563 563 00:25:42,020 --> 00:25:44,330 and then this one here to center. 564 564 00:25:44,330 --> 00:25:46,280 And only this one will then be centered 565 565 00:25:46,280 --> 00:25:47,700 along the cross axis. 566 566 00:25:47,700 --> 00:25:49,328 Okay, so just like this. 567 567 00:25:49,328 --> 00:25:51,160 Now we don't want that. 568 568 00:25:51,160 --> 00:25:54,040 I just wanted to show you that we can actually do it. 569 569 00:25:54,040 --> 00:25:57,230 Okay, and so that actually gives us a nice tool 570 570 00:25:58,307 --> 00:25:59,150 to vertically center elements. 571 571 00:25:59,150 --> 00:26:02,080 So let's now go ahead and center this container here 572 572 00:26:02,080 --> 00:26:04,696 in this viewport, so inside of the body. 573 573 00:26:04,696 --> 00:26:07,412 So how are we gonna do that? 574 574 00:26:07,412 --> 00:26:08,680 Well it's very simple. 575 575 00:26:08,680 --> 00:26:11,453 We can simply turn the body into a flex container, 576 576 00:26:13,536 --> 00:26:17,570 and now this element here will be the flex item. 577 577 00:26:17,570 --> 00:26:18,430 Okay? 578 578 00:26:18,430 --> 00:26:20,930 And if you want to now vertically center it, 579 579 00:26:20,930 --> 00:26:22,880 all we have to do, as we already learned, 580 580 00:26:22,880 --> 00:26:26,740 is to use align items, which in this case is just one, 581 581 00:26:26,740 --> 00:26:30,779 but that's no problem, and it will now be centered. 582 582 00:26:30,779 --> 00:26:33,530 And you see, as I'm changing the viewport, 583 583 00:26:33,530 --> 00:26:35,585 it always stays in the center. 584 584 00:26:35,585 --> 00:26:36,790 Great. 585 585 00:26:36,790 --> 00:26:38,530 So you see that it's perfectly acceptable 586 586 00:26:38,530 --> 00:26:42,250 that a flex container contains only one flex item. 587 587 00:26:42,250 --> 00:26:45,000 Okay, so it's absolutely no problem, works just like this. 588 588 00:26:45,000 --> 00:26:47,330 And actually we use it all the time like this. 589 589 00:26:47,330 --> 00:26:51,210 So we talked about aligning items along the cross axis, 590 590 00:26:51,210 --> 00:26:54,100 but what about the main axis, so this axis. 591 591 00:26:54,100 --> 00:26:58,509 That is where the justify content property comes into play. 592 592 00:26:58,509 --> 00:27:01,370 So align items is for, 593 593 00:27:01,370 --> 00:27:03,320 and I will actually write it down here, 594 594 00:27:06,153 --> 00:27:07,540 is for the cross axis, 595 595 00:27:07,540 --> 00:27:11,863 and justify content is for the main axis. 596 596 00:27:16,900 --> 00:27:19,030 Okay, so let's now again use center, 597 597 00:27:19,030 --> 00:27:20,690 and what do you think will happen? 598 598 00:27:20,690 --> 00:27:23,400 And actually, very simple answer, 599 599 00:27:23,400 --> 00:27:26,040 it now centered this basically horizontally 600 600 00:27:26,040 --> 00:27:27,910 along the main axis. 601 601 00:27:27,910 --> 00:27:29,050 Great. 602 602 00:27:29,050 --> 00:27:32,773 Now here we could also use flex end, for example, 603 603 00:27:32,773 --> 00:27:35,310 if we want it on the right side 604 604 00:27:35,310 --> 00:27:36,950 and flex start for the left side, 605 605 00:27:36,950 --> 00:27:39,207 but that's not really necessary. 606 606 00:27:39,207 --> 00:27:41,230 There are some other possibilities 607 607 00:27:41,230 --> 00:27:42,600 and some quite important ones, 608 608 00:27:42,600 --> 00:27:44,780 but they only work if we have multiple elements, 609 609 00:27:44,780 --> 00:27:47,490 and so I'm gonna show them to you a bit later. 610 610 00:27:47,490 --> 00:27:49,770 Anyway, I believe that these three properties here, 611 611 00:27:49,770 --> 00:27:51,520 or actually these two here, 612 612 00:27:51,520 --> 00:27:54,030 they are the single most important properties 613 613 00:27:54,030 --> 00:27:56,340 that you need to understand in order to use Flexbox. 614 614 00:27:56,340 --> 00:27:59,430 So if you knew when to use these two properties, 615 615 00:27:59,430 --> 00:28:00,620 you'll be way on your way 616 616 00:28:00,620 --> 00:28:03,040 to start using Flexbox in practice. 617 617 00:28:03,040 --> 00:28:05,450 And I know that this is a lot to take in 618 618 00:28:05,450 --> 00:28:08,070 and that it probably sounds a bit confusing, 619 619 00:28:08,070 --> 00:28:10,630 but remember that this is just a crash course. 620 620 00:28:10,630 --> 00:28:13,060 I just wanted to introduce this technology to you 621 621 00:28:13,060 --> 00:28:16,840 with a nice and simple small example project, 622 622 00:28:16,840 --> 00:28:19,300 but you should definitely go ahead and experiment 623 623 00:28:19,300 --> 00:28:21,170 and try everything out on your own 624 624 00:28:21,170 --> 00:28:22,630 after watching this video. 625 625 00:28:22,630 --> 00:28:23,620 Okay? 626 626 00:28:23,620 --> 00:28:26,010 So we're gonna come back to these properties here later, 627 627 00:28:26,010 --> 00:28:28,220 many times actually, because we're gonna use lots 628 628 00:28:28,220 --> 00:28:31,140 of flex containers in this project. 629 629 00:28:31,140 --> 00:28:31,973 Okay? 630 630 00:28:31,973 --> 00:28:34,990 I'm just noticing here that the border radius 631 631 00:28:34,990 --> 00:28:37,140 is not really showing, and that's because the image here 632 632 00:28:37,140 --> 00:28:41,039 is actually overflowing its container now. 633 633 00:28:41,039 --> 00:28:42,835 And so we did this before in the other project, 634 634 00:28:42,835 --> 00:28:46,510 we just set overflow to hidden, 635 635 00:28:46,510 --> 00:28:49,640 and that will basically clip out these overflows. 636 636 00:28:49,640 --> 00:28:52,600 Okay, so let's now take care of this price here. 637 637 00:28:52,600 --> 00:28:54,510 So this would actually have a wide text, 638 638 00:28:54,510 --> 00:28:56,230 and it should be rotated, 639 639 00:28:56,230 --> 00:28:58,920 so basically written vertically, okay? 640 640 00:28:58,920 --> 00:29:02,063 And so in CSS, there's a property for that, 641 641 00:29:03,978 --> 00:29:06,486 and it is called writing mode. 642 642 00:29:06,486 --> 00:29:07,730 Okay? 643 643 00:29:07,730 --> 00:29:12,303 And so we can say it vertical right left, just like this. 644 644 00:29:15,600 --> 00:29:18,950 And so just like that, our text is now written vertically. 645 645 00:29:18,950 --> 00:29:21,720 You see that even the cursor here changes its position 646 646 00:29:21,720 --> 00:29:23,880 when we hover this text. 647 647 00:29:23,880 --> 00:29:24,713 Okay? 648 648 00:29:24,713 --> 00:29:26,623 It should also have a wide text, 649 649 00:29:29,900 --> 00:29:34,900 so wide and a font size of 18 pixels. 650 650 00:29:35,290 --> 00:29:38,170 And now we need to use the magic of Flexbox again 651 651 00:29:38,170 --> 00:29:41,600 in order to center this text in its container. 652 652 00:29:41,600 --> 00:29:42,981 Okay? 653 653 00:29:42,981 --> 00:29:44,310 And that's something that we didn't talk about yet, 654 654 00:29:44,310 --> 00:29:48,130 which is that if you define an element as a flex container 655 655 00:29:48,130 --> 00:29:50,320 that has actually no elements in it, 656 656 00:29:50,320 --> 00:29:52,720 so like in this case it only has text, 657 657 00:29:52,720 --> 00:29:56,150 well then this text basically becomes the flex item. 658 658 00:29:56,150 --> 00:29:59,073 So if we now say display flex, 659 659 00:30:02,360 --> 00:30:04,003 and we say align items, 660 660 00:30:05,440 --> 00:30:06,873 and set it to center, 661 661 00:30:09,070 --> 00:30:11,320 you will see that it now centered the text. 662 662 00:30:11,320 --> 00:30:13,290 And actually it did it in this direction, 663 663 00:30:13,290 --> 00:30:15,520 but that's because we're writing the text 664 664 00:30:15,520 --> 00:30:17,440 in this different orientation. 665 665 00:30:17,440 --> 00:30:19,760 So if we got rid of this piece here of code, 666 666 00:30:19,760 --> 00:30:21,460 so if the text was just normal, 667 667 00:30:21,460 --> 00:30:23,060 then we would see the normal behavior 668 668 00:30:23,060 --> 00:30:26,600 of it being centered along the cross axis. 669 669 00:30:26,600 --> 00:30:28,430 Okay, so vertically basically. 670 670 00:30:28,430 --> 00:30:30,840 But since we are changing the writing mode here, 671 671 00:30:30,840 --> 00:30:32,810 that also changes the direction. 672 672 00:30:32,810 --> 00:30:34,850 So the cross axis is now this here, 673 673 00:30:34,850 --> 00:30:37,983 and the main axis is in this direction. 674 674 00:30:41,330 --> 00:30:45,070 So justify content to center it in both directions, 675 675 00:30:45,070 --> 00:30:47,480 and now you will see it right in the middle. 676 676 00:30:47,480 --> 00:30:48,720 So perfect. 677 677 00:30:48,720 --> 00:30:50,670 So you will see this pattern many times 678 678 00:30:50,670 --> 00:30:53,797 where you define an element as a flex container 679 679 00:30:53,797 --> 00:30:55,450 and then simply align items 680 680 00:30:55,450 --> 00:30:57,270 and justify content both to center, 681 681 00:30:57,270 --> 00:31:00,380 and it will center all of the elements right in the middle. 682 682 00:31:00,380 --> 00:31:02,820 Okay, so that looks already pretty nice. 683 683 00:31:02,820 --> 00:31:04,500 Let's just take a quick break here, 684 684 00:31:04,500 --> 00:31:06,990 and maybe you can review the code that we wrote already 685 685 00:31:06,990 --> 00:31:09,990 and go over that property overview again 686 686 00:31:09,990 --> 00:31:13,350 to better understand the properties that we used so far. 687 687 00:31:13,350 --> 00:31:15,320 But the main thing that you really need to understand 688 688 00:31:15,320 --> 00:31:19,123 is the axis, so the main axis and the cross axis, 689 689 00:31:19,123 --> 00:31:23,270 and how we can align different items along these axis. 690 690 00:31:23,270 --> 00:31:24,210 And so for that, 691 691 00:31:24,210 --> 00:31:27,580 we so far used align items and justify content. 692 692 00:31:27,580 --> 00:31:30,660 Okay, so let's take a break and come back in a second to 693 693 00:31:30,660 --> 00:31:34,510 then create this middle part here using a lot more Flexbox. 694 694 00:31:34,510 --> 00:31:35,343 See you then.