CSS Questions


Beginners To Experts


The site is under development.

CSS Questions

<style>
  .relative-box {
    position: relative; /* Element is positioned relative to its normal position */
    top: 20px;          /* Moves the element 20px down */
    left: 30px;         /* Moves the element 30px to the right */
    background: lightblue;
    padding: 10px;
  }

  .absolute-box {
    position: absolute; /* Element is positioned relative to its nearest positioned ancestor */
    top: 50px;          /* Moves the element 50px down from ancestor */
    left: 40px;         /* Moves the element 40px to the right from ancestor */
    background: lightgreen;
    padding: 10px;
  }
</style>
<div class="relative-box">Relative Box</div>
<div class="absolute-box">Absolute Box</div>
      

<style>
  .center-div {
    position: absolute; /* Absolutely position the element */
    top: 50%;            /* Move it 50% down */
    left: 50%;           /* Move it 50% right */
    transform: translate(-50%, -50%); /* Shift back by half its own size */
    background: coral;
    padding: 20px;
  }
</style>
<div class="center-div">Centered Div</div>
      

<style>
  body {
    background: lightblue; /* Default background */
  }

  @media (max-width: 600px) {
    body {
      background: lightcoral; /* Changes background on small screens */
    }
  }
</style>
<p>Resize the screen to see the background color change.</p>
      

<style>
  .box {
    width: 200px;         /* Content width */
    padding: 20px;        /* Space inside the box */
    border: 5px solid black; /* Border around the box */
    margin: 10px;         /* Space outside the box */
    background: lightyellow;
  }
</style>
<div class="box">Box Model</div>
      

<style>
  div {
    color: blue;         /* Low specificity */
  }

  .class {
    color: green;        /* Medium specificity */
  }

  #id {
    color: red;          /* High specificity */
  }
</style>
<div id="id" class="class">Specificity Example</div>
      

<style>
  img {
    max-width: 100%;   /* Image scales down if needed */
    height: auto;      /* Maintain aspect ratio */
  }
</style>
<img src="https://via.placeholder.com/600x400" alt="Responsive Image">
      

<style>
  .flex-center {
    display: flex;               /* Enable flexbox */
    justify-content: center;     /* Center horizontally */
    align-items: center;         /* Center vertically */
    height: 100vh;
    background: lightgray;
  }
</style>
<div class="flex-center">
  <p>Centered with Flexbox</p>
</div>
      

<style>
  .transition-box {
    width: 100px;
    height: 100px;
    background: skyblue;
    transition: background 0.5s; /* Smooth background change */
  }

  .transition-box:hover {
    background: tomato;          /* Changes on hover */
  }
</style>
<div class="transition-box"></div>
      

<style>
  .animated-box {
    width: 50px;
    height: 50px;
    background: purple;
    animation: moveRight 2s infinite; /* Use animation rule */
  }

  @keyframes moveRight {
    0% { transform: translateX(0); }
    100% { transform: translateX(200px); }
  }
</style>
<div class="animated-box"></div>
      

<style>
  .box1 {
    position: absolute;
    width: 100px;
    height: 100px;
    background: red;
    z-index: 1; /* Lower index */
  }

  .box2 {
    position: absolute;
    top: 30px;
    left: 30px;
    width: 100px;
    height: 100px;
    background: blue;
    z-index: 2; /* Higher index, appears on top */
  }
</style>
<div class="box1"></div>
<div class="box2"></div>
      

<style>
  a {
    color: blue;           /* Default link color */
  }

  a:hover {
    color: red;            /* Change color on hover - pseudo-class */
  }

  p:first-child {
    font-weight: bold;     /* First paragraph in a container */
  }
</style>
<a href="#">Hover over me</a>
<p>First paragraph</p>
<p>Second paragraph</p>
      

