post image

Class và ID

Cho đến bây giờ bạn đã thấy được CSS có thể thay đổi các đối tượng html như thế nào. Ví dụ khi bạn viết code CSS cho thẻ h1 hoặc p, thì bạn sẽ thấy nó được áp dụng cho tất cả các thẻ trong html. Nhưng không phải lúc nào bạn cũng muốn tất cả các thẻ p trong phần code của bạn đều bị ảnh hưởng. Có thể bạn muốn đoạn này chữ màu xanh, đoạn kia chữ màu đỏ và đậm. Chính vì thế Class và ID được thêm vào thẻ html để bạn có thể hướng tới một đối tượng cụ thể hơn trong code HTML của bạn. Do đó cho bạn thêm một lựa chọn nữa để thiết kế trang web.

Cách sử dụng Class

Dưới đây là đoạn code chỉ cho bạn thấy cách sử dụng class

<h1 class="classtext">Đoạn văn này có cùng class với đoạn văn thứ 3</h1>
<p>Đoạn văn bản này xuất hiện bình thường</p>
<p class="classtext"> Khi chúng ta gắn class cho thẻ html
chúng ta có thể  hướng tới đối tượng dễ dàng hơn cho dù
nó có ở cấp bậc nào đi chăng nữa</p>

Ở đoạn code trên bạn thấy sự xuất hiện của class=”classtext”, đây chính là class mà tôi thêm vào cho thẻ h1 và thẻ p. Bây giờ chúng ta sẽ tô đậm nó

p {font-family: helvetica; sans-serif;}
.classtext {font-weight: bold;}

Lưu ý: đoạn code trên bạn phải chèn vào phần head của tài liệu vì ở đây chúng ta sử dụng phương pháp nhúng CSS vào trong phần đầu của tài liệu HTML.

Kết quả là 2 đoạn văn bản có thẻ p sẽ được hiển thị với font Helvetica (hoặc nếu máy của bạn không có font này, nó sẽ cho hiển thị dòng font San Serif) nhưng đoạn văn có class=”classtext” sẽ được hiển thị vừa font Helvetica và in đậm. Đoạn văn bản nằm trong thẻ h1 thì có font là font mặc định của trình duyệt, nhưng nó cũng được in đậm bởi vì nó bị gắn với class=”classtext”. Thẻ span là cặp thẻ trắng sẽ không gây tác động gì cho đối tượng nằm trong nó vì chúng ta chưa định dạng gì cho nó hết.

Contextual Class Selector

Nếu bây giờ bạn chỉ muốn đoạn văn bản cuối cùng có màu đỏ thì phải làm sao? bởi vì nếu bạn thêm

