Table of Contents
- What is CSS?
- How CSS Works with HTML
- Setting Up Your First CSS File
- Basic CSS Syntax
- Core CSS Concepts: Selectors, Properties, and Values
- Styling Text: Fonts, Sizes, and Colors
- Styling Colors and Backgrounds
- The Box Model: Padding, Borders, and Margins
- Layout Fundamentals: Display and Positioning
- Putting It All Together: A Mini Project
- Common Mistakes to Avoid
- Next Steps
- Reference
What is CSS?
CSS stands for Cascading Style Sheets. It’s a stylesheet language used to describe the presentation of a document written in HTML (or XML). In simpler terms: HTML defines what content exists (headings, paragraphs, buttons), and CSS defines how that content looks (colors, fonts, spacing, layout).
Why CSS Matters:
- Separation of Concerns: CSS keeps styling separate from HTML, making code easier to read, update, and maintain.
- Consistency: Apply styles across an entire website with a single CSS file.
- Flexibility: Customize every visual aspect of a page—from text size to animations (though we’ll stick to basics here!).
How CSS Works with HTML
CSS and HTML work hand-in-hand. HTML provides the “skeleton,” and CSS adds the “skin.” There are three ways to add CSS to an HTML document:
1. Inline CSS
Styles are added directly to an HTML element using the style attribute.
Example:
<p style="color: blue; font-size: 20px;">This is inline-styled text.</p>
Pros: Quick for one-off styles.
Cons: Mixes HTML and CSS (hard to maintain for large sites).
2. Internal CSS
Styles are defined in the <head> section of an HTML file using a <style> tag.
Example:
<!DOCTYPE html>
<html>
<head>
<style>
p {
color: blue;
font-size: 20px;
}
</style>
</head>
<body>
<p>This paragraph is styled with internal CSS.</p>
</body>
</html>
Pros: Applies styles to a single page.
Cons: Not reusable across multiple pages.
3. External CSS (Recommended)
Styles are written in a separate .css file and linked to the HTML document using the <link> tag. This is the most scalable approach for real-world projects.
Example:
- Create a file named
styles.csswith your CSS code. - Link it in your HTML’s
<head>:<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="styles.css"> </head> <body> <p>This paragraph is styled with external CSS.</p> </body> </html>
Pros: Reusable across multiple pages; easy to update.
Cons: Requires a separate file (but this is a small price for scalability!).
For this guide, we’ll focus on external CSS—the industry standard for most projects.
Setting Up Your First CSS File
Let’s create your first CSS file and link it to an HTML page. Here’s what you’ll need:
- A text editor (e.g., VS Code, Sublime Text, or even Notepad).
- Basic knowledge of HTML (we’ll keep it simple!).
Step 1: Create an HTML File
Open your text editor and create a new file named index.html. Add this basic HTML structure:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My First CSS Page</title>
<!-- Link to CSS file -->
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>Hello, CSS!</h1>
<p>This is my first styled paragraph.</p>
</body>
</html>
Step 2: Create a CSS File
In the same folder as index.html, create a new file named styles.css. For now, leave it empty—we’ll add styles soon!
Step 3: Test the Setup
Open index.html in a web browser (double-click the file). You’ll see a plain page with a heading and paragraph—no styles yet. Let’s fix that!
Basic CSS Syntax
CSS code is made up of rulesets. A ruleset tells the browser how to style a specific HTML element. Here’s the basic structure:
selector {
property: value;
/* More properties and values */
}
Breakdown:
- Selector: The HTML element(s) you want to style (e.g.,
h1,p,.class,#id). - Declaration Block: Wrapped in
{ }, contains one or more declarations. - Declaration: A
property: valuepair (e.g.,color: blue). End with a semicolon (;).
Example:
Let’s style the <h1> and <p> elements in our styles.css file:
/* Style the h1 heading */
h1 {
color: darkgreen; /* Text color */
font-size: 32px; /* Text size */
text-align: center; /* Center-align text */
}
/* Style all p elements */
p {
color: #333; /* Dark gray text (hex color) */
font-family: Arial, sans-serif; /* Font */
line-height: 1.6; /* Spacing between lines */
}
Save styles.css and refresh index.html in your browser. You’ll see the heading turn dark green, centered, and the paragraph text in Arial with more line spacing!
Core CSS Concepts: Selectors, Properties, and Values
To style effectively, you need to master three key concepts: selectors, properties, and values.
1. Selectors: Targeting Elements
Selectors tell CSS which HTML elements to style. Here are the most common types:
Type Selector
Targets all elements of a specific type (e.g., h1, p, div).
/* Style all <button> elements */
button {
background: lightblue;
padding: 10px;
}
Class Selector
Targets elements with a specific class attribute. Use a dot (.) before the class name.
HTML:
<p class="highlight">This paragraph has a class.</p>
CSS:
/* Style elements with class "highlight" */
.highlight {
background: yellow;
font-weight: bold;
}
ID Selector
Targets a single element with a unique id attribute. Use a hash (#) before the ID name.
HTML:
<div id="header">This is the header.</div>
CSS:
/* Style the element with id "header" */
#header {
background: navy;
color: white;
padding: 20px;
}
Note: IDs must be unique on a page (use for one-of-a-kind elements like headers/footers). Classes can be reused.
Group Selector
Apply the same styles to multiple selectors by separating them with commas.
/* Style h1, h2, and h3 with the same color */
h1, h2, h3 {
color: purple;
}
2. Properties and Values
Properties are the aspects of an element you want to style (e.g., color, font-size), and values define how to style them (e.g., blue, 24px).
Common Properties:
color: Text color (values:blue,#ff0000,rgb(0, 255, 0)).font-size: Text size (values:16px,1.2em,120%).background: Background color/image (values:lightgray,url("image.jpg")).padding: Space inside an element (values:10px,5px 15px).margin: Space outside an element (values:10px,0 autofor centering).
3. Specificity: Resolving Conflicts
What if two rules target the same element? CSS uses specificity to decide which style wins. Think of it as a “score”:
- ID selectors (
#header) > Class selectors (.highlight) > Type selectors (p).
Example:
/* Type selector (low specificity) */
p { color: red; }
/* Class selector (higher specificity) */
.highlight { color: blue; }
/* ID selector (highest specificity) */
#intro { color: green; }
HTML:
<p id="intro" class="highlight">This text will be green (ID wins).</p>
Styling Text: Fonts, Sizes, and Colors
Text is the backbone of most web pages—let’s make it look great!
Font Family
Use font-family to set the font. Specify fallback fonts in case the first isn’t available.
body {
/* Use "Helvetica" first; fall back to Arial, then sans-serif */
font-family: "Helvetica", Arial, sans-serif;
}
- Web-Safe Fonts: Arial, Helvetica, Times New Roman (pre-installed on most devices).
- Google Fonts: For more options, import free fonts from Google Fonts.
Font Size
Control text size with font-size. Common units:
px(pixels): Fixed size (e.g.,16px).em: Relative to parent element (e.g.,1.2em= 1.2x parent size).rem: Relative to root (html) element (e.g.,1.5rem).
h1 { font-size: 2.5rem; } /* 40px if root is 16px */
p { font-size: 1.1em; } /* 1.1x parent font size */
Text Color
Use color to set text color. Values can be:
- Named colors:
red,blue,aqua. - Hex codes:
#ff0000(red),#00ff00(green),#0000ff(blue). - RGB/RGBA:
rgb(255, 0, 0)(red),rgba(0, 0, 255, 0.5)(semi-transparent blue). - HSL/HSLA:
hsl(120, 100%, 50%)(green),hsla(0, 100%, 50%, 0.3)(semi-transparent red).
.warning {
color: #ff4444; /* Light red (hex) */
}
Styling Colors and Backgrounds
Beyond text, CSS lets you style backgrounds for elements like <div>, <body>, or even <span>.
Background Color
Use background-color to set a solid color behind an element.
.header {
background-color: #f0f8ff; /* AliceBlue */
padding: 20px;
}
Background Image
Use background-image to add an image. Combine with background-repeat (to tile or not) and background-position (to align).
.hero {
background-image: url("mountain.jpg"); /* Path to image */
background-repeat: no-repeat; /* Don't tile the image */
background-position: center; /* Center the image */
background-size: cover; /* Scale image to cover the element */
height: 400px; /* Set height to show the image */
}
The Box Model: Padding, Borders, and Margins
Every HTML element is a box. The CSS Box Model defines how space is calculated around and inside elements. It has four layers:
- Content: The actual content (text, images).
- Padding: Space between content and border.
- Border: A line around the padding (optional).
- Margin: Space outside the border, separating the element from others.
Visualization:
+------------------------+
| Margin |
| +------------------+ |
| | Border | |
| | +------------+ | |
| | | Padding | | |
| | | Content | | |
| | | | | |
| | +------------+ | |
| +------------------+ |
+------------------------+
Example:
.box {
width: 200px; /* Content width */
height: 150px; /* Content height */
padding: 20px; /* 20px padding on all sides */
border: 2px solid black; /* 2px black border */
margin: 30px; /* 30px margin on all sides */
background: lightgray;
}
The total width of the box is: content width + padding (left + right) + border (left + right) = 200px + 40px + 4px = 244px.
Layout Fundamentals: Display and Positioning
Layout determines how elements are arranged on the page. Let’s start with the basics.
Display Property
The display property controls how an element behaves in the layout. Common values:
block: Elements take full width (e.g.,<div>,<p>), stack vertically.inline: Elements take only as much width as needed (e.g.,<span>,<a>), sit next to each other.inline-block: Combines inline (sits next to others) and block (can set width/height).
Example:
/* Make links look like buttons */
.btn {
display: inline-block;
padding: 10px 20px;
background: #4CAF50;
color: white;
text-decoration: none; /* Remove underline */
margin: 5px;
}
Centering Elements
Use margin: 0 auto to horizontally center block-level elements (requires a defined width).
.container {
width: 80%; /* Take 80% of parent width */
margin: 0 auto; /* Center horizontally */
background: #f9f9f9;
padding: 20px;
}
Putting It All Together: A Mini Project
Let’s build a simple “About Me” page to apply what we’ve learned. We’ll create an HTML structure and style it with CSS.
Step 1: HTML Structure (index.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>About Me</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<header class="header">
<h1>Jane Doe</h1>
<p class="tagline">Web Developer & Coffee Enthusiast</p>
</header>
<section class="bio">
<h2>About Me</h2>
<p>Hi! I'm Jane, a beginner web developer passionate about creating beautiful, user-friendly websites. When I'm not coding, you can find me hiking or trying new coffee shops.</p>
<h3>My Skills</h3>
<ul class="skills">
<li>HTML</li>
<li>CSS</li>
<li>JavaScript (learning!)</li>
</ul>
</section>
<footer class="footer">
<p>Contact: [email protected]</p>
</footer>
</div>
</body>
</html>
Step 2: CSS Styling (styles.css)
/* Base styles for the page */
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
margin: 0;
padding: 0;
background-color: #f0f4f8;
color: #333;
}
/* Container to center content */
.container {
width: 80%;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
/* Header styles */
.header {
text-align: center;
padding: 40px 0;
background-color: #2c3e50;
color: white;
border-radius: 8px; /* Rounded corners */
margin-bottom: 30px;
}
.header h1 {
margin: 0;
font-size: 2.5rem;
}
.tagline {
font-style: italic;
color: #bdc3c7;
margin-top: 5px;
}
/* Bio section */
.bio {
background-color: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* Subtle shadow */
}
.bio h2 {
color: #2980b9;
border-bottom: 2px solid #ecf0f1;
padding-bottom: 10px;
}
/* Skills list */
.skills {
list-style-type: none; /* Remove default bullets */
padding: 0;
}
.skills li {
display: inline-block;
background-color: #3498db;
color: white;
padding: 8px 15px;
margin: 5px;
border-radius: 20px; /* Pill-shaped */
}
/* Footer */
.footer {
text-align: center;
margin-top: 30px;
color: #7f8c8d;
font-size: 0.9rem;
}
Result:
When you open index.html, you’ll see a clean, styled page with:
- A dark header with centered text.
- A white bio section with a shadow and rounded corners.
- Skills listed as pill-shaped tags.
- A centered layout on the page.
Common Mistakes to Avoid
Even beginners can write better CSS by avoiding these pitfalls:
- Typos: Missing semicolons (
;), misspelled properties (e.g.,font-colourinstead ofcolor), or incorrect selectors. - Forgetting to Link CSS: Double-check the
hrefin the<link>tag (e.g.,styles.cssvs.style.css). - Overusing
!important: This overrides all other styles and makes debugging hard. Use specificity instead. - Ignoring the Box Model: Forgetting that padding and borders add to an element’s total width/height. Use
box-sizing: border-boxto include padding/borders in the defined width (advanced tip!).
Next Steps
You now have the basics of CSS! Here’s what to learn next:
- Flexbox: A powerful layout model for aligning items in rows/columns.
- CSS Grid: For 2D layouts (rows and columns).
- Responsive Design: Use media queries to make pages look good on mobile, tablet, and desktop.
- CSS Variables: Reuse values (e.g.,
--primary-color: blue) for consistency. - Frameworks: Try Bootstrap or Tailwind CSS to speed up styling.
Reference
- MDN Web Docs: The best CSS reference (developer.mozilla.org/en-US/docs/Web/CSS).
- CSS-Tricks: Tutorials and guides (css-tricks.com).
- Google Fonts: Free, easy-to-use fonts (fonts.google.com).
Congratulations! You’ve taken your first steps into CSS. Remember, practice is key—experiment with styles, break things, and rebuild them. Happy styling! 🚀