Thuộc tính Position trong CSS: Hướng dẫn từ A-Z
Bạn đã bao giờ ‘bất lực’ khi cố gắng di chuyển một phần tử đến đúng vị trí mong muốn trong CSS chưa? Thật may, thuộc tính position chính là ‘vị cứu tinh’ bạn đang tìm kiếm. Nó cho phép bạn toàn quyền kiểm soát vị trí và cách hiển thị của các phần tử. Trong bài viết này, Da I Kin sẽ cùng bạn tìm hiểu từ A-Z về 5 giá trị cốt lõi của position, giúp bạn tự tin làm chủ mọi layout phức tạp.
Giới thiệu Thuộc tính position trong CSS
Thuộc tính position là gì?
Hãy tưởng tượng trang web của bạn là một căn phòng và các phần tử HTML là đồ đạc. Mặc định, mọi thứ được xếp theo một trật tự tự nhiên từ trên xuống dưới, từ trái qua phải. Thuộc tính position trong CSS chính là công cụ quyền năng cho phép bạn phá vỡ trật tự đó. Nó xác định phương pháp định vị mà một phần tử sử dụng trên trang.
Nói một cách đơn giản, position quyết định một phần tử sẽ nằm ở đâu trong bố cục. Thay vì chỉ đi theo luồng mặc định của tài liệu, bạn có thể chỉ định chính xác vị trí của nó so với chính nó, so với một phần tử cha, hay thậm chí so với toàn bộ cửa sổ trình duyệt.
Vai trò của position trong việc bố cục (layout) trang web
Vai trò của position là cực kỳ quan trọng trong việc xây dựng các layout hiện đại và phức tạp. Nó không chỉ đơn giản là di chuyển phần tử, mà còn là nền tảng cho nhiều kỹ thuật thiết kế giao diện:
- Tạo các lớp (Layers): Giúp các phần tử có thể chồng lên nhau. Đây là yếu tố cốt lõi để tạo ra các menu dropdown, hộp thoại modal, hay các chú thích (tooltips).
- Cố định phần tử: Cho phép tạo ra các thanh điều hướng (navigation bar) hoặc chân trang (footer) luôn hiển thị trên màn hình dù người dùng cuộn trang đến đâu.
- Định vị chính xác: Đặt các icon, nút bấm, hay các nhãn thông báo ở những vị trí cụ thể trên một hình ảnh hoặc một thành phần khác.
Nắm vững cách dùng position trong CSS là một kỹ năng thiết yếu. Nó giúp bạn biến những ý tưởng thiết kế từ tĩnh thành động và tương tác một cách hiệu quả.

Thuộc tính position có mấy giá trị?
Thuộc tính position có 5 giá trị chính, mỗi giá trị lại có một cách hoạt động và mục đích sử dụng riêng. Hiểu rõ sự khác biệt giữa chúng là chìa khóa để bạn sử dụng công cụ này một cách chính xác.
position static
Đây là giá trị mặc định của mọi phần tử HTML. Khi một phần tử có position: static, nó sẽ hiển thị theo đúng luồng thông thường của trang. Các thuộc tính định vị như top, bottom, left, right và z-index sẽ hoàn toàn vô dụng với nó.
position relative
Khi bạn đặt một phần tử là position: relative, nó vẫn nằm trong luồng tài liệu bình thường. Tuy nhiên, bây giờ bạn có thể sử dụng các thuộc tính top, left, bottom, right để dịch chuyển nó so với vị trí ban đầu của chính nó. Điều quan trọng là khoảng không gian ban đầu của phần tử vẫn được giữ lại, các phần tử khác sẽ không bị xô lệch để lấp vào chỗ trống đó.
Một trong những ứng dụng quan trọng nhất của position relative là để tạo ra một “ngữ cảnh định vị” cho các phần tử con có position: absolute.
position absolute
Đây là lúc mọi thứ trở nên thú vị. Khi một phần tử được đặt là position: absolute, nó sẽ bị loại bỏ hoàn toàn khỏi luồng tài liệu thông thường. Các phần tử khác sẽ hành xử như thể nó không tồn tại.
Nó sẽ được định vị so với “tổ tiên được định vị” gần nhất. Tổ tiên này là phần tử cha, ông, hoặc cụ… có thuộc tính position là relative, absolute, fixed, hoặc sticky. Nếu không tìm thấy tổ tiên nào như vậy, nó sẽ định vị so với thẻ <body>.
position fixed
Giống như absolute, position: fixed cũng loại bỏ phần tử ra khỏi luồng tài liệu. Tuy nhiên, thay vì định vị so với một phần tử cha, nó sẽ định vị so với khung nhìn (viewport) của trình duyệt. Điều này có nghĩa là phần tử sẽ luôn ở nguyên một vị trí trên màn hình, ngay cả khi người dùng cuộn trang. Đây là cách hoàn hảo để tạo các thanh header cố định, nút “Quay lại đầu trang” hay các banner quảng cáo.
position sticky
Position sticky là một sự kết hợp thông minh giữa relative và fixed. Một phần tử sticky ban đầu hoạt động như relative. Nhưng khi bạn cuộn trang và vị trí của nó chạm đến một ngưỡng nhất định (được xác định bởi top, bottom…), nó sẽ “dính” lại và hoạt động như position: fixed. Đây là lựa chọn lý tưởng cho các thanh menu hoặc sidebar cần bám theo khi người dùng cuộn xuống một nội dung dài.