<style>
  .grid-container {
    display: grid;                  /* Enable CSS Grid */
    grid-template-columns: repeat(3, 1fr); /* 3 equal columns */
    gap: 10px;                     /* Gap between grid items */
  }

  .grid-item {
    background: lightcoral;
    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>
      

<style>
  html {
    font-size: 16px;          /* Base font size */
  }

  .em-example {
    font-size: 2em;           /* 2 times the font size of parent */
  }

  .rem-example {
    font-size: 2rem;          /* 2 times the root font size (html) */
  }
</style>
<div style="font-size: 20px;">
  <p class="em-example">This text is 2em (40px)</p>
</div>
<p class="rem-example">This text is 2rem (32px)</p>
      

<style>
  .float-box {
    float: left;             /* Float element to the left */
    width: 150px;
    height: 100px;
    background: lightblue;
    margin-right: 10px;
  }

  .container {
    background: lightgray;
    overflow: auto;          /* Clear floats */
  }
</style>
<div class="container">
  <div class="float-box">Floated Box</div>
  <p>Text flows next to the floated box.</p>
</div>
      

<style>
  .block {
    display: block;          /* Default block element */
    background: lightcoral;
    margin-bottom: 10px;
  }

  .inline {
    display: inline;         /* Inline element */
    background: lightgreen;
  }

  .inline-block {
    display: inline-block;   /* Inline element but can set width/height */
    background: lightblue;
    width: 100px;
    height: 30px;
  }
</style>
<div class="block">Block element</div>
<span class="inline">Inline element</span>
<span class="inline-block">Inline-block element</span>
      

<style>
  .float-left {
    float: left;
    width: 100px;
    height: 50px;
    background: lightcoral;
    margin-right: 10px;
  }

  .clearfix::after {
    content: "";           /* Empty content */
    display: block;        /* Make it block */
    clear: both;           /* Clear floats */
  }
</style>
<div class="clearfix">
  <div class="float-left">Floated Left</div>
  <p>Text that clears floats.</p>
</div>
      

<style>
  .box {
    background: lightblue;
    padding: 20px;     /* Space inside the element's border */
    margin: 20px;      /* Space outside the element's border */
  }
</style>
<div class="box">Padding vs Margin</div>
      

<style>
  .container {
    width: 200px;
    height: 100px;
    border: 1px solid black;
    overflow: auto;     /* Add scrollbar if content overflows */
  }

  .content {
    width: 300px;
    height: 150px;
    background: lightcoral;
  }
</style>
<div class="container">
  <div class="content">Content bigger than container</div>
</div>
      

<style>
  .parent {
    display: flex;            /* Enable flexbox */
    justify-content: center;  /* Center horizontally */
    align-items: center;      /* Center vertically */
    height: 200px;
    border: 1px solid black;
  }

  .child {
    background: lightgreen;
    padding: 20px;
  }
</style>
<div class="parent">
  <div class="child">Centered Box</div>
</div>
      

<style>
  body {
    background: lightgray;
  }

  @media (max-width: 600px) {
    body {
      background: lightblue;  /* Change background on small screens */
    }
  }
</style>
<body>
  Resize the browser window to less than 600px width to see the background color change.
</body>
      

<style>
  .content-box {
    box-sizing: content-box;    /* Default - width and height include only content */
    width: 200px;
    padding: 20px;
    border: 5px solid black;
    background: lightcoral;
    margin-bottom: 20px;
  }

  .border-box {
    box-sizing: border-box;     /* width and height include padding and border */
    width: 200px;
    padding: 20px;
    border: 5px solid black;
    background: lightgreen;
  }
</style>

<div class="content-box">Content-box</div>
<div class="border-box">Border-box</div>
      

<style>
  :root {
    --main-color: #4CAF50;       /* Define variable */
    --padding: 15px;
  }

  .box {
    background-color: var(--main-color);  /* Use variable */
    padding: var(--padding);
    color: white;
  }
</style>

<div class="box">Box with CSS Variables</div>
      

<style>
  .relative {
    position: relative;     /* Positioned relative to its normal position */
    top: 10px;
    left: 10px;
    background: lightblue;
    margin-bottom: 10px;
  }

  .absolute {
    position: absolute;     /* Positioned relative to nearest positioned ancestor */
    top: 10px;
    right: 10px;
    background: lightgreen;
    width: 150px;
    height: 50px;
  }

  .fixed {
    position: fixed;        /* Fixed relative to the viewport */
    bottom: 10px;
    right: 10px;
    background: lightcoral;
    width: 150px;
    height: 50px;
  }

  .sticky {
    position: sticky;       /* Sticks to a position when scrolling */
    top: 0;
    background: lightyellow;
    padding: 10px;
  }
</style>

<div class="sticky">Sticky Header</div>
<div class="relative">Relative Box</div>
<div class="absolute">Absolute Box</div>
<div class="fixed">Fixed Box</div>
      

<style>
  .flex-container {
    display: flex;              /* Enable flexbox */
    flex-wrap: wrap;            /* Allow wrapping on small screens */
    gap: 10px;                  /* Space between items */
  }

  .flex-item {
    background: lightcoral;
    flex: 1 1 200px;            /* Grow, shrink, basis 200px */
    padding: 20px;
    text-align: center;
  }
</style>

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

<style>
  @media print {
    body {
      font-size: 12pt;        /* Styling for print */
      color: black;
      background: white;
    }
  }

  @media screen {
    body {
      font-size: 16px;        /* Styling for screens */
      background: lightgray;
    }
  }
</style>

<body>
  Content styled differently for screen and print media.
</body>
      

/* Optimization Tips */
/* 1. Minimize HTTP requests by combining CSS files */
/* 2. Remove unused CSS rules */
/* 3. Use shorthand properties */
/* 4. Avoid overly specific selectors */
/* 5. Use CSS variables to reduce repetition */
/* 6. Use minified CSS in production */
      

/* Specificity is calculated based on selector types: */
/* Inline styles (style="") => 1000 */
/* IDs => 100 */
/* Classes, attributes, pseudo-classes => 10 */
/* Elements, pseudo-elements => 1 */

/* Example: */
#header .nav li a {
  /* Specificity: ID(1) + class(1) + element(2) = 100 + 10 + 2 = 112 */
  color: blue;
}
      

