CSS - The Complete Guide (incl. Flexbox, Grid & Sass)
Learn CSS for the first time or brush up your CSS skills and dive in even deeper. EVERY web developer has to know CSS.
Start courseCSS - short for Cascading Style Sheets - is a "programming language" you use to turn your raw HTML pages into real beautiful websites.
This course covers it all - we start at the very basics (What is CSS? How does it work? How do you use it)? and gradually dive in deeper and deeper. And we do this by showing both practical examples as well as the theory behind it.
Getting started with CSS might look easy but there actually is a lot of depth to CSS - hence this course provides different "Tracks" or "Entry points" to exactly meet your demands and reflect you current knowledge level:
- The Basics Track:Start from scratch, learn CSS from the ground up. You start with lecture 1 and simply follow through to the end.
- The Advanced Track: You already know the CSS basics, you know what selectors are and how it works but you want to dive in deeper and learn some advanced features and usages.
- The Expert Track: You got the advanced knowledge, too, but you want to dive into things like Flexbox, CSS Grid, CSS Variables or Sass. This track is for you.
Of course this course offers the theory and practical examples - we'll build an entire real course project throughout the course - but there also are multiple assignments, quizzes and challenges for you to practice individual concepts taught throughout the course.
Talking about the course project - we'll build the frontend (no backend) of a fictional web hosting company. We'll have a starting screen which has different sections, we got a responsive design with an animated side-drawer, we got modals and forms and in general we got a lot of CSS animations, font styles and more!
Here's what's inside the course in detail - this is all also applied to the mentioned course project:
- The basics about selectors, combinators and how you set up styling rules in general
- Properties, values and decalarations
- How specifity and inheritance work and why it's called "Cascading" Style Sheets
- Important theoretical concepts like the "Box Model"
- How the default position of elements can be changed
- Styling backgrounds (e.g. gradients) and images
- Which units and dimensions you typically use in CSS (px, rem, % and more)
- How JavaScript and CSS interact
- Responsive design and what "Mobile First" means
- Styling forms and form inputs
- Working with text, fonts and text styles
- Flexbox! How it works and how to use it
- Using the CSS Grid and how it differs from Flexbox
- Transforming and animating HTML elements with the help of CSS
- Writing future-proof CSS with features like CSS variables or best-practice class names
- Using Sass and what it actually is all about
Is this course for you?
It's for you if ...
- you started with learning web development and you want to build more beautiful websites
- you already know CSS but want to dive deeper
- you're using CSS in a trial-and-error manner and want to change this (you should!)
You might come back later if ...
- you're an absolute CSS pro and you know the CSS working group drafts by heart
- you're a backend-only developer (Node, PHP, NO HTML or frontend JavaScript)
- you're a total newcomer to web development and you don't know the basics about HTML
Course content
Section 1Getting Started
- Introduction1:39
- What is CSS?2:59
- CSS History, Present & Future1:50
- Join our Online Learning Community1:00
- Course Outline4:34
- Course Prerequisites0:43
- How To Get The Most Out Of This Course2:49
- Recommended Tools1:26
- Useful Resources & Links1:00
- Where to Find the Source Code1:00
Section 2Diving Into the Basics of CSS
- Module Introduction0:55
- Understanding the Course Project Setup2:44
- Adding CSS to our Project with Inline StylesPremium3:53
- Understanding the "style" Tag & Creating a .css FilePremium6:27
- Applying Additional Styles & Importing Google FontsPremium6:51
- Theory Time - SelectorsPremium8:56
- Understanding the "Cascading" Style & SpecificityPremium8:14
- Understanding InheritancePremium5:47
- Adding CombinatorsPremium6:16
- Theory Time - CombinatorsPremium5:42
- Summarizing Properties & SelectorsPremium3:49
- Assignment - The Basics (Problem)Premium3:15
- Assignment - The Basics (Solution)Premium12:40
- Wrap UpPremium2:02
- Useful Resources & LinksPremium1:00
Section 3Diving Deeper into CSS
- Module IntroductionPremium1:19
- Introducing the CSS Box ModelPremium3:36
- Understanding the Box ModelPremium3:01
- Understanding Margin Collapsing and Removing Default MarginsPremium3:05
- Deep Dive on "Margin Collapsing"Premium1:00
- Theory Time - Working with Shorthand PropertiesPremium3:48
- Applying Shorthands in PracticePremium2:05
- Diving Into the Height & Width PropertiesPremium6:07
- Understanding Box SizingPremium6:43
- Adding the Header to our ProjectPremium5:37
- Understanding the Display PropertyPremium7:12
- display: none vs visibility: hiddenPremium1:00
- HTML Refresher: Block-level vs Inline ElementsPremium1:00
- Applying the Display Property & Styling our Navigation BarPremium6:53
- Understanding an Unexpected "inline-block" BehaviourPremium2:03
- Working with "text-decoration" & "vertical-align"Premium4:54
- Styling Anchor TagsPremium4:00
- Adding Pseudo ClassesPremium1:47
- Theory Time - Pseudo Classes & Pseudo ElementsPremium5:38
- Grouping RulesPremium1:14
- Working with "font-weight" & "border"Premium2:04
- Adding & Styling a CTA-ButtonPremium4:09
- Adding a Background Image to our ProjectPremium1:50
- Properties Worth to RememberPremium1:29
- Assignment - Diving Deeper (Problem)Premium3:08
- Assignment - Diving Deeper (Solution)Premium16:26
- Wrap UpPremium2:31
- Useful Resources & LinksPremium1:00
Section 4More on Selectors & CSS Features
- Module IntroductionPremium0:41
- Using Multiple CSS Classes & Combined SelectorsPremium7:09
- Classes or IDs?Premium4:05
- (Not) using !importantPremium3:15
- Selecting the Opposite with :not()Premium3:29
- CSS & Browser SupportPremium3:51
- Wrap UpPremium1:06
- Useful Resources & LinksPremium1:00
Section 5Practicing the Basics
- Module IntroductionPremium0:37
- Adding Style to our PlansPremium8:34
- Working on the Recommended PlanPremium6:33
- Styling the Badge with "border-radius"Premium3:22
- Styling our ListPremium3:02
- Working on the Title and the Price of our PackagesPremium4:33
- Improving our Action ButtonPremium6:40
- Understanding OutlinesPremium2:17
- Presenting the Core Features to the UserPremium1:22
- Styling the Headline of the Core Features SectionPremium3:38
- Preparing the Content of the Key Feature AreaPremium7:15
- Adding the FooterPremium6:49
- What we Achieved so FarPremium1:46
- Adding the Packages PagePremium6:24
- Your ChallengePremium1:31
- Styling the LinksPremium3:55
- Styling our Package BoxesPremium7:15
- Adding "float" to our PackagePremium5:14
- Fixing the Hover EffectPremium4:11
- Adding the Final TouchesPremium3:01
- Useful Resources & LinksPremium1:00
Section 6Positioning Elements with CSS
- Module IntroductionPremium2:44
- Why Positioning will Improve our WebsitePremium2:32
- Understanding Positioning - The TheoryPremium5:54
- Working with the "fixed" ValuePremium9:50
- Creating a Fixed Navigation BarPremium3:54
- Using "position" to Add a Background ImagePremium6:03
- Understanding the Z-IndexPremium6:59
- Adding a Badge to our PackagePremium8:00
- Styling & Positioning our Badge with "absolute" and "relative"Premium3:10
- Diving Deeper into Relative PositioningPremium4:02
- Working with "overflow" and Relative PositioningPremium4:17
- Introducing "sticky" PositioningPremium6:53
- Understanding the Stacking ContextPremium5:53
- Assignment - Positioning (Problem)Premium4:41
- Assignment - Positioning (Solution)Premium14:35
- Wrap UpPremium4:12
- Useful Resources & LinksPremium1:00
Section 7Understanding Background Images & Images
- Optional: Advanced Track IntroductionPremium2:22
- Module IntroductionPremium1:05
- Understanding "background-size"Premium8:41
- Working with "background-position"Premium5:00
- The "background" Shorthand - TheoryPremium2:12
- Applying "background" Origin, Clip & AttachmentPremium5:51
- Using the "background" Shorthand on our ProjectPremium2:19
- Styling ImagesPremium7:33
- Adding the Customers Page to our WebsitePremium3:19
- Working on the Image LayoutPremium8:07
- Understanding Linear GradientsPremium6:16
- Applying Radial GradientsPremium5:41
- Stacking Multiple BackgroundsPremium4:50
- Understanding FiltersPremium4:00
- Adding & Styling SVGs - The BasicsPremium4:20
- Wrap UpPremium2:14
- Useful Resources & LinksPremium1:00
Section 8Sizes & Units
- Module IntroductionPremium2:35
- What's Wrong With Our Project Units?Premium5:21
- Where Units MatterPremium6:02
- An Overview of Available Sizes & UnitsPremium4:24
- Rules to Remember: Fixed Positioning & "%"Premium4:15
- Rules to Remember: Absolute Positioning & "%"Premium8:14
- Rules to Remember: Relative / Static Positioning & "%"Premium8:53
- Fixing the Height 100% IssuePremium12:02
- Defining the Font Size in the Root ElementPremium2:18
- Using "min-width/height" & "max-width/height"Premium5:27
- Working with "rem" & "em"Premium12:47
- Adding "rem" to Additional PropertiesPremium8:17
- Finishing "rem"Premium5:21
- Understanding the Viewport Units "vw" &"vh"Premium9:47
- Windows, Viewport Units & ScrollbarsPremium1:00
- Choosing the Right UnitPremium5:30
- Using "auto" to Center ElementsPremium1:42
- Cleaning Up our CodePremium1:06
- Wrap UpPremium4:23
- Useful Resources & LinksPremium1:00
Section 9Working with JavaScript & CSS
- Module IntroductionPremium1:16
- Adding a ModalPremium4:13
- Selecting & Manipulating Styles with JavaScriptPremium10:34
- Adding an Event ListenerPremium6:05
- Assignment - Adding Style with JavaScript (Problem)Premium0:45
- Assignment - Adding Style with JavaScript (Solution)Premium3:58
- Adding a Side Navigation BarPremium7:14
- Opening and Closing the Hamburger MenuPremium3:57
- Manipulating Element ClassesPremium6:40
- Understanding Property NotationsPremium3:12
- Cleaning Up our CodePremium5:31
- Wrap UpPremium1:15
- Useful Resources & LinksPremium1:00
Section 10Responsive Design
- Module IntroductionPremium1:45
- Why our Project Should Become ResponsivePremium2:25
- Understanding Hardware Pixels vs. Software PixelsPremium10:29
- Comparing the Viewport Metatag (HTML) and Media Queries (CSS)Premium3:04
- Understanding the "viewport" MetatagPremium7:22
- Designing Websites "Mobile First"Premium1:54
- Adding our First Media QueriesPremium12:52
- Things to Keep in Mind when Working with Media QueriesPremium8:09
- Finding the Right Breaking PointsPremium3:45
- Creating the Mobile First Design for our PlansPremium6:37
- Making the Plans ResponsivePremium8:35
- Your ChallengePremium6:06
- Assignment - Responsive Websites (Problem)Premium3:00
- Assignment - Responsive Websites (Solution)Premium8:07
- Working with Logical OperatorsPremium8:13
- Improving the Customers PagePremium14:58
- Improving the Packages PagePremium5:41
- Cleaning Up the Navigation BarPremium4:39
- Positioning our Footer CorrectlyPremium10:09
- Wrap UpPremium2:15
- Useful Resources & LinksPremium1:00
Section 11Adding & Styling Forms
- Module IntroductionPremium1:32
- Adding the Unstyled FormPremium2:37
- Page InitializationPremium6:35
- Understanding Advanced Attribute SelectorsPremium6:02
- Working on the General LayoutPremium7:15
- Restyling the Form ElementsPremium6:29
- Styling the CheckboxPremium6:52
- Providing Validation FeedbackPremium8:50
- Styling the Signup ButtonPremium3:42
- Fixing a Broken LinkPremium1:00
- Wrap UpPremium1:29
- Useful Resources & LinksPremium1:00
Section 12Working with Text and Fonts
- Module IntroductionPremium1:20
- Comparing Generic Families & Font FamiliesPremium2:56
- Understanding the Browser SettingsPremium6:17
- Using the Default Font FamiliesPremium6:53
- Understanding the "font-family" SyntaxPremium6:18
- Working with Locally Saved FontsPremium3:50
- Working with Google FontsPremium10:28
- Understanding Font Faces & "font-style"Premium6:49
- Importing our Custom FontsPremium9:03
- Understanding Font FormatsPremium5:41
- Diving into Font PropertiesPremium3:10
- Adding "letter-spacing"Premium4:43
- Changing the Line HeightPremium6:07
- Applying "text-decoration" & "text-shadow"Premium5:51
- Understanding the "font" ShorthandPremium8:39
- Loading Performance & "font-display"Premium9:49
- Wrap UpPremium3:47
- Useful Resources & LinksPremium1:00
Section 13Adding Flexbox to our Project
- Optional: Expert Track IntroductionPremium3:23
- Module IntroductionPremium1:31
- How we Could Improve our ProjectPremium2:58
- Understanding FlexboxPremium3:18
- Creating a Flex ContainerPremium5:33
- Using "flex-direction" & "flex-wrap"Premium8:55
- Understanding the Importance of Main Axis & Cross AxisPremium7:27
- Working with "align-items" & "justify-content"Premium10:59
- And What About "align-content"?Premium2:40
- Improving the Navigation Bar with FlexboxPremium12:02
- Your Challenge - Working on the Mobile Navigation BarPremium4:16
- Improving the FooterPremium8:55
- Assignment - Flexbox (Problem)Premium4:19
- Assignment - Flexbox (Solution)Premium8:32
- Flexbox and the Z-IndexPremium1:00
- Adding Flexbox to the Customers PagePremium3:16
- Using the "order" Property for a Flex ItemPremium6:07
- Working with "align-self"Premium2:44
- Understanding "flex-grow"Premium7:35
- Applying "flex-shrink"Premium3:12
- Comparing "flex-basis" vs "width" & "height"Premium8:35
- Wrap UpPremium3:52
- Useful Resources & LinksPremium1:00
Section 14Using the CSS Grid
- Module IntroductionPremium1:14
- What is the CSS Grid?Premium1:27
- Getting StartedPremium2:22
- Turning a Container into a GridPremium3:21
- Defining Columns & RowsPremium5:49
- Positioning Child Elements in a GridPremium4:13
- Using "element-sizing", "repeat" & "minmax"Premium6:45
- Advanced Element PositioningPremium6:30
- Working with Named LinesPremium3:53
- Assignment - Grid (Problem)Premium0:49
- Assignment - Grid (Solution)Premium9:14
- Understanding Column & Row ShorthandsPremium2:54
- Working with GapsPremium2:33
- Adding Named Template AreasPremium6:39
- Assignment - Diving Deeper (Problem)Premium0:38
- Assignment - Diving Deeper (Solution)Premium3:22
- Creating Automatically Generated Grid AreasPremium7:10
- Using the Grid on our ProjectPremium9:10
- Working with "fit-content"Premium3:31
- Positioning Grid ElementsPremium3:35
- Positioning the Entire Grid ContentPremium3:17
- Positioning Elements IndividuallyPremium1:34
- Understanding Responsive GridsPremium5:30
- Applying AutoflowPremium6:39
- Comparing the Explicit & Implicit GridPremium2:31
- Understanding "auto-fill" & "auto-fit"Premium3:33
- Creating a Dense GridPremium3:22
- Styling the Project Form with GridPremium9:45
- Comparing Grid & FlexboxPremium2:27
- Next StepsPremium1:31
- Wrap UpPremium3:49
- Useful Resources & LinksPremium1:00
Section 15Transforming Elements with CSS Transforms
- Module IntroductionPremium0:31
- Rotating Elements and setting transform-originPremium3:45
- Using Rotate and TranslatePremium4:57
- Working with "skew" and "scale"Premium6:18
- Applying Transformation ShorthandsPremium2:23
- Rotating Elements in 3 DimensionsPremium4:19
- Understanding the "perspective" PropertyPremium3:37
- Moving Elements along the Z-Axis with "translateZ"Premium3:54
- Rotating the Container with "transform style"Premium3:44
- Flipping Elements & "backface-visibility"Premium1:15
- Wrap UpPremium1:14
- Useful Resources & LinksPremium1:00
Section 16Transitions & Animations in CSS
- Module IntroductionPremium0:22
- Understanding and Applying TransitionsPremium7:23
- CSS "transition" Property Deep DivePremium1:00
- Working with Timing FunctionsPremium2:50
- Transitions & "display"Premium6:11
- Assignment - CSS Transitions (Problem)Premium0:48
- Assignment - CSS Transitions (Solution)Premium2:12
- Using CSS AnimationsPremium9:00
- CSS "animation" Property Deep DivePremium1:00
- Adding Multiple KeyframesPremium3:22
- Adding Animations to our Customers PagePremium3:59
- Assignment - Animations (Problem)Premium0:33
- Assignment - Animations (Solution)Premium3:03
- Using JavaScript Animation Event ListenersPremium3:24
- Wrap UpPremium1:35
- Useful Resources & LinksPremium1:00
Section 17Writing Future-Proof CSS Code
- Module IntroductionPremium0:34
- CSS Modules & Their Working GroupsPremium1:55
- Using CSS VariablesPremium7:31
- Understanding & Using Vendor PrefixesPremium4:47
- Which Prefixes Should You Use?Premium2:58
- Detecting Browser Support with @supportsPremium5:09
- PolyfillsPremium2:45
- Eliminating Cross-Browser InconsistenciesPremium2:58
- How to Name CSS ClassesPremium4:52
- Vanilla CSS vs FrameworksPremium8:36
- Wrap UpPremium4:16
- Useful Resources & LinksPremium1:00
Section 18Introducing Sass (Syntactically Awesome Style Sheets)
- Module IntroductionPremium0:42
- What is Sass & Scss?Premium3:30
- Installing SassPremium4:25
- Things to be Improved with SassPremium1:33
- Nesting SelectorsPremium6:35
- Adding Nested PropertiesPremium1:27
- Understanding VariablesPremium3:05
- Storing Lists & Maps in VariablesPremium5:58
- Built-In FunctionsPremium3:18
- Assignment - Sass (Problem)Premium0:49
- Assignment - Sass (Solution)Premium3:42
- Adding Simple ArithmeticsPremium2:24
- Adding Better Import and PartialsPremium4:46
- Improving Media QueriesPremium2:24
- Understanding InheritancePremium3:33
- Adding MixinsPremium6:45
- Using the Ampersand OperatorPremium2:57
- Wrap UpPremium1:13
- Useful Resources & LinksPremium1:00
Section 19Course Roundup
- Course RoundupPremium1:56
Course instructor
Maximilian Schwarzmüller
As a self-taught professional I really know the hard parts and the difficult topics when learning new or improving on already-known languages. This background and experience enable me to focus on the most relevant key concepts and topics. My track record of many 5-star rated courses, more than 1,000,000 students worldwide as well as a successful YouTube channel is the best proof for that.
The most rewarding experience for me is to see how people find new, better jobs, build awesome web applications, work on amazing projects or simply enjoy their hobby with the help of my content. That's why, together with Manuel Lorenz, I founded Academind to offer the best possible learning experience and to share the pleasure of learning with our students.