Selectors, Properties, and Values in CSS
Tags: webdev, css, beginners
Published: 2024-04-09 15:12:01




![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pg3vj609o18lfzsnhdft.jpg)

Would you ever visit a website that was difficult to navigate, looked bland, and didn't adapt to your phone screen? Of course not!  Creating engaging and user-friendly websites requires a powerful tool called CSS.

For starters, CSS stands for Cascading Style Sheets, it works hand-in-hand with HTML, the building block language of web pages, to define how those pages are presented on a screen.

CSS acts as the designer, taking that structure and breathing life into it with styles like colors, fonts, and layouts.  By mastering the fundamentals of CSS - selectors, properties, and values - you gain the ability to transform a basic webpage into something beautiful, engaging, and user-friendly.

Here's why understanding these core concepts is crucial:


- Separation of Concerns: CSS keeps your HTML clean and focused on content. You can style multiple pages with a single CSS file, promoting organization and maintainability.
- Customization Power: CSS offers a vast array of options to personalize your website. From subtle tweaks to complete visual overhauls, CSS grants you creative control.
- Responsive Design: In today's world of diverse screen sizes and devices, CSS empowers you to create websites that adapt and look great on any platform.


## Selectors: Targeting the Elements You Want to Style

Imagine you're a stylist working on a fashion show. You don't have to style every single piece of clothing the same way, right? CSS selectors work in a similar fashion. They act like your instructions to the web browser, telling it exactly which elements on a webpage to style.

Here's a breakdown of the different types of selectors:

**Element Selectors**
These are the building blocks. They target specific HTML elements by their name, like h1 for headings, p for paragraphs, or div for generic containers.

Example: Main HTML

```HTML
<h1>Jennifer’s Profile!</h1>
<p>I’m a Web designer and Writer </p>

```


CSS

```CSS
h1 {
  color: blue;
  font-size: 2em;
}

p {
  color: black;
  line-height: 1.5;
}

```

In this example, the `h1` selector targets all `h1` elements on the html page, turning them blue and making them larger. The `p` selector styles all paragraphs with black text and increased line spacing.


## Class Selectors: Adding Specificity

Think of classes like labels on your clothes. You can use the same class to style multiple elements in a similar way.  The class selector is denoted by a period (.) followed by the class name.

**Example:**

```CSS
.heading {
  color: blue;
  font-size: 2em;
}

.highlight {
  color: red;
  font-weight: bold;
}

```

Here, both the `h1` and `p` elements have classes assigned. The `.heading` class styles them with blue text and a larger size, while the `.highlight` class makes the paragraph red and bold.



## ID Selectors: Unique and Powerful