/* Relative units depend on other values (like parent or root font-size): */
/* em, rem, %, vw, vh */

/* Absolute units are fixed size and do not scale: */
/* px, cm, mm, in, pt */

/* Example: */
.container {
  width: 50%;     /* 50% of parent width - relative */
  font-size: 1.2rem; /* relative to root font size */
}

.box {
  width: 300px;   /* fixed 300 pixels - absolute */
}
      

<style>
  a:hover {
    color: red;      /* Changes color when mouse hovers */
  }

  input:focus {
    border-color: blue;   /* When input is focused */
  }

  li:first-child {
    font-weight: bold;    /* First list item */
  }

  p::first-letter {
    font-size: 200%;      /* First letter of paragraph */
  }
</style>
      

<style>
  .grid-container {
    display: grid;                    /* Enable grid layout */
    grid-template-columns: repeat(3, 1fr); /* 3 equal columns */
    gap: 10px;                       /* Gap between grid items */
  }

  .grid-item {
    background-color: lightblue;
    padding: 20px;
    text-align: center;
  }
</style>

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

<style>
  .parent {
    display: flex;              /* Enable flexbox */
    justify-content: center;    /* Center horizontally */
    align-items: center;        /* Center vertically */
    height: 200px;
    border: 2px solid black;
  }

  .child {
    background: lightcoral;
    padding: 20px;
    color: white;
  }
</style>

<div class="parent">
  <div class="child">Centered Box</div>
</div>
      

/* em is relative to the font-size of the parent */
/* rem is relative to the font-size of the root element (html) */

<style>
  html {
    font-size: 16px;    /* root font size */
  }
  .parent {
    font-size: 20px;    /* larger font size */
  }
  .child-em {
    font-size: 1.5em;   /* 1.5 * 20px = 30px */
  }
  .child-rem {
    font-size: 1.5rem;  /* 1.5 * 16px = 24px */
  }
</style>

<div class="parent">
  <p class="child-em">This text uses 1.5em</p>
  <p class="child-rem">This text uses 1.5rem</p>
</div>
      

/* Use this common pattern for accessible hiding */
.visually-hidden {
  position: absolute;   /* Remove from flow */
  width: 1px;           /* Very small */
  height: 1px;          /* Very small */
  padding: 0;
  margin: -1px;         /* Hide offscreen */
  overflow: hidden;     
  clip: rect(0,0,0,0);
  white-space: nowrap;  /* Prevent wrapping */
  border: 0;
}

/* Example usage: */
<button>
  Submit
  <span class="visually-hidden">form submission</span>
</button>
      

<style>
  html, body {
    height: 100%;         /* Make full height */
    margin: 0;
  }
  .wrapper {
    min-height: 100%;     /* Full page height */
    display: flex;
    flex-direction: column;
  }
  .content {
    flex: 1;              /* Take remaining space */
  }
  .footer {
    background: lightgray;
    padding: 20px;
    text-align: center;
  }
</style>

<div class="wrapper">
  <div class="content">
    Page content here
  </div>
  <footer class="footer">
    Sticky Footer
  </footer>
</div>
      

/* inline elements: flow within text, no line breaks */
/* block elements: take full width, start on new line */
/* inline-block: like inline but can have width and height */

<style>
  .inline {
    display: inline;
    background: lightblue;
    padding: 5px;
  }
  .block {
    display: block;
    background: lightgreen;
    padding: 5px;
  }
  .inline-block {
    display: inline-block;
    background: lightcoral;
    padding: 5px;
    width: 100px;
  }
</style>

<span class="inline">Inline</span>
<div class="block">Block</div>
<span class="inline-block">Inline-block</span>
      

<style>
  @media (max-width: 600px) {
    body {
      background-color: lightyellow;
    }
    .container {
      padding: 10px;
      font-size: 14px;
    }
  }
</style>
      

<style>
  li:nth-child(odd) {
    background-color: lightgray;   /* Odd list items */
  }
  li:nth-child(even) {
    background-color: lightblue;   /* Even list items */
  }
  li:nth-child(3) {
    font-weight: bold;              /* Third list item */
  }
</style>

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
</ul>
      

<style>
  .btn {
    background-color: blue;
    color: white;
    padding: 10px 20px;
    transition: background-color 0.3s ease;  /* Smooth transition */
  }
  .btn:hover {
    background-color: darkblue;               /* Change on hover */
  }
</style>

<button class="btn">Hover me</button>
      

/* Position relative: offset relative to its normal position */
/* Position absolute: positioned relative to nearest positioned ancestor */
/* Position fixed: fixed relative to viewport, stays on scroll */
/* Position sticky: toggles between relative and fixed based on scroll */

