CSS - Display Property: Your Gateway to Visual Magic!

Hello there, future CSS wizards! ? I'm thrilled to embark on this journey with you as we explore the fascinating world of the CSS display property. As someone who's been teaching CSS for over a decade, I can assure you that mastering this property is like unlocking a treasure chest of web design possibilities. So, let's dive in!

CSS - Display

What is the Display Property?

Before we get into the nitty-gritty, let's understand what the display property actually does. In simple terms, it controls how an element is displayed on a web page. Think of it as the director of a play, telling each actor (element) how to behave on stage (your web page).

Possible Values

The display property is like a Swiss Army knife - it has many tools (values) for different situations. Here's a table of the most common values we'll be discussing:

Value Description
inline Displays an element as an inline element (like <span>)
block Displays an element as a block element (like <div>)
inline-block Displays an element as an inline-level block container
none The element is completely removed from the document
flex Displays an element as a block-level flex container
inline-flex Displays an element as an inline-level flex container
grid Displays an element as a block-level grid container
inline-grid Displays an element as an inline-level grid container
table Let the element behave like a <table> element
list-item Let the element behave like a <li> element

Applies to

The display property applies to all HTML elements. Yes, you heard that right - all of them! From humble <span>s to mighty <div>s, every element can be influenced by this powerful property.

DOM Syntax

When working with JavaScript and the Document Object Model (DOM), you can manipulate the display property like this:

element.style.display = "value";

For example:

document.getElementById("myElement").style.display = "none";

This would hide the element with the ID "myElement". Magic, right?

CSS display - inline Value

Let's start with the inline value. This is the default value for elements like <span>, <a>, and <img>.

<style>
    .inline-element {
        display: inline;
        background-color: yellow;
        padding: 5px;
    }
</style>

<p>This is a paragraph with <span class="inline-element">an inline element</span> inside it.</p>

In this example, the <span> element will flow with the text, not starting on a new line. It's like a word in a sentence - it doesn't disrupt the flow.

CSS display - block Value

Next up is the block value. This is the default for elements like <div>, <p>, and <h1> to <h6>.

<style>
    .block-element {
        display: block;
        background-color: lightblue;
        padding: 10px;
        margin: 10px 0;
    }
</style>

<div class="block-element">This is a block element.</div>
<div class="block-element">This is another block element.</div>

Block elements start on a new line and stretch out to the full width available. They're like paragraphs in a book - each one starts on a new line.

CSS display - inline-block Value

The inline-block value is like a hybrid - it combines features of both inline and block.

<style>
    .inline-block-element {
        display: inline-block;
        width: 100px;
        height: 100px;
        background-color: lightgreen;
        margin: 5px;
    }
</style>

<div class="inline-block-element"></div>
<div class="inline-block-element"></div>
<div class="inline-block-element"></div>

These elements will sit next to each other (like inline), but you can set width and height on them (like block). It's perfect for creating grid-like layouts without using actual grid or flex.

CSS display - none Value

The none value is like an invisibility cloak for your elements.

<style>
    .hidden {
        display: none;
    }
</style>

<p>You can see this paragraph.</p>
<p class="hidden">But you can't see this one!</p>

Elements with display: none are completely removed from the layout. It's as if they don't exist on the page at all.

CSS display - With table Values

CSS can make elements behave like table elements, even if they're not actual <table> tags.

<style>
    .table {
        display: table;
        width: 100%;
        border-collapse: collapse;
    }
    .table-row {
        display: table-row;
    }
    .table-cell {
        display: table-cell;
        border: 1px solid black;
        padding: 5px;
    }
</style>

<div class="table">
    <div class="table-row">
        <div class="table-cell">Cell 1</div>
        <div class="table-cell">Cell 2</div>
    </div>
    <div class="table-row">
        <div class="table-cell">Cell 3</div>
        <div class="table-cell">Cell 4</div>
    </div>
</div>

This creates a table-like structure without using actual table elements. It's great for creating layouts that need to behave like tables but with more flexibility.

CSS display - flex Value

Flexbox is a powerful layout tool, and it starts with display: flex.

<style>
    .flex-container {
        display: flex;
        justify-content: space-around;
        background-color: lightgray;
    }
    .flex-item {
        background-color: white;
        margin: 10px;
        padding: 20px;
    }
</style>

<div class="flex-container">
    <div class="flex-item">Flex Item 1</div>
    <div class="flex-item">Flex Item 2</div>
    <div class="flex-item">Flex Item 3</div>
</div>

This creates a flexible container with items that can be easily aligned and distributed. It's like having a bunch of gymnasts that can stretch and shrink to fit their space perfectly.

CSS display - inline-flex Value

inline-flex is similar to flex, but the container itself behaves like an inline element.

<style>
    .inline-flex-container {
        display: inline-flex;
        background-color: lightpink;
    }
    .flex-item {
        margin: 5px;
        padding: 10px;
        background-color: white;
    }
</style>

<div class="inline-flex-container">
    <div class="flex-item">Item 1</div>
    <div class="flex-item">Item 2</div>
</div>
<div class="inline-flex-container">
    <div class="flex-item">Item 3</div>
    <div class="flex-item">Item 4</div>
</div>

This allows you to have multiple flex containers on the same line, which can be useful for creating complex layouts.

CSS display - grid Value

Grid is another powerful layout tool, initiated with display: grid.

<style>
    .grid-container {
        display: grid;
        grid-template-columns: auto auto auto;
        gap: 10px;
        background-color: lightblue;
        padding: 10px;
    }
    .grid-item {
        background-color: white;
        padding: 20px;
        text-align: center;
    }
</style>

<div class="grid-container">
    <div class="grid-item">1</div>
    <div class="grid-item">2</div>
    <div class="grid-item">3</div>
    <div class="grid-item">4</div>
    <div class="grid-item">5</div>
    <div class="grid-item">6</div>
</div>

Grid allows you to create complex layouts with rows and columns. It's like having a perfect spreadsheet for your elements!

CSS display - inline-grid Value

Similar to inline-flex, inline-grid creates a grid container that behaves like an inline element.

<style>
    .inline-grid-container {
        display: inline-grid;
        grid-template-columns: auto auto;
        gap: 10px;
        background-color: lightyellow;
        padding: 10px;
    }
    .grid-item {
        background-color: white;
        padding: 10px;
        text-align: center;
    }
</style>

<div class="inline-grid-container">
    <div class="grid-item">A</div>
    <div class="grid-item">B</div>
</div>
<div class="inline-grid-container">
    <div class="grid-item">C</div>
    <div class="grid-item">D</div>
</div>

This allows you to have multiple grid containers on the same line, opening up even more layout possibilities.

CSS display - list-item Value

Finally, we have list-item, which makes an element behave like a list item.

<style>
    .custom-list {
        display: list-item;
        list-style-type: square;
        margin-left: 20px;
    }
</style>

<div class="custom-list">This is a custom list item</div>
<div class="custom-list">This is another custom list item</div>

This is useful when you want to create list-like structures without using actual <ul> or <ol> elements.

And there you have it, folks! We've journeyed through the land of display properties, from the humble inline to the mighty grid. Remember, the key to mastering CSS is practice. So go forth and experiment with these properties. Who knows? You might just create the next big thing in web design!

Happy coding, and may your layouts always be pixel-perfect! ??

Credits: Image by storyset