.classtext {font-weight:bold; color:red'}

thì đoạn văn bản nằm trong thẻ h1 cũng sẽ có màu đỏ và như thế không phải điều bạn muốn. Do vậy bạn có thể kết hợp thẻ đối tượng và tên class vào để tạo thành Selector.

p {font-family: helvetica; sans-serif;}
.classtext {font-weight: bold;}
p.classtext {color:red;}

như thế thì chỉ có đoạn văn bản thứ 3 là sẽ có màu đỏ

hoặc bạn có thể làm cho 4 chữ chúng ta có thể được in nghiêng bằng cách sử dụng kết hợp

p.classtext span {font-style:italic;}

nếu bạn muốn bạn cũng có thể làm cho chữ cùng class nằm trong thẻ h1 in nghiêng bằng cách viết

.classtext span {font-style:italic;}
Tránh lạm dung Class

Một trong những lỗi phổ biến nhất của những người mới bắt tay vào CSS là sử dụng quá nhiều class. Họ dùng class cho hầu hết các thẻ HTML và khai báo CSS cho từng class một. Làm như vậy thì cũng chẳng khác gì sử dụng thẻ HTML cả, vì nó cũng khó quản lý và thay đổi cũng rất khó khăn.

Cách sử dụng Class đúng cách là cho thẻ div bao quanh toàn bộ phần code mà bạn muốn hướng tới. Nếu bạn muốn hướng tới đối tượng nào nằm trong class đó, bạn luôn có thể kết hợp với phương pháp Contextual Class Selector để hướng tới nó.

Cách sử dụng IDs

ID được viết giống y như khi bạn viết code cho Class, chỉ có khác một điểm là bạn dùng ký hiệu dấu thăng (#) để thay cho dấu chấm . Nếu một đoạn văn bản được viết như sau

Đây là đoạn văn bản bất kỳ

thì trong phần CSS code của nó sẽ như sau

p#classtext {color:red;}

Còn lại ID được sử dụng y như Class, những gì bạn biết về Class ở trên bạn đều có thể áp dụng được với ID. Vậy chúng khác nhau ở điểm gì?

Sự khác biệt giữa Class và ID

Nói ngắn gọn thì ID là duy nhất và Class được sử dụng nhiều lần. Ví dụ trên trang web các thành phần duy nhất như là Logo, Menu, Footer … những cái này nó chỉ xuất hiện một lần duy nhất trên trang chứ nó không lặp đi lặp lại trên cùng một trang. Còn khi sử dụng Class thì áp dụng cho những thành phần xuất hiện nhiều lần trên cùng một trang.

Ví dụ bạn thấy ở trên izwebz thì mỗi một bài post đều được định dạng giống hệt nhau và nó xuất hiện 10 lần trên một trang vì có 10 bài post trên một trang. Nếu bạn đặt ID cho từng post một thì bạn phải định dạng từng post một trong CSS. Còn nếu bạn đặt cho chúng có cùng class thì bạn chỉ việc định dạng một lần cho tất cả.

Một điểm khác biệt thứ 2 nữa đó là Class không phân biệt IN HOA hay in thường nhưng ID lại phân biệt IN HOA và in thường. Ví dụ id=”containerWraper” khác với id=”containerwraper”

Cuối cùng bạn có thể sử dụng nhiều class cho cùng một thành phần nhưng chỉ có duy nhất một ID. Ví dụ bạn có thể đặt class như dưới đây và các class này hoàn toàn độc lập với nhau.

<div class="class1 class2 class3 classn">

«

»

21 Comments

( Comment bài này )
  1. Sakuya says:

    Span là gì và sử dụng như thế nào, khi nào thì sử dụng mong anh nói rõ hơn

  2. MinhManh says:

    Ngoài minh họa code, anh có thể thêm phần minh họa của code đó sẽ hiển thị trên trình duyệt thế nào không. Nhìn code đôi khi em hổng hình dung mặt mũi nó ở trên trình duyệt thế nào cả. Em mới bắt đầu tìm hiểu nên khó hình dung ra ^_^

  3. Aston says:

    Cho em hỏi, tại sao em cũng gõ y hệt như của anh nhưng đoạn 3 nó không có màu đỏ nhỉ?

  4. LTSP says:

    hix em mới học về html với css nên ko bít làm thế nào để cho nó hiện code cả. Admin làm hiện lên hộ em với nhé

  5. Khánh says:

    Còn một điểm khác biệt giữa id và class nữa là id có thể ứng dụng trong GetlementByID của JS, còn class thì không…
    (sưu tầm^^)

  6. Tuấn says:

    Anh ơi cho em hỏi ví dụ trong css em thấy cái Selector là #wrap1[id] thì cái [id] nghĩa là gì vậy anh?

  7. d2doi says:

    Mình còn được biết rằng trong cách đặt tên ID thi tên này không được bắt đầu bằng số nếu không nó sẽ không có tác dụng với Firefox. Còn với tên của Class bắt đầu bằng số thì chỉ có hiệu lực với IE.

  8. kien says:

    Ui đánh y code của anh mà ko đúng :-s. Cái đoạn 3 chả thay đổi gì cả.
    Mà cái sans-serif là gì thế ạ

  9. lan huong says:

    Hi Pro Demon Warlock! pro ah em đang đọc bài tutorial này của a. em có chút băn khoăn là ở trên a viết thẻ span”la cặp thẻ trắng không gây tác động gì cho đối tượng nằm trong nó”. thế nhưng bên dưới a lại kết hợp sử dụng thẻ span trong mục Contextural class selector:
    p.classtext span {font-style:italic;}
    A ơi a đang đánh đố người đọc ạ?em có gõ thử code này của a nhưng mà không thấy có kết quả như a nói trong mục Contextural class selector.
    Em vừa mới học CSS nên mong a giải thích rõ hơn cho em: Tại sao a lại viết như vậy trong Contextural class selector ?
    thanks a rất nhìu .

    • mineizurs says:

      Thẻ span không tác động nên nội dung, nghĩa là mọi định dạng nội dung trong thẻ span đều dó CSS,. Tức là những định dạng đó do bạn hoàn toàn quyết định

      Lấy ví dụ thế này cho dễ hiểu nhé:
      đây là code html:
      Đoạn text này bình thường, còn Đoạn text này màu đỏ!
      đây là code CSS cho nó:
      b { color:red;}

      Tuy nhiên, ngoài việc nó đỏ, nó còn in đậm nữa (do chịu tác động của thẻ b). Bạn không mong muốn điều đó, mà chỉ muốn nó đỏ, ko đậm. Vậy bạn thay thẻ bằng thẻ là xong. vì không gây ra định dạng, nên đoạn text đó sẽ đúng như bạn muốn: có màu đỏ

      • Sakuya says:

        Ủa tại sao ta định nghĩa lại thẻ b là chỉ làm cho đoạn text này có màu đỏ
        Mà tại sao vẫn còn giá trị cũ là in đậm

  10. quan says:

    @phamnhan: em cảm ơn anh nhiều ! em sẽ nghiên cứu kĩ hơn ! chúc anh 1 ngày tốt lành ^^ !

  11. phamnhan says:

    @quan: bạn gọi ul#topnav hay #topnav trong file css thì cái nào cũng đúng cả. Khi người tạo css gọi ul#topnav thì muốn khi nhình vào selector thì biết đối tượng có id=”topnav” là tag mà thôi. Còn nếu chỉ để #topnav thì bạn không biết dc đối tượng có id=”topnav” là tag gì cả, nếu chỉ để #topnav thì cũng có thể comment thêm để cho rõ ràng hơn. Cả 2 cách đều đúng và lúc chạy không khác nhau gì cả.

  12. Nó không cho phép có khoảng trắng vì mỗi một khoảng trắng là một Class riêng biệt. Ví dụ `__abENT__lt;div class=__abENT__quot;class1 class2 class3__abENT__quot;__abENT__gt;`
    Các class này hoàn toàn độc lập với nhau

  13. Trần says:

    Anh ơi, trong tên class có cho phép dấu khoảng trắng không anh ? Em đang cần định dạng 1 class có class name chứa rất nhiều khoảng trắng, em không thể gọi được các class đó để định dạng được.

  14. Anh đôi khi sử dung div# content đôi khi #content là vì anh muốn cho nó rõ ràng hơn trong code CSS. Tại vì với ID thì bất cứ thành phần nào cũng có ID ví dụ như: ul#content, p#content, li#content …Cho nên khi Anh viết div#content thì khi xem code CSS mình biết ngay đấy là mình đang hướng đến một thẻ div mà không phải là một thành phần nào khác.

  15. layla says:

    Anh cho em hỏi?
    Khi viết trong CSS đối với Div thì ta dùng
    #tenid ( #content) nhưng trong tutorial thì thấy anh viết div#content.
    Là sao hả anh. Có sự khác nhau nào ở đây không.
    Thank!

    • Trần Mạnh Tùng says:

      Đó là cái tên của ID thôi mà bạn, quan trọng gì nó. bạn có thể lấy tên là #layla cũng đựoc nữa :)

  1. BB
  2. BB
  3. BB

arrow

Lưu ý khi post comment:

  • Không "bóc tem" topic
  • Dùng lời lẽ có văn hoá và lịch sự
  • Xem trang FAQs trước khi hỏi
  • Bạn có thể dùng thẻ HTML như:<strong>, <em>, <a>
  • Đặt code trong thẻ [php],[html],[javascript],[css]

Chọn kiểu gõ: Tự động TELEX VNI Tắt