<style>
  .relative {
    position: relative;
    top: 10px;       /* Moves 10px down from normal */
    background: lightyellow;
  }
  .absolute {
    position: absolute;
    top: 20px;
    left: 20px;
    background: lightgreen;
  }
  .fixed {
    position: fixed;
    bottom: 0;
    right: 0;
    background: lightblue;
  }
  .sticky {
    position: sticky;
    top: 0;
    background: lightcoral;
  }
</style>
      

<style>
  img.responsive {
    max-width: 100%;   /* Max width is container width */
    height: auto;      /* Maintain aspect ratio */
    display: block;    /* Remove inline spacing */
  }
</style>

<div style="width: 300px; border: 1px solid #ccc;">
  <img src="image.jpg" alt="Example" class="responsive">
</div>
      

/* box-sizing controls how width and height are calculated */

<style>
  .default-box {
    width: 200px;
    padding: 20px;
    border: 10px solid black;
    box-sizing: content-box;  /* Default, width excludes padding and border */
    background-color: lightblue;
  }
  .border-box {
    width: 200px;
    padding: 20px;
    border: 10px solid black;
    box-sizing: border-box;   /* Includes padding and border in width */
    background-color: lightgreen;
  }
</style>

<div class="default-box">content-box</div>
<div class="border-box">border-box</div>
      

<style>
  .scroll-y {
    width: 300px;
    height: 150px;
    overflow-y: scroll;  /* Scroll only vertical */
    overflow-x: hidden;  /* Hide horizontal scroll */
    border: 1px solid #ccc;
  }
</style>

<div class="scroll-y">
  <p>Long content here to demonstrate vertical scrolling...</p>
  <p>More content...</p>
  <p>Keep adding content to overflow vertically.</p>
</div>
      

/* float removes element from normal flow */
/* clearfix fixes container collapsing by clearing floats */

<style>
  .container {
    border: 1px solid black;
    padding: 10px;
  }
  .float-left {
    float: left;
    width: 100px;
    height: 100px;
    background: lightcoral;
  }
  .clearfix::after {
    content: "";
    display: block;
    clear: both;  /* Clear floats */
  }
</style>

<div class="container clearfix">
  <div class="float-left">Floating Box</div>
  Text content that flows around the floated box.
</div>
      

/* z-index controls stacking order of positioned elements */
/* Higher z-index appears on top */

<style>
  .box1, .box2 {
    position: absolute;
    width: 150px;
    height: 150px;
    top: 20px;
    left: 20px;
    opacity: 0.8;
  }
  .box1 {
    background-color: red;
    z-index: 1;  /* Lower */
  }
  .box2 {
    background-color: blue;
    left: 70px;
    top: 70px;
    z-index: 2;  /* Higher, appears on top */
  }
</style>

<div class="box1">Box 1</div>
<div class="box2">Box 2</div>
      

/* CSS variables (custom properties) start with -- */

<style>
  :root {
    --main-color: #3498db;
    --padding: 15px;
  }
  .box {
    background-color: var(--main-color);
    padding: var(--padding);
    color: white;
  }
</style>

<div class="box">Box with CSS variables</div>
      

<style>
  .grid-container {
    display: grid;
    grid-template-columns: 1fr 1fr;  /* Two equal columns */
    gap: 20px;                     /* Gap between columns and rows */
    border: 1px solid #ccc;
    padding: 10px;
  }
  .grid-item {
    background: lightgray;
    padding: 20px;
    text-align: center;
  }
</style>

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

/* visibility: hidden hides element but keeps layout */
/* display: none removes element and frees space */

<style>
  .hidden {
    visibility: hidden;  /* Element hidden, space remains */
    background: lightcoral;
  }
  .none {
    display: none;       /* Element removed from flow */
  }
</style>

<div class="hidden">Invisible but space here</div>
<div class="none">Not displayed</div>
      

/* Media queries for responsive design */

<style>
  .box {
    width: 100%;
    background-color: lightblue;
    padding: 20px;
  }
  @media (max-width: 600px) {
    .box {
      background-color: lightcoral;  /* Change color on small screens */
    }
  }
</style>

<div class="box">Resize window to see effect</div>
      

/* Units: */

/* px - absolute pixels */
/* em - relative to font-size of parent */
/* rem - relative to root (html) font-size */
/* % - relative to parent element size */

<style>
  html {
    font-size: 16px;  /* Base font size */
  }
  .px {
    font-size: 20px;  /* 20 pixels */
  }
  .em {
    font-size: 1.5em; /* 1.5 times parent font size */
  }
  .rem {
    font-size: 2rem;  /* 2 times root font size (32px) */
  }
  .percent {
    width: 50%;       /* 50% of parent width */
    background: lightgreen;
  }
</style>

<div class="px">20px text</div>
<div class="em">1.5em text</div>
<div class="rem">2rem text</div>
<div class="percent">50% width box</div>
      

/* Use flexbox to center */

