Mô-đun css tên lớp động

CSS trong phạm vi thành phần cho phép bạn viết CSS di động, truyền thống với các tác dụng phụ tối thiểu. không còn lo lắng về xung đột tên bộ chọn hoặc ảnh hưởng đến kiểu dáng của các thành phần khác

Gatsby hoạt động vượt trội với Mô-đun CSS, một giải pháp phổ biến để viết CSS có phạm vi thành phần. Đây là một trang web ví dụ sử dụng Mô-đun CSS

Mô-đun CSS là gì?

Trích dẫn từ trang chủ Mô-đun CSS

Mô-đun CSS là một tệp CSS trong đó tất cả các tên lớp và tên hoạt hình được đặt trong phạm vi cục bộ theo mặc định

Mô-đun CSS cho phép bạn viết kiểu trong tệp CSS nhưng sử dụng chúng dưới dạng đối tượng JavaScript để xử lý bổ sung và đảm bảo an toàn. Các Mô-đun CSS rất phổ biến vì chúng tự động tạo tên lớp và hoạt hình duy nhất, do đó bạn không phải lo lắng về xung đột tên bộ chọn

Ví dụ về mô-đun CSS

CSS trong mô-đun CSS không khác CSS bình thường, nhưng phần mở rộng của tệp khác để đánh dấu rằng tệp sẽ được xử lý

Trong ví dụ này, một mô-đun CSS được nhập và khai báo là một đối tượng JavaScript có tên là

.button {
  border-radius: 4px;
  background-color: LightCyan;
}
9. Sau đó, một lớp CSS từ đối tượng đó được tham chiếu trong thuộc tính JSX
.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
0 với
.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
1, thuộc tính này hiển thị thành HTML với các tên lớp CSS động như
.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
2

Kích hoạt biểu định kiểu người dùng với tên lớp ổn định

Việc thêm một mã CSS liên tục

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
0 vào đánh dấu JSX của bạn cùng với mã Mô-đun CSS của bạn có thể giúp người dùng dễ dàng tận dụng Biểu định kiểu người dùng để truy cập hơn

Đây là một ví dụ trong đó tên lớp

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
4 được thêm vào DOM cùng với tên lớp được tạo động của mô-đun

Sau đó, người dùng trang web có thể viết các kiểu CSS của riêng họ phù hợp với các thành phần HTML có tên lớp là

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
5 và nó sẽ không bị ảnh hưởng nếu tên hoặc đường dẫn mô-đun CSS thay đổi

Khi nào nên sử dụng Mô-đun CSS

Các mô-đun CSS rất được khuyến khích cho những người mới xây dựng với Gatsby (và React nói chung) vì chúng cho phép bạn viết các tệp CSS di động, thông thường trong khi đạt được các lợi ích về hiệu suất như chỉ gói mã tham chiếu

Mô-đun CSS là một phương tiện để đạt được các tên lớp CSS có phạm vi cục bộ. Đối với ứng dụng một trang đơn giản, chúng có thể không cần thiết. Nhưng nếu bạn đang làm việc trên một ứng dụng lớn có hơn 20 thành phần, thì công cụ này thực sự có thể giúp bạn dọn sạch CSS của mình

Tất nhiên, việc áp dụng một công cụ mới có thể mất thời gian. bạn có thể tự hỏi

Tôi sẽ nỗ lực hết sức để thiết lập các Mô-đun CSS chỉ để biết rằng chúng không hoạt động với tôi chứ?

Để ngăn chặn điều đó, tôi đã thiết lập 7 ví dụ cụ thể cho thấy cách thức hoạt động của Mô-đun CSS trong các tình huống phổ biến nhất. Đọc lướt qua bài viết này trong 10 phút và bạn sẽ biết liệu việc áp dụng các Mô-đun CSS sẽ giúp ích hay gây hại cho dự án của bạn

Mục lục

Nhảy xung quanh nếu một số ví dụ khiến bạn quan tâm hơn những ví dụ khác

Đây là ví dụ đơn giản nhất có thể. Có một tên lớp duy nhất trong tệp

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
0.
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
1

Dưới đây là tổng quan về tất cả các tệp trong ví dụ này

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
2. Mô-đun CSS. Bạn viết cái này giống như CSS bình thường.
______03. Một thành phần phản ứng. Cái này chỉ hiển thị một nút.
______04. CSS cho trình duyệt - được tạo bởi trình biên dịch Mô-đun CSS.

.button {
  border-radius: 4px;
  background-color: LightCyan;
}

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;

Lưu ý cách lớp

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
1 được đổi tên thành
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
6.
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
1 là tên địa phương và
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
6 là tên toàn cầu. Bạn có thể sử dụng các tên ngắn gọn, mang tính mô tả như "nút" mà không lo xung đột tên

Tất cả những gì bạn phải làm là viết

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
9 trong Mô-đun CSS của mình và tham chiếu lớp với
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
30 trong thành phần của bạn

Nhân tiện,

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
31 trong
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
6 là một hàm băm ngẫu nhiên để đảm bảo tính duy nhất trong trường hợp nhiều Mô-đun CSS có cùng tên. Bạn có thể định cấu hình cách bạn muốn trình biên dịch Mô-đun CSS viết lại tên lớp của bạn và hàm băm là tùy chọn

đường vòng

Trước khi chúng ta chuyển sang ví dụ 2, hãy làm rõ một điểm mà một số người cảm thấy khó hiểu. Các câu lệnh nhập mô-đun CSS nhập một đối tượng JavaScript

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
3

Trong đoạn mã trên, biến

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
33 là một đối tượng JavaScript. Điều này có thể gây nhầm lẫn nếu bạn mong muốn nhận được một số CSS

