Your website will be viewed on more than just a screen. Users might print a page, use a screen reader, or require higher contrast to see content clearly. CSS provides tools to cater to all these needs.

1. Print Stylesheets

When a user prints your page, you don't want to include the navigation, footer, or interactive elements. You can define a specific set of styles for printing using the @media print at-rule.

Code Snippet: Basic Print Styles

CSS


/* This is your main stylesheet (screen.css) */
body {
  font-family: 'Helvetica', sans-serif;
  color: #333;
}
.main-nav, .sidebar, .footer {
  display: block; /* Visible on screen */
}

/* These styles ONLY apply when the page is printed */
@media print {
  body {
    font-family: 'Georgia', serif; /* Serif fonts are easier to read on paper */
    color: #000;
  }
  
  /* Hide unnecessary elements */
  .main-nav, .sidebar, .footer, .ads-container {
    display: none;
  }

  /* Ensure links are identifiable even without color */
  a::after {
    content: ' (' attr(href) ')';
  }
}

2. Accessibility (a11y)

Accessibility means designing your site so that people with disabilities can use it. CSS plays a vital role.

  • Focus States: Never remove outlines on focused elements without providing a clear alternative. The :focus-visible pseudo-class helps by showing focus rings only for keyboard users.
  • Reduced Motion: Some users experience dizziness or nausea from animations. The prefers-reduced-motion media query allows you to disable non-essential animations for them.

Code Snippet: Accessibility Enhancements

CSS


/* Provide a clear focus style for keyboard navigators */
:focus-visible {
  outline: 3px solid #3498db;
  outline-offset: 2px;
}

/* Respect user's motion preferences */
@media (prefers-reduced-motion: reduce) {
  /* Disable all transitions and animations */
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

3. High Contrast Mode

Some users with visual impairments enable a high-contrast mode in their operating system to make text more readable. You can use the prefers-contrast media query to adjust your design accordingly.

Code Snippet: Supporting High Contrast

CSS


/* Style for users who prefer more contrast */
@media (prefers-contrast: more) {
  /* Make borders more prominent */
  .card, .btn {
    border: 2px solid currentColor;
  }

  /* Ensure text has a very high contrast ratio */
  h1, h2, p {
    color: black !important;
    background-color: white !important;
  }
}