<style>
  .container {
    display: flex;            /* Enables flex */
    justify-content: center;  /* Horizontal center */
    align-items: center;      /* Vertical center */
    height: 200px;
    border: 1px solid black;
  }
  .box {
    width: 100px;
    height: 100px;
    background-color: lightblue;
  }
</style>

<div class="container">
  <div class="box">Centered Box</div>
</div>
      

/* Positioning types explained */

/* relative: positioned relative to its normal position */
/* absolute: positioned relative to nearest positioned ancestor */
/* fixed: positioned relative to viewport, stays on screen */
/* sticky: toggles between relative and fixed based on scroll */

<style>
  .relative {
    position: relative;
    top: 10px;  /* Moves down 10px from normal position */
    background: lightblue;
  }
  .absolute {
    position: absolute;
    top: 50px;
    left: 50px;
    background: lightgreen;
  }
  .fixed {
    position: fixed;
    bottom: 10px;
    right: 10px;
    background: lightcoral;
  }
  .sticky {
    position: sticky;
    top: 0;
    background: lightgoldenrodyellow;
  }
  .container {
    position: relative; /* Parent for absolute */
    height: 150px;
    border: 1px solid black;
  }
</style>

<div class="container">
  <div class="relative">Relative</div>
  <div class="absolute">Absolute</div>
  <div class="sticky">Sticky (scroll down)</div>
</div>
<div class="fixed">Fixed</div>
      

/* Responsive image using max-width and height auto */

<style>
  img {
    max-width: 100%;  /* Image won't exceed container width */
    height: auto;     /* Maintains aspect ratio */
    display: block;   /* Removes inline spacing */
  }
  .container {
    width: 50%;       /* Container width */
    border: 1px solid #ccc;
  }
</style>

<div class="container">
  <img src="https://via.placeholder.com/600x400" alt="Example Image" />
</div>
      

/* :hover applies styles when mouse is over an element */

<style>
  .button {
    background-color: blue;
    color: white;
    padding: 10px 20px;
    text-align: center;
    display: inline-block;
  }
  .button:hover {
    background-color: darkblue;  /* Changes on hover */
    cursor: pointer;             /* Pointer cursor */
  }
</style>

<div class="button">Hover me</div>
      

/* !important overrides other declarations */

<style>
  p {
    color: blue !important;  /* Highest priority */
  }
  .red {
    color: red;
  }
</style>

<p class="red">This text will be blue because of !important.</p>
      

/* Visually hide but keep accessible */

<style>
  .sr-only {
    position: absolute !important;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
  }
</style>

<div class="sr-only">Hidden text for screen readers</div>
      

/* Display types explained */

/* inline: flows with text, no width/height */
/* block: starts on new line, takes full width */
/* inline-block: like inline but accepts width/height */

<style>
  .inline {
    display: inline;
    background: lightcoral;
  }
  .block {
    display: block;
    background: lightblue;
  }
  .inline-block {
    display: inline-block;
    background: lightgreen;
    width: 100px;
    height: 50px;
  }
</style>

<span class="inline">Inline</span>
<div class="block">Block</div>
<span class="inline-block">Inline-block</span>
      

/* Use font-weight and font-style */

<style>
  .bold {
    font-weight: bold;  /* Makes text bold */
  }
  .italic {
    font-style: italic; /* Makes text italic */
  }
</style>

<p class="bold">This text is bold.</p>
<p class="italic">This text is italic.</p>
      

/* Linear gradient background */

<style>
  .gradient {
    background: linear-gradient(to right, red, yellow);
    width: 200px;
    height: 100px;
  }
</style>

<div class="gradient">Gradient Box</div>
      

/* CSS animation for color change */

<style>
  @keyframes colorchange {
    0% { background-color: red; }
    50% { background-color: yellow; }
    100% { background-color: red; }
  }
  .animated-box {
    width: 100px;
    height: 100px;
    animation: colorchange 3s infinite;
  }
</style>

<div class="animated-box"></div>
      

/* CSS grid with 3 equal columns */

