- vừa được xem lúc

[CSS] Bài 7 - Các Thuộc Tính Position

0 0 9

Người đăng: Thịnh Trần

Theo Viblo Asia

Chúng ta đã biết cách thiết lập kích thước và trang trí các container. Việc canh chỉnh và sắp xếp vị trí chính là bước tiếp theo để khiến trang web của chúng ta trông gọn gàng và ngăn nắp. Hãy cùng thảo luận về các thuộc tính position.

Các thuộc tính position trong CSS

Có 4 thuộc tính nổi tiếng có thể giúp chúng ta thay đổi vị trí và di chuyển các phần tử HTML. Các thuộc tính này rất mạnh mẽ nên đã được người ta gọi chung là bộ tứ:

Tuy nhiên, để giữ cho nội dung văn bản HTML của chúng ta được sắp xếp trình tự, các trình duyệt web luôn mặc định khóa cứng vị trí của các phần tử bằng position: static;. Để giải phóng bộ tứ và chứng kiến tiềm năng của họ, chúng ta cần thay đổi giá trị của thuộc tính position.

Thuộc tính position có thể được sử dụng với một trong các giá trị sau:

  • static (mặc định)
  • fixed
  • absolute
  • relative

Đối với mỗi giá trị của thuộc tính position, bộ tứ nói trên sẽ hoạt động theo những cách khác nhau. Vì vậy nên chúng ta sẽ tạo ra một vài phần thảo luận cho 3 giá trị cuối cùng của thuộc tính position và xem bộ tứ hoạt động ra sao.

Sử dụng position: fixed;

Luật CSS position: fixed; sẽ nói với các trình duyệt web rằng, chúng ta muốn thiết lập vị trí của phần tử HTML tương quan với khung hiển thị của trình duyệt web. Luật CSS này có một hiệu ứng phụ đó là nó sẽ khiến cho phần tử HTML tách rời khỏi dòng hiển thị thông thường của trang và không còn chiếm không gian hiển thị như bình thường nữa.

pinned.html

<!doctype html>
<html> <head> <meta charset="utf-8"> <title>Pinned Button</title> <link rel="stylesheet" href="pinned.css"> </head> <body> <button id="up">Pinned Button</button> <!-- These image is for testing purpose. They make the document long enough to be scrollable. --> <img class="img-responsive" src="https://s19.postimg.cc/cgsyns1qr/snow.jpg"> <img class="img-responsive" src="https://s19.postimg.cc/cgsyns1qr/snow.jpg"> <img class="img-responsive" src="https://s19.postimg.cc/cgsyns1qr/snow.jpg"> </body>
</html>

pinned.css

#up { font-size: 15px; width: 150px; height: 50px; color: White; background-color: Crimson; border: none; /* set position */ position: fixed; right: 20px; bottom: 10px;
} /* for testing purpose */
.img-responsive { width: 100%; height: auto;
}

Đây là cách thức mà đoạn code phía trên hoạt động:

  • Đầu tiên, nút nhấn được tách khỏi dòng hiển thị thông thường của trang web. Vì vậy nên bạn để ý là hình ảnh sẽ xuất hiện ngay từ phần đầu trang chứ không có khoảng trống nào ở phía trên. Dường như là nút nhấn đó không hề tồn tại.
  • Luật CSS right: 20px; được áp dụng để thiết lập khoảng cách giữa
    cạnh bên phải của nút nhấn
    và cạnh bên phải của khung hiển thị của trình duyệt.
  • Luật CSS bottom: 10px; được áp dụng để thiết lập khoảng cách giữa
    cạnh bên dưới của nút nhấn
    và cạnh bên dưới của khung hiển thị của trình duyệt.

Sử dụng position: absolute;

Luật CSS position: absolute; sẽ nói với các trình duyệt web rằng, chúng ta muốn thiết lập vị trí của phần tử tương quan với container cha bao quanh phía bên ngoài phần tử. Và điều kiện cần thêm là container ở bao quanh phía ngoài không sử dụng position: static;.

