阿里云主机折上折
  • 微信号
Current Site:Index > The three ways to introduce CSS

The three ways to introduce CSS

Author:Chuan Chen 阅读数:48532人阅读 分类: CSS

CSS, as the core language for web styling, offers multiple inclusion methods to suit different scenarios. The three main approaches are inline styles, internal style sheets, and external style sheets, each with its own advantages and disadvantages, making them suitable for different development stages and project scales.

Inline Styles

Inline styles are written directly in the style attribute of HTML elements. They have the highest priority but poor maintainability. They are suitable for quick testing or overriding styles for specific elements:

<p style="color: red; font-size: 16px;">This text will appear red</p>
<button style="background: blue; padding: 8px 12px;">Click Me</button>

Characteristics:

  • Higher priority than other inclusion methods (specificity weight of 1000)
  • Styles cannot be reused; modifications must be made element by element
  • Leads to tight coupling between HTML and CSS

Typical Use Cases:

  1. Temporary debugging of styling issues
  2. Dynamic style modifications (via JavaScript manipulation of the style attribute)
  3. Overriding external style sheet rules
// Dynamically modifying inline styles via JS
document.getElementById('target').style.fontWeight = 'bold';

Internal Style Sheets

Embedded within the <head> section of an HTML document using the <style> tag, internal style sheets are ideal for rapid development in single-page projects:

<!DOCTYPE html>
<html>
<head>
  <style>
    body {
      font-family: 'Arial', sans-serif;
      line-height: 1.6;
    }
    .container {
      width: 80%;
      margin: 0 auto;
    }
    .highlight {
      background-color: yellow;
    }
  </style>
</head>
<body>
  <div class="container">
    <p class="highlight">Highlighted content</p>
  </div>
</body>
</html>

Advantages:

  • Keeps HTML structure clean
  • Supports CSS selectors for style reuse
  • Styles render synchronously during page load

Limitations:

  • Requires duplicating style code in multi-page projects
  • Increases HTML file size
  • No browser caching optimization

External Style Sheets

Linked via the <link> tag to standalone .css files, this is the preferred method for production environments:

<!-- index.html -->
<head>
  <link rel="stylesheet" href="styles/main.css">
  <link rel="stylesheet" href="styles/theme.css">
</head>

Corresponding CSS file structure:

/* styles/main.css */
@import url('base.css');

.header {
  height: 60px;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

/* styles/theme.css */
:root {
  --primary-color: #3498db;
}

Best Practices:

  1. Use semantic file naming (e.g., layout.css, components.css)
  2. Organize multiple files via @import (note performance impact)
  3. Implement responsive design with media queries:
/* Mobile-first responsive approach */
.container {
  width: 100%;
  padding: 10px;
}

@media (min-width: 768px) {
  .container {
    width: 750px;
    padding: 20px;
  }
}

Performance Optimization:

  • Merge multiple CSS files to reduce HTTP requests
  • Use CDNs to accelerate style file loading
  • Add preload hints for priority:
<link rel="preload" href="critical.css" as="style" onload="this.rel='stylesheet'">

Priority and Override Rules for the Three Methods

CSS follows cascading rules, with priority from highest to lowest:

  1. !important declarations
  2. Inline styles (1000)
  3. ID selectors (100)
  4. Class/attribute/pseudo-class selectors (10)
  5. Element/pseudo-element selectors (1)
/* Example: Specificity calculation */
#nav .item { color: blue; }  /* 100 + 10 = 110 */
div.item.active { color: red; } /* 1 + 10 + 10 = 21 */

Override Example:

<style>
  p { color: green !important; }
  .text { color: black; }
</style>
<p class="text" style="color: orange;">Will ultimately appear green</p>

Combined Usage in Modern Development

Real-world projects often combine multiple methods:

  • Use external style sheets for base styles
  • Apply internal style sheets for page-specific styles
  • Employ inline styles for dynamic styling needs
<!-- E-commerce site example -->
<head>
  <link rel="stylesheet" href="css/framework.css">
  <style>
    .product-card {
      --theme-color: #{currentTheme};
    }
  </style>
</head>
<body>
  <div class="banner" style="background: url({dynamicImage})">
    <!-- Content -->
  </div>
</body>

Build Tool Integration: Modern frontend toolchains (e.g., Webpack, Vite) support:

  • SCSS/LESS preprocessors
  • CSS Modules for scoped styles
  • Automatic vendor prefixing
// Webpack configuration example
module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: [
          'style-loader',
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          },
          'sass-loader'
        ]
      }
    ]
  }
};

Impact on Browser Rendering Mechanisms

Different inclusion methods affect the critical rendering path:

  • Inline styles and internal style sheets block rendering
  • External style sheets may cause FOUC (Flash of Unstyled Content)

Optimization Strategies:

  1. Inline critical CSS in the <head>
  2. Load non-critical CSS asynchronously:
<link rel="preload" href="non-critical.css" as="style" onload="this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="non-critical.css"></noscript>

Maintainability and Team Collaboration

Recommended practices for large projects:

  1. Avoid inline styles (except in frameworks like React)
  2. Split CSS files by functional modules
  3. Establish naming conventions (e.g., BEM)
/* BEM naming example */
.block__element--modifier {
  /* Style rules */
}
.article__title--featured {
  font-size: 1.8em;
}

本站部分内容来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn

Front End Chuan

Front End Chuan, Chen Chuan's Code Teahouse 🍵, specializing in exorcising all kinds of stubborn bugs 💻. Daily serving baldness-warning-level development insights 🛠️, with a bonus of one-liners that'll make you laugh for ten years 🐟. Occasionally drops pixel-perfect romance brewed in a coffee cup ☕.