<style>
  .grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);  /* 3 equal columns */
    gap: 10px;
  }
  .grid-item {
    background-color: lightblue;
    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>
      

/* box-sizing controls how width and height are calculated */

<style>
  .content-box {
    box-sizing: content-box; /* Default: width/height excludes padding and border */
    width: 200px;
    padding: 20px;
    border: 5px solid black;
    background-color: lightcoral;
  }
  .border-box {
    box-sizing: border-box; /* width/height includes padding and border */
    width: 200px;
    padding: 20px;
    border: 5px solid black;
    background-color: lightblue;
  }
</style>

<div class="content-box">Content-box</div>
<div class="border-box">Border-box</div>
      

/* Center a block element using margin auto */

<style>
  .centered-block {
    width: 300px;
    margin-left: auto;  /* Auto margins on left */
    margin-right: auto; /* and right centers element */
    background-color: lightgreen;
    padding: 20px;
  }
</style>

<div class="centered-block">Centered Block</div>
      

/* CSS units explanation */

/* px = fixed pixels */
/* em = relative to font-size of the parent */
/* rem = relative to font-size of the root (html) */

<style>
  html {
    font-size: 16px;
  }
  .px-text {
    font-size: 16px; /* fixed 16 pixels */
  }
  .em-text {
    font-size: 1.5em; /* 1.5 times parent's font size */
  }
  .rem-text {
    font-size: 1.5rem; /* 1.5 times root font size (24px) */
  }
</style>

<div class="px-text">16px text</div>
<div class="em-text">1.5em text</div>
<div class="rem-text">1.5rem text</div>
      

/* Make a circle using border-radius 50% */

<style>
  .circle {
    width: 100px;
    height: 100px;
    background-color: teal;
    border-radius: 50%; /* Creates a circle */
  }
</style>

<div class="circle"></div>
      

/* Simple tooltip using :hover and visibility */

<style>
  .tooltip {
    position: relative;
    display: inline-block;
    cursor: pointer;
  }
  .tooltip .tooltip-text {
    visibility: hidden;  /* Hidden by default */
    width: 120px;
    background-color: black;
    color: #fff;
    text-align: center;
    border-radius: 5px;
    padding: 5px 0;
    position: absolute;
    z-index: 1;
    bottom: 125%;  /* Position above */
    left: 50%;
    margin-left: -60px;
    opacity: 0;
    transition: opacity 0.3s;
  }
  .tooltip:hover .tooltip-text {
    visibility: visible; /* Show on hover */
    opacity: 1;
  }
</style>

<div class="tooltip">Hover me
  <span class="tooltip-text">Tooltip text</span>
</div>
      

/* visibility: hidden hides element but keeps layout */
/* display: none hides element and removes from layout */

<style>
  .visible {
    visibility: visible;
    background-color: lightgreen;
    padding: 10px;
  }
  .hidden {
    visibility: hidden; /* Hidden but space reserved */
    background-color: lightcoral;
    padding: 10px;
  }
  .none {
    display: none; /* Element removed */
  }
</style>

<div class="visible">Visible</div>
<div class="hidden">Hidden (visibility:hidden)</div>
<div class="none">Not visible (display:none)</div>
      

/* Flex container with space between items */

<style>
  .flex-container {
    display: flex;
    justify-content: space-between; /* Space between children */
    background-color: lightyellow;
    padding: 10px;
  }
  .flex-item {
    background-color: lightcoral;
    padding: 10px;
    width: 100px;
    text-align: center;
  }
</style>

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

/* min-width sets minimum element width */
/* max-width sets maximum element width */

<style>
  .box {
    width: 50%;
    min-width: 200px; /* Will never be less than 200px */
    max-width: 400px; /* Will never exceed 400px */
    background-color: lightblue;
    padding: 20px;
  }
</style>

<div class="box">Resizable Box</div>
      

/* Media query for max-width 600px */

<style>
  @media (max-width: 600px) {
    .responsive-box {
      background-color: lightcoral;
      font-size: 14px;
      padding: 10px;
    }
  }
  .responsive-box {
    background-color: lightblue;
    font-size: 18px;
    padding: 20px;
  }
</style>

<div class="responsive-box">Resize the window</div>
      

/* z-index controls stacking order of overlapping elements */

<style>
  .box1 {
    position: absolute;
    top: 20px;
    left: 20px;
    width: 100px;
    height: 100px;
    background-color: red;
    z-index: 1; /* lower stack */
  }
  .box2 {
    position: absolute;
    top: 50px;
    left: 50px;
    width: 100px;
    height: 100px;
    background-color: blue;
    z-index: 2; /* higher stack */
  }
</style>

<div class="box1"></div>
<div class="box2"></div>
      

/* CSS positioning types explained */

<style>
  .relative {
    position: relative; /* positioned relative to normal spot */
    top: 10px;
    left: 10px;
    background-color: lightblue;
    padding: 10px;
  }
  .absolute {
    position: absolute; /* positioned relative to nearest positioned ancestor */
    top: 50px;
    left: 50px;
    background-color: lightgreen;
    padding: 10px;
  }
  .fixed {
    position: fixed; /* positioned relative to viewport, stays on scroll */
    top: 10px;
    right: 10px;
    background-color: lightcoral;
    padding: 10px;
  }
  .sticky {
    position: sticky; /* toggles between relative and fixed based on scroll */
    top: 0;
    background-color: lightgoldenrodyellow;
    padding: 10px;
  }
</style>

<div class="relative">Relative</div>
<div class="absolute">Absolute</div>
<div class="fixed">Fixed</div>
<div class="sticky">Sticky (try scrolling)</div>
      

/* Float example and clearing floats */

<style>
  .float-left {
    float: left; /* floats element to left */
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    margin-right: 10px;
  }
  .float-right {
    float: right; /* floats element to right */
    width: 100px;
    height: 100px;
    background-color: lightblue;
  }
  .clearfix::after {
    content: "";
    display: table;
    clear: both; /* clears floats */
  }
</style>

<div class="clearfix">
  <div class="float-left">Float Left</div>
  <div class="float-right">Float Right</div>
</div>
      

/* Padding is space inside border, margin is space outside border */

<style>
  .box {
    background-color: lightblue;
    padding: 20px;  /* space inside */
    margin: 20px;   /* space outside */
    border: 2px solid black;
  }
</style>

<div class="box">Padding vs Margin</div>
      

/* Use visibility: hidden to hide but keep space */

<style>
  .hidden-space {
    visibility: hidden; /* invisible but occupies space */
    width: 200px;
    height: 50px;
    background-color: lightgreen;
    margin-bottom: 10px;
  }
</style>

<div class="hidden-space">Invisible but takes space</div>
<div>Next element</div>
      

/* Pseudo-classes style elements in special states */

<style>
  a:hover {
    color: red; /* when mouse is over link */
  }
  input:focus {
    border-color: blue; /* when input is focused */
  }
</style>

<a href="#">Hover over me</a><br>
<input type="text" placeholder="Focus me">
      

/* Responsive image with max-width 100% and height auto */

<style>
  img.responsive {
    max-width: 100%; /* scales down as needed */
    height: auto;    /* maintains aspect ratio */
  }
</style>

<img src="https://via.placeholder.com/600x400" alt="Responsive" class="responsive">
      

/* Differences between display types */

<style>
  .inline {
    display: inline; /* no line break, width = content */
    background-color: lightblue;
    padding: 5px;
  }
  .block {
    display: block; /* takes full width, line break */
    background-color: lightgreen;
    padding: 5px;
  }
  .inline-block {
    display: inline-block; /* like inline but can set width/height */
    background-color: lightcoral;
    padding: 5px;
    width: 150px;
  }
</style>

<span class="inline">Inline</span>
<span class="inline">Inline 2</span><br>
<div class="block">Block</div>
<span class="inline-block">Inline-block</span>
<span class="inline-block">Inline-block 2</span>
      

/* CSS selector for paragraphs inside a .content div */

<style>
  .content p {
    color: darkblue;
    font-weight: bold;
  }
</style>

<div class="content">
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</div>
      

/* box-sizing controls how width and height are calculated */

<style>
  .default-box {
    width: 200px;
    padding: 20px;
    border: 5px solid black;
    box-sizing: content-box; /* default, width excludes padding/border */
    background-color: lightyellow;
    margin-bottom: 10px;
  }
  .border-box {
    width: 200px;
    padding: 20px;
    border: 5px solid black;
    box-sizing: border-box; /* width includes padding and border */
    background-color: lightgray;
  }
</style>

<div class="default-box">Content-box</div>
<div class="border-box">Border-box</div>
      

/* Center block element with margin auto */

<style>
  .centered {
    width: 300px;
    margin-left: auto; /* equal space left and right */
    margin-right: auto;
    background-color: lightblue;
    padding: 10px;
  }
</style>

<div class="centered">Centered block element</div>
      

/* CSS length units explained */

<style>
  body {
    font-size: 16px; /* base font size */
  }
  .px {
    font-size: 20px; /* absolute pixels */
  }
  .em {
    font-size: 1.5em; /* 1.5 times parent font size */
  }
  .rem {
    font-size: 1.5rem; /* 1.5 times root (html) font size */
  }
</style>

<p class="px">20 pixels font size</p>
<p class="em">1.5 em font size</p>
<p class="rem">1.5 rem font size</p>
      

/* Simple CSS Grid with 3 columns */

<style>
  .grid-container {
    display: grid; /* enable grid */
    grid-template-columns: repeat(3, 1fr); /* 3 equal columns */
    gap: 10px; /* spacing between grid items */
  }
  .grid-item {
    background-color: lightcoral;
    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>
      

/* visibility: hidden hides but keeps space; display: none removes element */

<style>
  .hidden {
    visibility: hidden;
    width: 200px;
    height: 50px;
    background-color: lightblue;
  }
  .none {
    display: none;
  }
</style>

<div class="hidden">Invisible but takes space</div>
<div class="none">Not rendered at all</div>
      

/* Create a perfect circle using border-radius */

<style>
  .circle {
    width: 100px;
    height: 100px;
    background-color: lightgreen;
    border-radius: 50%; /* makes circle */
  }
</style>

<div class="circle"></div>
      

/* CSS variables (custom properties) */

<style>
  :root {
    --main-color: coral;
    --padding-size: 15px;
  }
  .box {
    background-color: var(--main-color);
    padding: var(--padding-size);
    color: white;
  }
</style>

<div class="box">Using CSS variables</div>
      

/* Relative units depend on other sizes, absolute units are fixed */

<style>
  .relative-unit {
    width: 50%; /* relative to parent */
    font-size: 2em; /* relative to parent font */
    background-color: lightyellow;
  }
  .absolute-unit {
    width: 200px; /* fixed size */
    font-size: 16px; /* fixed size */
    background-color: lightgray;
  }
</style>

<div class="relative-unit">50% width, 2em font</div>
<div class="absolute-unit">200px width, 16px font</div>
      

/* Making text bold and italic */

<style>
  .bold-text {
    font-weight: bold;
  }
  .italic-text {
    font-style: italic;
  }
</style>

<p class="bold-text">Bold text</p>
<p class="italic-text">Italic text</p>
      

/* Inline, block, inline-block elements */

<style>
  .inline {
    display: inline;
    background-color: lightblue;
    padding: 5px;
  }
  .block {
    display: block;
    background-color: lightcoral;
    padding: 10px;
  }
  .inline-block {
    display: inline-block;
    background-color: lightgreen;
    padding: 8px;
  }
</style>

<span class="inline">Inline</span>
<div class="block">Block</div>
<div class="inline-block">Inline-block</div>
      

/* Adding box-shadow */

<style>
  .shadow-box {
    width: 200px;
    height: 100px;
    background-color: lightgray;
    box-shadow: 5px 5px 10px rgba(0,0,0,0.5);
    margin: 10px 0;
  }
</style>

<div class="shadow-box">Box with shadow</div>
      

/* Responsive image with max-width and height auto */

<style>
  img.responsive {
    max-width: 100%;
    height: auto;
  }
</style>

<img src="https://via.placeholder.com/600x400" alt="Responsive Image" class="responsive">
      

/* Float property example */

<style>
  .float-left {
    float: left;
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    margin: 5px;
  }
  .content {
    overflow: auto; /* clear floats */
    background-color: lightyellow;
  }
</style>

<div class="float-left">Floated left</div>
<div class="content">Content next to floated element</div>
      

/* Clear floats using clear property or clearfix hack */

<style>
  .clearfix::after {
    content: "";
    display: table;
    clear: both;
  }
</style>

<div class="clearfix">
  <div style="float:left; width:100px; height:100px; background:lightcoral;">Float</div>
  <div style="float:right; width:100px; height:100px; background:lightblue;">Float</div>
</div>
      

/* z-index controls stacking order of positioned elements */

<style>
  .box1 {
    position: relative;
    z-index: 1;
    background-color: lightblue;
    width: 150px;
    height: 150px;
  }
  .box2 {
    position: relative;
    z-index: 2;
    background-color: lightcoral;
    width: 100px;
    height: 100px;
    margin-top: -100px;
    margin-left: 50px;
  }
</style>

<div class="box1">Box 1</div>
<div class="box2">Box 2</div>
      

/* Absolute positioning relative to parent */

<style>
  .parent {
    position: relative; /* parent sets reference */
    width: 300px;
    height: 200px;
    background-color: lightyellow;
  }
  .child {
    position: absolute; /* absolute within parent */
    top: 20px;
    left: 20px;
    background-color: lightblue;
    padding: 10px;
  }
</style>

<div class="parent">
  <div class="child">Positioned child</div>
</div>
      

/* CSS position types explained */

<style>
  .fixed {
    position: fixed; /* relative to viewport */
    top: 0;
    right: 0;
    background-color: lightgreen;
    width: 150px;
    height: 50px;
  }
  .absolute {
    position: absolute; /* relative to nearest positioned ancestor */
    top: 60px;
    left: 0;
    background-color: lightcoral;
    width: 150px;
    height: 50px;
  }
  .relative {
    position: relative; /* relative to normal flow */
    top: 10px;
    left: 10px;
    background-color: lightblue;
    width: 150px;
    height: 50px;
  }
  .static {
    position: static; /* default */
    background-color: lightgray;
    width: 150px;
    height: 50px;
  }
</style>

<div class="fixed">Fixed</div>
<div class="absolute">Absolute</div>
<div class="relative">Relative</div>
<div class="static">Static</div>
      

/* Media queries for responsive design */

<style>
  .box {
    width: 400px;
    height: 100px;
    background-color: lightblue;
  }

  @media (max-width: 600px) {
    .box {
      background-color: lightcoral;
      width: 100%;
    }
  }
</style>

<div class="box">Resize browser to see color change</div>
      

/* Pseudo-classes for styling states */

<style>
  a:link {
    color: blue;
  }
  a:visited {
    color: purple;
  }
  a:hover {
    color: red;
  }
  a:active {
    color: orange;
  }
</style>

<a href="#">Link</a>
      

/* Simple CSS transition on hover */

<style>
  .box {
    width: 150px;
    height: 100px;
    background-color: lightblue;
    transition: background-color 0.5s ease;
  }
  .box:hover {
    background-color: lightcoral;
  }
</style>

<div class="box">Hover over me</div>
      

/* CSS variables example */

<style>
  :root {
    --main-color: #3498db;
    --padding: 10px;
  }
  .box {
    background-color: var(--main-color);
    padding: var(--padding);
    color: white;
  }
</style>

<div class="box">Box with CSS variables</div>