Imagine an ID tag as a unique identification mark for a specific element on the page.  An ID selector, denoted by a hash symbol (#) followed by the ID name, targets only that single element.

**Example:**


```CSS
#banner {
  color: green;
  text-align: center;
}

```
The `#banner` selector styles only the `h1` element with the ID "banner," making it green and centered on the page.


## Descendant Selectors: Reaching Deeper

Let's say you want to style only the list items `li` that are nested within a specific navigation menu `nav`. Descendant selectors allow you to target elements based on their relationship in the HTML structure. You can achieve this by combining selectors separated by spaces.

**Example:**

HTML

```HTML
<nav>
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
  </ul>
</nav>

```


CSS
```CSS
nav ul li {
  font-weight: bold;
}

```

This code targets only the `li `elements that are descendants of a <nav> element containing a `ul`.  Here, the list items become bold.



## Properties: The Styles You Can Apply

Selectors help you target specific elements on your webpage, but what about actually making those elements look a certain way? That's where CSS properties come in!  Imagine them as the tools in your stylist's toolbox -  each property lets you control a different aspect of an element's appearance.

CSS properties define the visual characteristics of your targeted elements.  They come in a wide variety, allowing you to control things like font styles, backgrounds, borders, spacing, and more.


## Essential Properties for Every Stylist

Let's explore some of the most common CSS properties that every web developer should know:

**Font Properties**

- font-family: This property lets you specify the font used for your text.
- font-size: Adjust the size of your text with this property.
- color: Define the text color using color names (e.g., "red", "blue") or hex codes (e.g., "#FF0000").

Code Example:

```HTML
<h1>This is a heading</h1>
<p>This is a paragraph.</p>

```

CSS
```CSS
h1 {
  font-family: Arial, sans-serif;  /* Specify a fallback font */
  font-size: 1.5em;
  color: #333;  /* Dark gray */
}

p {
  font-family: Georgia, serif;
  font-size: 1em;
  color: black;
}

```
In this example, the `h1` elements have a larger size, Arial font (or a similar sans-serif font if Arial is unavailable), and a dark gray color. Paragraphs use a Georgia font (or a similar serif font as a fallback), are slightly smaller, and have standard black text.

**Background Properties**

- background-color: Set the background color of your element.
- background-image: Define an image to be used as the element's background.

Example:

```HTML
<div class="banner"></div>

```

CSS
```CSS
.banner {
  background-color: lightblue;
  background-image: url("banner.jpg"); /* Path to your image */
  background-repeat: no-repeat;  /* Prevent image from tiling */
  background-position: center;  /* Center the image */
}

```

This code creates a blue banner with a centered background image from "banner.jpg" that won't repeat itself across the element.

**Border Properties**

- border-style: Define the style of the border (e.g., "solid", "dashed", "dotted").
- border-width: Set the thickness of the border in pixels.
- border-color: Specify the color of the border.

Example:

```HTML
<p class="important">This is important information.</p>

```

CSS
```CSS
.important {
  border: 2px solid red;
}
```
This styles the paragraph with a red, solid border that's 2 pixels wide.


**Margin & Padding Properties**

- margin: Control the spacing around an element outside its borders.
- padding: Set the spacing between the element's border and its content.

Example:

```HTML
<div class="content">Jennifer profile</div>

```

CSS
```CSS
.content {
  margin: 20px; 
  padding: 10px;  /* 10px of space between border and content */
}
```

This creates a content area with 20px of space around it and 10px of padding inside its borders.


As you progress in your CSS journey, you'll encounter a vast array of properties that offer even more control over the look and feel of your webpages.  

Here are a few examples:

- display: This property allows you to define how an element is displayed (e.g., block, inline, none).
- flexbox: Flexbox is a powerful layout model that makes arranging elements on a page more flexible and responsive.



## Values: The Options for Each Property

We've explored selectors to target elements and properties to define their styles. But what brings it all together? That's where CSS property values come in! These values act like the paint on your stylist's palette -  they bring your property choices to life and create the visual effects you desire.

**Unveiling the Power of Values**
CSS property values specify the exact characteristics applied by a property.  The value options vary depending on the property itself.  For example, the color property can accept color keywords like "red" or specific hex codes like "#FF0000" to define the text color.

**A World of Value Types**
Let's delve into some of the most common value types used in CSS:

**Colors**

- Keywords: Basic color names like "red", "blue", "green", etc. are a convenient option.
- Hexadecimal Codes: These codes (e.g., #FF0000 for red) offer more precise color control.

**Example:**

```CSS
h1 {
  color: red;
}

h2 {
  color: #00FF00; /* Green with hex code */
}

```

In this example, the `h1` elements are red, while the `h2` elements are a specific shade of green.


**Units**
Many properties like font-size, margin, and padding require units to specify the measurement. Common units include:

- Pixels (px): The most basic unit, defining a fixed size.
- Percentages (%): Relative values based on the element's parent container.
- em & rem: These units are relative to the font size of the element or its root element, respectively.

Example:



```CSS
p {
  font-size: 16px; 
  margin: 10%; 
}

h3 {
  font-size: 1.2em;
}

```

Here, the paragraph text has a fixed size of 16 pixels, with a 10% margin relative to its parent container. The `h3` elements have a font size 1.2 times larger than their own font size.

**Font Families**
The font-family property lets you specify the desired font for your text. You can list multiple fonts separated by commas, with the browser choosing the first available option.

Example:


```HTML

body {
  font-family: Arial, sans-serif;  /* Arial or a similar font */
}

```
This code sets the default font for the entire webpage body to Arial, or a similar sans-serif font if Arial is unavailable.


**Image URLs**
The background-image property allows you to reference an image file to be used as an element's background. You can specify the path to the image file.

**Example:**

```CSS
.banner {
  background-image: url("hero.jpg");
}
```
This code sets the background of the element with the class ".banner" to the image "hero.jpg".



## Putting It All Together: Practical Example
We've explored the building blocks - selectors, properties, and values. Now, let's see them work together to transform a basic webpage into something visually appealing!


Here's an example combining selectors, properties, and values:


For the structure, lets use a `h1`, `p`, and `a` link tag button to illustrate. 

```HTML
 <h1>My Awesome Profile</h1>
 <p>Name: Jennifer Chuks.</p>
 <p>D.O.B: 06 - 06 - 1995</p>
 <p>Occupation: Web Developer.</p>
 <a href="#">Hire Me</a>
```

Now, lets style this.

```CSS
/* Target the heading (H1) */
h1 {
  font-family: Arial, sans-serif;
  color: #333;
  font-size: 2em;
  text-align: center;  /* Center the text */
  margin-bottom: 20px; /* Add space below the heading */
}

/* Style all paragraphs (P) */
p {
  font-size: 1em;
  line-height: 1.5;  /* Increase line spacing for readability */
  margin-bottom: 10px; /* Add space between paragraphs */
}

/* Style anchor tags (A) for links */
a {
  color: blue;
  text-decoration: none; /* Remove underline from links */
  font-weight: bold; /* Make links bolder */
}

/* Style links on hover (when the mouse is over them) */
a:hover {
  color: #000;  /* Change link color on hover */
}
```

This code styles the `h1` element with a large, centered heading, the paragraphs with improved readability, and the links with a blue color and bold text. The hover effect adds a subtle visual cue when the user interacts with the link.

The result

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uk4r9npa9bplzkno367m.png)



By following these practices, you can write well-structured and maintainable CSS that keeps your webpages looking great and evolving effortlessly.

This concludes our exploration of the fundamentals of CSS!  Remember, mastering selectors, properties, and values unlocks a world of creative possibilities for designing and styling your webpages.  So, keep practicing, experiment, and unleash your inner web stylist!