Các thuộc tính bổ trợ
Bản thân thuộc tính position chỉ xác định phương pháp định vị. Để thực sự di chuyển một phần tử, bạn cần đến sự trợ giúp của bốn thuộc tính bổ trợ: top, left, bottom, và right.
Cách sử dụng để dịch chuyển phần tử
Các thuộc tính này xác định khoảng cách từ các cạnh của phần tử đến các cạnh của khối tham chiếu (containing block) của nó. Ví dụ:
top: 20px;: Đẩy cạnh trên của phần tử xuống dưới 20px so với cạnh trên của khối tham chiếu.left: 10px;: Đẩy cạnh trái của phần tử sang phải 10px so với cạnh trái của khối tham chiếu.
Bạn có thể sử dụng các đơn vị khác nhau như px, %, em, rem… tùy vào nhu cầu thiết kế.
Lưu ý khi dùng với các giá trị position khác nhau
Điều quan trọng cần nhớ là các thuộc tính này chỉ có tác dụng khi phần tử có giá trị position khác static.
- Với
position: relative:top: 20pxsẽ di chuyển phần tử xuống 20px so với vị trí ban đầu của nó. - Với
position: absolute:top: 20pxsẽ đặt phần tử cách cạnh trên của tổ tiên được định vị gần nhất là 20px. - Với
position: fixed:top: 20pxsẽ đặt phần tử cách cạnh trên của cửa sổ trình duyệt là 20px. - Với
position: sticky:top: 0;sẽ xác định điểm mà tại đó phần tử bắt đầu “dính” vào cạnh trên của viewport khi cuộn.

So sánh position relative vs absolute
Hiểu rõ sự khác biệt giữa position relative vs absolute là một trong những cột mốc quan trọng nhất khi học CSS. Rất nhiều người mới bắt đầu cảm thấy bối rối ở phần này, nhưng thực ra chúng khá logic.
Điểm khác biệt cốt lõi
Đây chính là điểm khác biệt lớn nhất và quyết định cách hai giá trị này hoạt động:
position: relative: Khối tham chiếu của nó chính là vị trí ban đầu của chính nó trong luồng tài liệu. Khi bạn dùngtop: 10px, nó dịch chuyển 10px so với chỗ nó vốn dĩ nên ở.position: absolute: Khối tham chiếu của nó là phần tử tổ tiên gần nhất cópositionkhácstatic. Nếu không tìm thấy, nó sẽ tham chiếu đến<body>. Đây là lý do chúng ta thường tạo một thẻdivcha vớiposition: relativeđể “nhốt” một phần tửabsolutebên trong.
Ảnh hưởng đến luồng tài liệu
position: relative: Phần tử vẫn chiếm giữ không gian ban đầu của nó. Dù bạn di chuyển nó đi đâu, cái “bóng” của nó vẫn ở đó, và các phần tử khác không thể chen vào vị trí đó.position: absolute: Phần tử bị nhấc bổng hoàn toàn khỏi luồng. Nó không còn chiếm không gian nữa, và các phần tử khác sẽ lấp đầy vào khoảng trống mà nó để lại.
Khi nào nên sử dụng Position relative?
Bạn nên dùng position: relative trong hai trường hợp chính:
- Khi cần tinh chỉnh vị trí nhỏ: Bạn muốn dịch chuyển một phần tử một chút mà không làm ảnh hưởng đến bố cục chung.
- Khi cần làm “container” cho phần tử
absolute: Đây là cách sử dụng phổ biến nhất. Bằng cách đặtposition: relativecho thẻ cha, bạn tạo ra một ranh giới an toàn để phần tử conposition: absolutecó thể định vị bên trong đó.