Để làm cho điều này hoàn toàn rõ ràng, tôi đã thêm một nhận xét vào từng ví dụ cho biết biến

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
33 sẽ được đặt thành gì. Ví dụ

Trong ví dụ này, mô-đun CSS có 3 tên lớp khác nhau.

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
35,
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
36 và
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
37

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
2

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
3

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
4

Lưu ý cách cả ba tên lớp đều có thể truy cập được đối với thành phần trong đối tượng

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
33. Đối tượng
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
33 là ánh xạ giữa tên lớp bạn đã sử dụng và tên lớp được tạo. Nó là một ánh xạ từ địa phương đến toàn cầu

Trong ví dụ này, có các bộ chọn chỉ áp dụng cho các phần tử chứa CẢ lớp

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
1 VÀ lớp
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
21

Lưu ý cách quy tắc

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
22 trở thành 2 biến riêng biệt trong đối tượng
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
33.
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
30 và
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
25

Quy tắc CSS

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
22 sẽ chỉ có hiệu lực nếu chúng ta sử dụng
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
30 và
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
25 trên cùng một phần tử. Chúng tôi làm điều đó trong thành phần React

Một lớp trong Mô-đun CSS của bạn vẫn là một lớp trong CSS & JS được tạo. Viết quy tắc kết hợp nhiều lớp không thay đổi điều đó

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
6

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
7

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
8

Chúng tôi đang sử dụng gói tên lớp ở đây để kết hợp tên lớp. Trong tình huống này, nó chỉ cần thêm một khoảng trắng giữa hai tên lớp

Trong ví dụ này, có các quy tắc kiểu dáng chỉ áp dụng cho các phần tử có tên lớp cụ thể cũng được lồng trong một phần tử khác có tên lớp cụ thể

Một lần nữa, các tên lớp được trả về riêng. Trong thành phần của bạn, bạn phải đặt một tên lớp cho phần tử cha và một tên lớp cho phần tử con

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
0

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
1

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
2

Rõ ràng là bạn sẽ muốn chia sẻ một số kiểu giữa các thành phần

Với các Mô-đun CSS, việc chia sẻ rõ ràng bằng cách sử dụng thành phần. Lần này chúng tôi có hai tệp mới

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
29. Cung cấp một lớp duy nhất,
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
30, mà chúng tôi sẽ sử dụng trong
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
31

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
3

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
4

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
5

Mô-đun CSS viết lại tên lớp, nhưng chúng không chạm vào tên thẻ

Các bộ chọn như

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
32,
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
33 hoặc
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
34 sẽ được để yên

Trong một bộ chọn như

import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
35, lớp
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
36 sẽ được đổi tên, nhưng phần
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
32 của bộ chọn sẽ được giữ nguyên và bạn nhận được kết quả như thế này.
import React from 'react';
import styles from './Widget1.css';

class Widget1 extends React.Component {
  render() {
    return (
      
        Click Me
      
    );
  }
}
export default Widget1;
38

Tôi có thể đề nghị. Không bao giờ sử dụng bộ chọn CHỈ là tên thẻ. Luôn chỉ định tên lớp. Nếu không, quy tắc CSS sẽ áp dụng chung cho toàn bộ ứng dụng của bạn

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
6

Vì tất cả các Mô-đun CSS làm là viết lại tên lớp của bạn nên các tính năng bạn đã quen sử dụng trong CSS vẫn hoạt động bình thường

Đây là một ví dụ sử dụng truy vấn phương tiện. Văn bản khác nhau được đánh dấu tùy thuộc vào chiều rộng cửa sổ của bạn

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
7

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
8

.Widget1_button_1FUOu {
  border-radius: 4px;
  background-color: LightCyan;
}
9

Lưu ý rằng chỉ có tên lớp được thay đổi. Các truy vấn phương tiện của bạn vẫn chính xác như cách bạn đã viết chúng

Sự kết luận

Bất kể các Mô-đun CSS có hữu ích cho bạn hay không - bây giờ bạn đã biết. Nếu bạn quyết định sử dụng Mô-đun CSS, sẽ không có gì ngạc nhiên

Các mô-đun CSS giải thích các mô-đun CSS với ví dụ thích hợp là gì?

Mô-đun CSS là tệp CSS trong đó tất cả tên lớp và tên hoạt ảnh được đặt trong phạm vi cục bộ theo mặc định . Mô-đun CSS cho phép bạn viết kiểu trong tệp CSS nhưng sử dụng chúng dưới dạng đối tượng JavaScript để xử lý bổ sung và đảm bảo an toàn.

Phạm vi của mô-đun CSS cho React là gì?

tệp css. Nó làm giảm phạm vi toàn cầu của kiểu dáng React . Ngoài ra, nó là một công cụ ngăn chặn phạm vi toàn cầu và xung đột bằng cách tạo một chuỗi ngẫu nhiên dưới dạng tên className và thêm một hàm băm duy nhất để làm cho mỗi className trở nên độc nhất. Chúng ta có thể ngăn xung đột không gian tên cho các lớp CSS bằng cách sử dụng Mô-đun CSS.

Mô-đun SCSS là gì?

scss là tệp SCSS với các mô-đun CSS . Theo repo, các mô-đun CSS là. Các tệp CSS trong đó tất cả các tên lớp và tên hoạt hình được đặt trong phạm vi cục bộ theo mặc định. Điều này giải quyết vấn đề nhập tên lớp CSS cực kỳ cụ thể để tránh xung đột.

soạn CSS là gì?

Thành phần là một tính năng trong Mô-đun CSS cho phép chúng ta soạn bộ chọn . Do đó, chúng ta có thể soạn một lớp bằng cách kế thừa các kiểu từ một lớp khác, nhưng các quy tắc soạn này phải xuất hiện trước các quy tắc khác.