Quy tắc đặt tên class css

Ở bài học trước chúng ta đã cùng nhau CONVERT PX SANG REM , từ đó dễ dàng khi tạo responsive webpage hơn nhiều so với việc sử dụng px.

Trong bài này chúng ta sẽ tìm hiểu về BEM và cách đặt tên class cho element.


Nội dung

Để nắm vững bài này các bạn cần:

Trong bài này chúng ta sẽ cùng nhau tìm hiểu

  • Think – Build – Architect Mindset
  • Think (nghĩ về layout trước)
  • Build (Đặt tên classes)
  • Architect ( Tổ chức folder, sử dụng Sass)

Think – Build – Architect Mindset

Như chúng ta đã nói ở bài TỔNG QUAN CÁCH HOẠT ĐỘNG CỦA CSS VÀ 3 THỨ ĐỂ TẠO 1 WEBSITE TỐT., việc code CSS nên được làm thỏa mãn các tiêu chí: Rõ ràng (Clean), Chia nhỏ thành các phần (Modular), dễ tái sử dụng  (Reusable), và dễ mở rộng (Ready for growth).

Để làm được điều đó ta cần 3 bước:

  • Bước 1: THINK suy nghĩ về cách tổ chức code, các layout hiển thị lên webpage và thường sẽ sử dụng wireframe.
  • Bước 2: BUILD: Xây dựng code HTML dựa trên wireframe và đặt tên class 1 cách có cấu trúc.
  • Bước 3: ARCHITECT: Chia nhỏ các phần CSS thành các file và folder 1 các logic

Think about the layout

  • Website sẽ xây dựng dựa trên các component nhỏ (Component - Driven design).
  • Những component gắn kết với nhau dựa vào layout của webpage.
  • Các component này được xây dựng độc lập và có thể tái sử dụng ở các page khác nhau trong cùng 1 project hoặc các project khác nhau.

Build( Đặt tên class)

Ở đây chúng ta làm quen với BEM (Block Element Modifier)

  • Block: tên của component, có nghĩa mô tả tổng thể của component đó
  • Element: nó dùng để đặt tên các phần từ bổ trợ cho component (Block)
  • Modifier: Các dạng khác biến thể của 1 block hoặc element
.block{}
.block__element{}
.block__element--modifier{}

Chúng ta sẽ hiểu rõ hơn qua ví dụ sau:  

Hello Everyone

Nice to meet you

Lorem ipsum dolor sit amet consectetur adipisicing elit. Repudiandae, sed!

Trong đó, chúng ta thấy:

  • Block (card) là mô tả toàn bộ component.
  • Element (heading, content) chỉ các bộ phận của component này.
  • Modifier (sub, main) chỉ ra có 2 loại element (heading) gồm heading chính và heading phụ

Trong Sass sẽ hỗ trợ chúng ta rất nhiều trong việc sử dụng BEM ( chúng ta sẽ tìm hiểu ở những bài học sau)

Vậy qua các phần trên, chúng ta đã thấy được lợi ích của việc sử dụng BEM là giúp tổ chức tốt code CSS, dễ bảo trì, tái sử dụng, tránh tình trạng code chồng chéo lên nhau. Ví dụ như cùng là heading nhưng card heading và header heading khác nhau, …


Architect (Tổ chức folders, Sass)

Sass sẽ hỗ trợ chúng ta trong việc chia code CSS thành các folder và các file chứa các component nhỏ.

Nôm na của mô hình tổ chức chúng ta sẽ chia làm 7 folders và 1 file main.sass chính import tất cả các files trong các folder để compile thành CSS

7 folder ở đây chia thành từng mảng:

  1. Base/ (chứa các setting ban đầu)
  2. Components/ ( chứa các bộ phận nhỏ dễ tái sử dụng như button, card, …)
  3. Layout/ ( chứa footer, navbar,…)
  4. Pages/ (chứa tên các page nếu project web của bạn có nhiều page khác nhau vd: home, login, …)
  5. Abstracts/ (chứa animation, các function, mixin khi sử dụng sass sẽ được đề cập kĩ hơn khi chúng ta làm quen với sass)
  6. Themes/ (các mẫu có sẵn)
  7. Vendors/ (code CSS bên ngoài như bootstrap, …)