Quản lý lớp hiển thị với thuộc tính z-index
Khi các phần tử bắt đầu được định vị và có thể chồng chéo lên nhau, một câu hỏi xuất hiện: Phần tử nào sẽ nằm trên, phần tử nào nằm dưới? Đó là lúc z-index trong CSS phát huy tác dụng.
Z-index là gì và hoạt động như thế nào?
Hãy tưởng tượng các phần tử được định vị của bạn là những tờ giấy trên bàn. Thuộc tính z-index quyết định thứ tự xếp chồng của những tờ giấy đó.
- Nó chỉ hoạt động trên các phần tử có
positionkhácstatic. - Giá trị của
z-indexlà một số nguyên (có thể là số âm). - Phần tử có
z-indexcao hơn sẽ được hiển thị chồng lên trên phần tử cóz-indexthấp hơn.
Mặc định, các phần tử có z-index: auto. Chúng sẽ được xếp chồng theo thứ tự xuất hiện trong mã HTML.
Ngữ cảnh xếp chồng
Đây là một khái niệm hơi nâng cao nhưng rất quan trọng. Khi bạn gán z-index cho một phần tử (với giá trị khác auto), nó sẽ tạo ra một ngữ cảnh xếp chồng mới.
Điều này có nghĩa là các phần tử con bên trong nó sẽ được sắp xếp với nhau theo z-index của chúng, nhưng toàn bộ nhóm này sẽ di chuyển cùng nhau trong ngữ cảnh xếp chồng của phần tử cha. Một phần tử con dù có z-index là 9999 cũng không thể hiển thị trên một phần tử khác nằm ngoài ngữ cảnh xếp chồng nếu phần tử cha của nó có z-index thấp hơn.

Phân biệt Position và Display
Trong CSS, position và display là hai thuộc tính nền tảng nhưng lại có chức năng hoàn toàn khác nhau. Việc nhầm lẫn chúng có thể dẫn đến những lỗi bố cục khó chịu.
Chức năng chính của Position
Thuộc tính position trả lời cho câu hỏi: “Phần tử này nằm ở đâu?“. Nó kiểm soát phương pháp định vị và thứ tự xếp chồng của một phần tử, cho phép bạn đặt nó ở những vị trí cụ thể, tách biệt khỏi luồng thông thường nếu cần.
Chức năng chính của Display
Trong khi đó, thuộc tính display trả lời cho câu hỏi: “Phần tử này là gì và nó chiếm không gian ra sao?“. Nó xác định cách một phần tử được hiển thị, ví dụ như:
display: block: Chiếm toàn bộ chiều rộng, bắt đầu trên một dòng mới (như<div>,<p>).display: inline: Chỉ chiếm không gian cần thiết, nằm trên cùng một dòng với các phần tử khác (như<span>,<a>).display: flex: Kích hoạt mô hình layout Flexbox.display: grid: Kích hoạt mô hình layout Grid.
Khi nào chúng tương tác với nhau?
Có một điểm tương tác quan trọng bạn cần biết. Khi bạn đặt một phần tử có position: absolute hoặc position: fixed, giá trị display được tính toán của nó sẽ thay đổi. Ví dụ, một phần tử <span> (mặc định là display: inline) khi được đặt position: absolute sẽ hành xử giống như một phần tử display: block. Bạn có thể gán chiều rộng và chiều cao cho nó, điều mà bạn không thể làm với một phần tử inline thông thường.

Lời kết
Vậy là chúng ta đã cùng nhau đi qua toàn bộ các khía cạnh quan trọng của thuộc tính position. Từ 5 giá trị cốt lõi, các thuộc tính bổ trợ cho đến z-index và sự khác biệt với display. Ban đầu có thể hơi phức tạp, nhưng chỉ cần thực hành một chút, bạn sẽ thấy việc kiểm soát layout trở nên dễ dàng hơn rất nhiều.
Hiểu rõ position không chỉ giúp bạn giải quyết các bài toán về bố cục mà còn mở ra cánh cửa để tạo nên những giao diện web sáng tạo và chuyên nghiệp hơn.
Bạn còn vướng mắc nào về cách dùng position trong CSS không? Hãy chia sẻ bên dưới phần bình luận nhé!
Nếu bạn cần thiết kế website chuyên nghiệp được tối ưu từng dòng code để phát triển thương hiệu, Da I Kin luôn sẵn sàng tư vấn. Liên hệ với chúng tôi ngay hôm nay!