Chapter 1. Cascade, specificity, and inheritance

This chapter covers

  • The four parts that make up the cascade
  • The difference between the cascade and inheritance
  • How to control which styles apply to which elements
  • Common misunderstandings about shorthand declarations

CSS is unlike a lot of things in the world of software development. It’s not a programming language, strictly speaking, but it does require abstract thought. It’s not purely a design tool, but it does require some creativity. It provides a deceptively simple declarative syntax, but if you’ve worked with it on any large projects, you know it can grow into unwieldy complexity.

When you need to learn to do something in conventional programming, you can usually figure out what to search for (for example, “How do I find items of type x in an array?”). With CSS, it’s not always easy to distill the problem down to a single question. Even when you can, the answer is often “it depends.” The best way to accomplish something is often contingent on your particular constraints and how precisely you’ll want to handle various edge cases.

While it’s helpful to know some “tricks” or useful recipes you can follow, mastering CSS requires an understanding of the principles that make those practices possible. This book is full of examples, but it is primarily a book of principles.

1.1. The cascade

1.2. Inheritance

1.3. Special values

1.4. Shorthand properties