CSS Properties
Now that we’ve gone over adding HTML tags to the page, let’s cover adding styles to those tags. We can do quite a lot with styles! We can change:
- Typography
- Colors
- Appearance (Corners, Borders, Decorations)
- Layout
- Position
- Inline vs Block
- Animations
- and many more
CSS styles are always written in property: value
pairs (like background: blue;
) and terminated with a semicolon.
Applying CSS to an HTML file
CSS can be applied to HTML tags in three different ways.
- Inline using an HTML tag’s
style
attribute<div style="background: blue; color: white;">Hello </div>
- Via a
<style>
tag in the HTML page - Through an external CSS file
<link rel="stylesheet" href="./css-demo-finished.css" />
Targeting specific elements
Inline styles are always applied directly to the element you place them on, but <style>
tags and external CSS files need a way to match elements with their respective style sets. This is done with CSS selectors. When selectors are combined with CSS styles, we call this a ruleset.
CSS rulesets take on the following form:
selector1,
selector2 {
property1: value1;
property2: value2;
}
Here’s a more detailed view from Chris Eppstein:
Selectors can be a single tag, class, ID, or attribute. It can also be a combination of those elements.
Below is a series of selectors and property/value combinations that we’ll apply to our CSS demo page.
/* Targeting the entire page */
body {
font: 1.2em sans-serif;
}
/* Targeting an HTML tag */
h1 {
/* Color name */
color: black;
/* 6-digit hex */
background: #ababab;
/* Margin: specified separately for each side */
margin-bottom: 15px;
margin-top: 15px;
/* Shorthand: Padding applies to all sides */
padding: 10px;
/* Border shorthand and 3-digit hex */
border: 1px solid #ddd;
}
/* Overriding inherited styles */
span {
color: #004578;
}
/* Sibling selector */
a ~ a {
/* Changing elements from inline to block */
display: block;
}
/* Targeting a class name */
.tiles {
display: flex;
}
/* Descendant selector */
.tiles img {
width: 100%;
}
/* Direct descendant selector */
.tiles > div {
/* rgb color */
background: rgb(10, 10, 10);
color: white;
flex-basis: 100%;
/* Padding/margin shorthand. Goes clockwise from top.
10px - all
10px 20px - top/bottom left/right
10px 20px 15px - top left/right bottom
*/
padding: 10px 20px 15px;
margin: 10px 20px 10px 0;
border: 1px solid white;
}
/* Qualified selector */
div.important-links {
background: #004578;
}
/* Style inheritance only works for unstyled elements */
a {
color: white;
}
/* Hover pseudo-selector */
a:hover {
color: #ccc;
}
/* Positional pseudo-selector */
.tiles > div:last-child {
/* overrides margin-right but leaves other margins alone */
margin-right: 0;
}
/* ID selector */
#contact-form {
display: flex;
flex-direction: column;
}
/* Attribute selector */
input[type='submit'] {
margin-top: 10px;
}
注:本节 demo 中的 style.css 代码都已屏蔽,可以一步步取消屏蔽观察 CSS 效果。