Lưu ý: Không phải lúc nào chúng ta cũng sử dụng hết 7 folders này ( ví dụ themes/ sẽ không được sử dụng trong khóa học của chúng ta) nhưng chúng sẽ đều sẽ được chia thành các phần nhỏ vào 1 trong 7 folders này.


Kết luận

Ở bài học này chúng ta đã cùng nhau tìm hiểu về BEM và cách cấu trúc code CSS.

Ở bài học sau, để hiểu rõ hơn cách sử dụng BEM, chúng ta sẽ ỨNG DỤNG NÓ VÀO PROJECT CỦA CHÚNG TA.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận và góp ý của mình để giúp phát triển bài viết tốt hơn. Đừng quên: "Luyện tập – Thử thách – Không ngại khó".


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Một trong những lý do giúp Mid và Senior khác biệt với trình độ Junior trong phát triển web cơ bản chính là việc đặt tên class cho các element của markup sao cho gọn, dễ nhớ và dễ sử dụng.

Tại sao bạn cần đặt tên class?

Mỗi loại element trong website của bạn thường được sử dụng nhiều lần, chẳng hạn ảnh, video hay các đoạn Heading text. Nếu bạn không đặt tên (ở đây là gán class) mà chỉ đơn thuần sử dụng nó như

Quy tắc đặt tên class css
Ví dụ về các CTA Block (ảnh: elegantthemes.com)

Bạn cần làm gì để đặt tên class đúng?

Điều đầu tiên là bạn cần nắm vững cấu trúc markup của chuẩn HTML5 đang rất phổ biến hiện nay. Ví dụ như bố cục layout default trông sẽ phải gồm các đối tượng nào.

Tiếp đến là bạn phải nắm được quy ước của tổ chức (Code Standards), chẳng hạn như sử dụng BEM, hoặc kiểu đặt tên class composit thì sẽ ra sao.

Sau cùng, bạn cần trải nghiệm nhiều, càng nhiều càng tốt, với nhiều website và các kiểu website khác nhau.

Trong phần giới thiệu sau đây, Code Tốt sẽ đưa ra những ví dụ cơ bản về cấu trúc sắp xếp theo

 để các bạn hình dung.

Các kiểu cấu trúc section phổ biến

Khi nào bạn có thể sử dụng
?

Bạn có thể sử dụng tag này khi có Heading Text và các nội dung trình bày bên trong bố cục layout của bạn. Ví dụ như code dưới đây:

Các element nào sẽ xuất hiện trong
?

Ta sẽ sắp xếp theo thứ tự quan trọng sự xuất hiện nhé.

Heading Text

Heading sẽ xuất hiện theo thứ tự, có thể từ H1 hoặc H2 và đi dần xuống. Thông thường càng Heading nhỏ thì số lượng càng nhiều. Hiếm khi ta có 1 Heading 2 và ở dưới chỉ có 1 Heading 3 vì như vậy tính chất SEO không bền vững.

Ta sẽ đặt lần lượt như sau:

  • Headline (thường là H1 hoặc H2)
  • Title (thường là H3)
  • SubTitle (thường là H4)
  • SubHeading

Ngoài ra, các bạn designer thường đặt tên theo 1 cách khác trong thiết kế:

  • Main Title (H1)
  • Secondary Title (H2)
  • Main Heading (H3)
  • Sub-heading (H4)
  • Label (H5-H6)

Dưới đây là 1 ví dụ, khi ta coi “Heading” ở tầng level 2 (thấp hơn) là Title, chứ không còn là Heading nữa.

Header

Nhiều người biết đến HTML5 và

 tag, nhưng lại chỉ dùng nó để làm Header trên cùng website mà ít sử dụng nó ở chỗ khác. Trong
 hoàn toàn sử dụng được
 nhưng yêu cầu phải là bên trong chứa 1 Heading Text và 1 đoạn paragraph như thế này nhé:

 Article

