Multi-column and Utilities

Back

Loading concept...

CSS Multi-column & Utilities: Your Magic Newspaper Layout! 📰

Imagine you’re reading a newspaper. Notice how the words flow in neat columns, side by side? That’s exactly what CSS multi-column does for your web pages! Let’s become layout wizards together.


🏛️ The Newspaper Metaphor

Think of your webpage text like water in a pitcher. Without columns, water spreads wide and flat. With columns, you pour that water into multiple glasses side by side—neat, organized, and easy to drink (read)!


📚 Multi-column Layout

Multi-column layout splits your content into multiple vertical columns, just like a newspaper or magazine.

The Magic Properties

column-count – How many columns do you want?

.newspaper {
  column-count: 3;
}

column-width – How wide should each column be?

.newspaper {
  column-width: 200px;
}

Pro Tip: Use columns shorthand for both!

.newspaper {
  columns: 3 200px;
}

Real-Life Example

<div class="article">
  Long text flows here...
</div>
.article {
  columns: 2;
}

Your text automatically flows from the bottom of column 1 to the top of column 2. Magic! ✨


🔲 column-gap Property

The gap is the breathing room between your columns. Without it, columns would squish together like sardines!

.newspaper {
  column-count: 3;
  column-gap: 40px;
}

What Happens?

  • Small gap (10px): Columns feel crowded
  • Medium gap (30px): Comfortable reading
  • Large gap (60px): Spacious, luxurious feel
graph TD A["column-gap: 20px"] --> B["Column 1"] A --> C["← 20px →"] A --> D["Column 2"]

📏 column-rule Property

A column-rule is a decorative line between columns—like the lines in a notebook separating sections.

.newspaper {
  column-count: 3;
  column-rule: 2px solid #667eea;
}

Breaking It Down

The column-rule is shorthand for:

  • column-rule-width: How thick? (2px)
  • column-rule-style: What kind? (solid, dashed, dotted)
  • column-rule-color: What color? (#667eea)
.fancy-columns {
  column-rule-width: 3px;
  column-rule-style: dashed;
  column-rule-color: coral;
}

🔄 The all Property

Imagine having a magic eraser that resets ALL styles at once. That’s all!

What Does It Do?

The all property resets every CSS property (except direction and unicode-bidi) to a specific value.

.fresh-start {
  all: unset;
}

The Three Magic Words

Value What It Does
initial Resets to CSS default values
inherit Copies all styles from parent
unset Inherit if inheritable, else initial

When to Use?

Perfect for cleaning up stubborn styles:

.clean-button {
  all: unset;
  cursor: pointer;
  padding: 10px 20px;
}

🎨 appearance Property

The appearance property controls whether an element looks like a native browser widget or your custom design.

The Problem

Browsers style buttons, checkboxes, and inputs with their own look. Sometimes you want YOUR look!

The Solution

.custom-button {
  appearance: none;
  /* Now apply your styles! */
  background: #667eea;
  border-radius: 8px;
}

Common Values

Value Effect
none Remove all browser styling
auto Let browser decide (default)

Real Example: Custom Checkbox

input[type="checkbox"] {
  appearance: none;
  width: 20px;
  height: 20px;
  border: 2px solid #667eea;
  border-radius: 4px;
}

🏷️ attr() Function

The attr() function reads an HTML attribute and uses it in CSS. It’s like CSS reading notes you left in HTML!

Basic Usage

<a href="example.com" data-tooltip="Visit">
  Link
</a>
a::after {
  content: attr(data-tooltip);
}

This displays “Visit” after the link!

Practical Example: Show Links in Print

@media print {
  a::after {
    content: " (" attr(href) ")";
  }
}

When printing, links show their URL: Google (https://google.com)


🔗 url() Function

The url() function loads external resources like images, fonts, or icons.

Loading Images

.hero {
  background-image: url('hero.jpg');
}

Loading Fonts

@font-face {
  font-family: 'MyFont';
  src: url('myfont.woff2');
}

Path Types

Type Example
Relative url('img/photo.jpg')
Absolute url('https://site.com/img.png')
Data URI url('data:image/svg+xml,...')

Pro Tip

Always use quotes for paths with special characters!

/* Safe */
url('my image.jpg')

/* Risky */
url(my image.jpg)

⚡ will-change Property

The will-change property is like telling the browser “Hey, get ready! This element is about to move or change!”

Why It Exists

Browsers can optimize animations better if they know what’s coming.

.animated-box {
  will-change: transform;
}

.animated-box:hover {
  transform: scale(1.1);
}

Common Values

Value Prepares For
transform Movement, rotation, scaling
opacity Fading in/out
scroll-position Scrolling changes

⚠️ Important Rules

  1. Don’t overuse it! Using will-change on everything wastes memory
  2. Remove after animation when possible
  3. Use sparingly – only on elements that actually animate
/* Good: Only on hover */
.card:hover {
  will-change: transform;
}

/* Bad: Always on */
* {
  will-change: transform, opacity;
}

🎯 Quick Summary

Property Purpose Example
columns Create newspaper layout columns: 3
column-gap Space between columns column-gap: 30px
column-rule Line between columns column-rule: 1px solid gray
all Reset all properties all: unset
appearance Remove browser styling appearance: none
attr() Read HTML attributes content: attr(data-tip)
url() Load external files url('image.png')
will-change Optimize animations will-change: transform

🚀 You Did It!

You now understand how to:

  • ✅ Create beautiful multi-column layouts
  • ✅ Control spacing with column-gap
  • ✅ Add decorative lines with column-rule
  • ✅ Reset styles with all
  • ✅ Remove browser styling with appearance
  • ✅ Read HTML data with attr()
  • ✅ Load resources with url()
  • ✅ Optimize animations with will-change

Go forth and create amazing layouts! 🎉

Loading story...

Story - Premium Content

Please sign in to view this story and start learning.

Upgrade to Premium to unlock full access to all stories.

Stay Tuned!

Story is coming soon.

Story Preview

Story - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.