Chúng ta sẽ xem một trường hợp sử dụng đơn giản của absolute khi phác họa một thẻ sản phẩm có gắn một nhãn sale-off nhỏ. Nhãn sale-off sẽ được canh chỉnh vị trí tương quan với container cha chính là thẻ sản phẩm bao quanh bên ngoài.

sale.html

<!doctype html>
<html> <head> <meta charset="utf-8"> <title>Good price</title> <link rel="stylesheet" href="sale.css"> </head> <body> <div class="card"> <!-- some elements for product's information go here --> <span class="card-tag"></span> </div> </body>
</html>

sale.css

.card { width: 270px; height: 360px; background-color: WhiteSmoke;
} .card-tag { width: 110px; height: 40px; background-color: Tomato;
} /* positioning .card-tag */ .card { position: relative;
} .card-tag { position: absolute; right: 0px; top: 15px;
}

Trong trường hợp container cha ở phía bên ngoài có position: static, trình duyệt web sẽ kiểm tra container tiếp theo bao quanh container cha, và cứ thế tiếp tục cho đến khi tìm thấy một container vỏ bọc không phải là static, sau đó thực hiện canh chỉnh phần tử ban đầu theo vị trí của container phù hợp đã tìm được.

Sử dụng position: relative;

Luật CSS position: relative; sẽ nói với các trình duyệt web rằng, chúng ta muốn thiết lập vị trí của phần tử HTML tương quan với vị trí mặc định của chính nó. Không giống với 2 giá trị fixedabsolute, giá trị relative không tách phần tử HTML khỏi dòng hiển thị thông thường của trang web. Vì vậy nên giá trị này thường được sử dụng khi chúng ta muốn thực hiện những chỉnh sửa nhỏ về vị trí của phần tử HTML ví dụ như di chuyển khoảng vài px để cân bằng thiết kế.

Hãy xem xét ví dụ dưới đây. Nút nhấn thứ 2 có nội dung chữ bên trong được canh chỉnh lại một chút để trông cân bằng hơn.

relative.html

<!doctype html>
<html> <head> <meta charset="utf-8"> <title>Back to Top</title> <link rel="stylesheet" href="relative.css"> </head> <body> <button class="btn"> ^ Back to Top </button> <button class="btn"> <span class="btn-icon">^</span> <span class="btn-label">Back to Top</span> </button> </body>
</html>

relative.css

.btn { font-size: 15px; width: 150px; height: 50px; color: White; background-color: DodgerBlue; border: none; cursor: pointer;
} .btn-label { position: relative; left: 5px;
} .btn-icon { font-weight: bold; position: relative; top: 3px; left: -7px;
}

Bài viết về các thuộc tính position của chúng ta đến đây là kết thúc. Trong bài tiếp theo, chúng ta sẽ nói về việc thiết lập phong cách hiển thị cho các nội dung chữ và xây dựng một thanh điều hướng (1 cái đơn giản thôi 😄).

Bình luận

Bài viết tương tự

- vừa được xem lúc

Căn giữa các phần tử HTML theo chiều dọc (phần 1)

Bài viết được dịch từ bài Vertical centering of elements in HTML xuất bản ngày 18/01/2015 trên trang Web++. .

0 0 79

- vừa được xem lúc

Căn giữa phần tử trong CSS

1. Theo chiều ngang. Đó có phải là phần tử inline hay inline-* (như text hay links). .

0 0 66

- vừa được xem lúc

99% không biết đến mẹo này khi sử dụng Flexbox CSS

Hello lại là mình đây. Bài viết hôm nay mình sẽ giới thiệu tới mọi người một trick khá hay khi dùng CSS flexbox nhé. 1. Chia layout với flexbox.

0 0 62

- vừa được xem lúc

Vanilla JS Project: Tính tuổi

1. Yêu cầu.

0 0 72

- vừa được xem lúc

1 số UI component và layout hữu ích với Frontend

Giới thiệu. Hôm nay mình xin chia sẻ 1 số Layout và UI component quen mà có lẽ là quen thuộc với nhiều người khi làm dự án, hay bắt gặp trên mạng.

0 0 65

- vừa được xem lúc

Style text css

Giới thiệu. Chào 2021, mình sẽ giới thiệu vài kiểu style cho text màu mè chút cho rực rỡ .

0 0 44