Thẻ

 cũng là một gợi ý hay nếu bạn có nhiều bài viết và muốn hiển thị dưới dạng trình bày thông tin. Lưu ý các thẻ này cần chứa 1 Heading (thường là Title của bài viết) và 1 đoạn paragraph, và tốt hơn kèm thêm cả ảnh và link tới bài viết đó ở trang riêng (single).

Đặt tên class trong section như thế nào?

Việc đặt tên class cho section có thể ảnh hưởng tới các element bên dưới, nên bạn cần lưu ý một số quy tắc để tránh việc đặt tên class dẫn tới nhập class bị dài và khó nhớ.

Các quy tắc đặt tên class cho section hay 1 module

  1. Tên ngắn gọn, không quá 3 từ và cũng không nên chỉ duy nhất 1 từ hoặc 1 chữ cái. Đừng viết tắt. Các trường hợp đặc biệt cần tính đến là các module/section global scope, ví dụ header,

    0 hay

    1 mà thôi.
    Ví dụ:
    Hợp lý:

    2,

    3,

    4
    Không hợp lý:

    5,

    6,

    7

  2. Tên class cần phản ánh chức năng hoạt động của module/section về mặt kĩ thuật (hơn là loại content). Lý do là ta tổ chức theo hướng tái sử dụng nên việc truyền dữ liệu gì không quan trọng bằng việc thống nhất bố cục và đáp ứng khả năng hiển thị về mặt kĩ thuật.
    Ví dụ:
    Hợp lý:

    8,

    9,
    0
    Không hợp lý:
    1,
    2,
    3

Hầu hết trong các tình huống ta gặp phải, các module và class sẽ trùng tên nhau để dễ quản lý cả về cấu trúc markup và styling.

Bạn có thể tham khảo demo template miễn phí trên Github này của mình để nắm được các module mình bóc tách ra và gọi vào từng page như thế nào.

Quy tắc đặt tên class css
Ví dụ về bố cục Grid

Kết hợp từ, cụm từ trong đặt tên class cho section

Những từ và cụm từ sau có thể cân nhắc sử dụng và kết hợp:

  1. Nhóm CTA (có đính kèm 1 button/link dạng CTA): hero, intro, callout, newsletter
  2. Nhóm bố cục (chia cột): list, grid, gallery, mosaic, collection, three-up, four-up, detail, row
  3. Nhóm nội dung: text, menu, single-image
  4. Nhóm đối tượng con: card, item, block
  5. Nhóm tính năng: slider, carousel, search, social-links, social-sharing, testimonials, widget, accordion, nav-trigger

Các gợi ý đặt tên cho element trong

Sau khi đặt tên class cho

5, ta sẽ tiến hành thêm các class cho các element bên trong nó. Dưới đây là các gợi ý giúp bạn hình dung các lớp đối tượng được dễ dàng hơn.

Section Header

  1. Headline
  2. SubHeadline
  3. Description hoặc Intro (thường nên đặt là Description)

Section Navigation

  1. Navigation hoặc Menu
  2. (Nhỏ hơn) Menu Item

Section List

  1. List hoặc Grid
  2. (Nhỏ hơn) Item hoặc Card

Section Layout (Nếu có layout 2 cột, trong đó 1 là sidebar)

  1. Blocks hoặc Layout
  2. (Nhỏ hơn) Block (left + right), Aside và Main

Section Footer (thường chứa button CTA)

  1. CTA hoặc Button
  2. Footer Bottom Text

Để tránh việc section chứa quá nhiều level, bạn nên sử dụng việc nhúng module nào vào section khác. Kết quả của việc này chẳng hạn sẽ như sau:

Kết luận

Code Tốt hi vọng bài viết sẽ hữu ích và giúp bạn tránh mất thời gian vào việc đặt tên class cho section và các element. Đừng quên đặt câu hỏi nếu bạn có điều gì chưa rõ nhé.