:last-child là gì?

Nếu như :first-child được dùng để chọn thành phần đầu tiên trong danh sách, thì :last-child sẽ được dùng để chọn thành phần cuối cùng trong danh sách.

Ví dụ như danh sách bên dưới đây:

HTML viết:

<!DOCTYPE HTML>
<html>
<head></head>
<body>
<ul>
    <li>Item đầu tiên</li>
    <li>Item thứ 2</li>
    <li>Item thứ 3</li>
    <li>Item thứ 4</li>
    <li>Item cuối cùng</li>
</ul>
</body>
</html>

Hiển thị trình duyệt:

  • Item đầu tiên
  • Item thứ 2
  • Item thứ 3
  • Item thứ 4
  • Item cuối cùng

Bây giờ ta sẽ sử dụng :last-child để thêm background-color cho "Item cuối cùng".

CSS viết:

ul li:last-child {
    background-color: #fcc;
}

Hiển thị trình duyệt:

  • Item đầu tiên
  • Item thứ 2
  • Item thứ 3
  • Item thứ 4
  • Item cuối cùng

Ví dụ thêm

Giả sử ta có một danh sách item được float theo chiều ngang như sau:

HTML viết:

<!DOCTYPE HTML>
<html>
<head></head>
<body>
<ul>
    <li>Item đầu tiên</li>
    <li>Item thứ 2</li>
    <li>Item thứ 3</li>
    <li>Item thứ 4</li>
    <li>Item cuối cùng</li>
</ul>
</body>
</html>

CSS viết:

ul {
    border: 1px solid #ccc;
    width: 540px;
}

ul li {
    background-color: #f1f1f1;
    float: left;
    text-align: center;
    margin-right: 10px;
    width: 100px;
}

Hiển thị trình duyệt:

  • Item đầu tiên
  • Item thứ 2
  • Item thứ 3
  • Item thứ 4
  • Item cuối cùng

Ta thấy, chiều rộng của <ul> là 540px;, nhưng tổng chiều rộng của <li> là (100px + 10px) x 5 = 550px, do đó tổng chiều rộng lớn hơn chiều rộng của <ul>, nên một Item cuối cùng sẽ rơi xuống dòng thứ hai.

Để giải quyết trường hợp này ta sử lý bằng :last-child mà không cần thêm class để phục hồi cho "Item cuối cùng", viết lại CSS như sau:

CSS viết:

ul {
    border: 1px solid #ccc;
    width: 540px;
}

ul li {
    background-color: #f1f1f1;
    float: left;
    text-align: center;
    margin-right: 10px;
    width: 100px;
}
ul li:last-child {
    margin-right: 0;
}

Ta đã thêm đoạn CSS reset lại margin-right: 0; cho "Item cuối cùng", ta được kết quả sau:

Hiển thị trình duyệt:

  • Item đầu tiên
  • Item thứ 2
  • Item thứ 3
  • Item thứ 4
  • Item cuối cùng

Đó là một trong những cách xử lý hiệu quả nhất bằng cách sử dụng thuộc tính :last-child