position-area
Baseline
2026
*
Newly available
Since January 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
* Some parts of this feature may have varying levels of support.
Thuộc tính position-area CSS cho phép một phần tử được định vị neo được đặt tương đối với các cạnh của phần tử neo liên kết bằng cách đặt phần tử được định vị trên một hoặc nhiều ô của một lưới 3x3 ngầm định, trong đó phần tử neo là ô trung tâm.
position-area cung cấp một giải pháp thay thế thuận tiện cho việc gắn kết và định vị một phần tử tương đối với neo thông qua inset properties và hàm anchor(). Khái niệm dựa trên lưới giải quyết trường hợp sử dụng phổ biến là định vị các cạnh của khối chứa của phần tử được định vị tương đối với các cạnh của phần tử neo mặc định của nó.
Nếu một phần tử không có phần tử neo mặc định, hoặc không phải là phần tử được định vị tuyệt đối, thuộc tính này không có hiệu lực.
Note:
Thuộc tính này ban đầu được đặt tên và hỗ trợ trong các trình duyệt Chromium là inset-area, với các giá trị thuộc tính giống nhau. Cả hai tên thuộc tính sẽ được hỗ trợ trong một thời gian ngắn, cho mục đích tương thích ngược.
Cú pháp
/* Giá trị mặc định */
position-area: none;
/* Hai từ khóa <position-area> xác định một ô cụ thể */
position-area: top left;
position-area: start end;
position-area: block-start center;
position-area: inline-start block-end;
position-area: x-start y-end;
position-area: center self-y-end;
/* Hai từ khóa <position-area> trải rộng hai ô */
position-area: top span-left;
position-area: center span-start;
position-area: inline-start span-block-end;
position-area: y-start span-x-end;
/* Hai từ khóa <position-area> trải rộng ba ô */
position-area: top span-all;
position-area: block-end span-all;
position-area: self-x-start span-all;
/* Một từ khóa <position-area> với từ khóa thứ hai ngầm định */
position-area: top; /* equiv: top span-all */
position-area: inline-start; /* equiv: inline-start span-all */
position-area: center; /* equiv: center center */
position-area: span-all; /* equiv: center center */
position-area: end; /* equiv: end end */
/* Giá trị toàn cục */
position-area: inherit;
position-area: initial;
position-area: revert;
position-area: revert-layer;
position-area: unset;
Giá trị
Giá trị thuộc tính là hai từ khóa <position-area>, hoặc từ khóa none. Nếu chỉ cung cấp một từ khóa <position-area>, từ khóa thứ hai được suy ra.
<position-area>-
Xác định vùng của lưới vùng vị trí để đặt các phần tử được định vị đã chọn.
none-
Không có vùng vị trí nào được đặt.
Mô tả
Thuộc tính position-area cung cấp một giải pháp thay thế cho hàm anchor() để định vị các phần tử tương đối với các neo. position-area hoạt động dựa trên khái niệm lưới 3x3 của các ô, được gọi là lưới vùng vị trí, với phần tử neo là ô trung tâm:
Các ô lưới được chia thành các hàng và cột:
- Ba hàng được biểu diễn bởi các giá trị vật lý
top,centervàbottom. Chúng cũng có các tương đương logic nhưblock-start,centervàblock-end, và các tương đương tọa độ —y-start,centervày-end. - Ba cột được biểu diễn bởi các giá trị vật lý
left,centervàright. Chúng cũng có các tương đương logic nhưinline-start,centervàinline-end, và các tương đương tọa độ —x-start,centervàx-end.
Kích thước của ô trung tâm được xác định bởi khối chứa của phần tử neo, trong khi kích thước của cạnh ngoài của lưới được xác định bởi khối chứa của phần tử được định vị.
Giá trị <position-area> được tạo thành từ một hoặc hai từ khóa, xác định vùng lưới mà phần tử được định vị cần được đặt vào. Cụ thể, khối chứa của phần tử được định vị được đặt thành vùng lưới đó.
Ví dụ:
- Bạn có thể chỉ định giá trị hàng và giá trị cột để đặt phần tử được định vị vào một ô lưới cụ thể — ví dụ,
top left(tương đương logicstart start) hoặcbottom center(tương đương logicend center) sẽ đặt phần tử được định vị vào ô trên phải hoặc ô dưới giữa. - Bạn có thể chỉ định giá trị hàng hoặc cột cộng với giá trị
span-*để trải rộng hai hoặc ba ô. Giá trị đầu tiên xác định hàng hoặc cột để đặt phần tử được định vị, ban đầu đặt nó vào trung tâm, và giá trị kia xác định các ô khác của hàng hoặc cột đó để trải rộng. Ví dụ:top span-leftkhiến phần tử được định vị được đặt vào trung tâm của hàng trên, và trải rộng qua các ô trung tâm và bên trái của hàng đó.block-end span-inline-endkhiến phần tử được định vị được đặt vào trung tâm của hàng cuối khối, và trải rộng qua các ô trung tâm và cuối inline của hàng đó.bottom span-allvày-end span-allkhiến phần tử được định vị được đặt vào trung tâm của hàng dưới, và trải rộng qua ba ô, trong trường hợp này là các ô trái, giữa và phải của hàng dưới.
Để biết thông tin chi tiết về các tính năng neo, cách sử dụng và thuộc tính position-area, hãy xem mô-đun Định vị neo CSS và hướng dẫn Sử dụng định vị neo CSS, cụ thể là phần về thiết lập position-area.
Hành vi mặc định đã điều chỉnh
Khi giá trị <position-area> được đặt trên một phần tử được định vị, một số thuộc tính của nó sẽ có hành vi mặc định được điều chỉnh để cung cấp căn chỉnh mặc định tốt.
Giá trị normal của thuộc tính tự căn chỉnh
Giá trị normal của các thuộc tính tự căn chỉnh, bao gồm align-items, align-self, justify-items và justify-self, hoạt động như start, end hoặc anchor-center. Giá trị mà thuộc tính tự căn chỉnh mặc định phụ thuộc vào vị trí của phần tử:
- Nếu giá trị
position-areachỉ định vùng trung tâm trong một trục, căn chỉnh mặc định trong trục đó làanchor-center. - Nếu không, hành vi sẽ ngược lại với vùng được chỉ định bởi thuộc tính
position-area. Ví dụ, nếu giá trịposition-areachỉ định vùng bắt đầu của trục của nó, căn chỉnh mặc định trong trục đó làend.
Ví dụ, nếu writing-mode được đặt là horizontal-tb, position-area: top span-x-start khiến phần tử được định vị được đặt vào trung tâm của hàng trên, và trải rộng qua các ô trung tâm và bắt đầu của hàng đó. Trong trường hợp này, các thuộc tính tự căn chỉnh sẽ mặc định là align-self: end và justify-self: anchor-center.
Thuộc tính và giá trị inset
Khi một phần tử được định vị neo được định vị bằng thuộc tính position-area, bất kỳ inset properties nào được đặt, chẳng hạn như top hoặc inset-inline-end, sẽ xác định độ lệch từ vùng vị trí. Một số giá trị thuộc tính khác, như max-block-size: 100%, cũng sẽ tương đối với vùng vị trí. Bất kỳ thuộc tính inset nào được đặt hoặc mặc định là auto sẽ hoạt động như thể giá trị của chúng được đặt là 0.
Về chiều rộng của phần tử được định vị
Nếu phần tử được định vị không có kích thước cụ thể được đặt trên nó, kích thước của nó sẽ mặc định là kích thước nội tại của nó, nhưng nó cũng sẽ bị ảnh hưởng bởi kích thước của lưới vùng vị trí.
Nếu phần tử được định vị được đặt trong một ô đơn trên-giữa, dưới-giữa hoặc giữa-giữa, kích thước khối của nó sẽ bằng kích thước khối chứa của neo, lớn lên, xuống hoặc cả hai hướng tương ứng. Phần tử được định vị sẽ căn chỉnh với ô lưới đã chỉ định nhưng áp dụng cùng chiều rộng như phần tử neo. Tuy nhiên, nó sẽ không cho phép nội dung tràn ra — chiều rộng tối thiểu của nó sẽ là min-content của nó (như được xác định bởi chiều rộng của từ dài nhất của nó).
Nếu phần tử được định vị được đặt trong bất kỳ ô lưới đơn nào khác (chẳng hạn với position-area: top left) hoặc được đặt để trải rộng hai hoặc nhiều ô lưới (ví dụ sử dụng position-area: bottom span-all), nó sẽ căn chỉnh với vùng lưới đã chỉ định nhưng hoạt động như thể nó có width là max-content được đặt trên nó. Nó đang được định kích thước theo kích thước khối chứa của nó, là kích thước được áp đặt lên nó khi được đặt là position: fixed. Nó sẽ kéo dài rộng như nội dung văn bản, mặc dù nó cũng có thể bị giới hạn bởi cạnh của <body>.
Sử dụng position-area để định vị popover
Khi sử dụng position-area để định vị popover, hãy lưu ý rằng các kiểu mặc định cho popover có thể xung đột với vị trí bạn đang cố đạt được. Các thủ phạm thường gặp là các kiểu mặc định cho margin và inset, vì vậy nên đặt lại những kiểu đó:
.my-popover {
margin: 0;
inset: auto;
}
Nhóm làm việc CSS đang xem xét các cách để tránh yêu cầu cách giải quyết này.
Định nghĩa hình thức
| Initial value | none |
|---|---|
| Applies to | Positioned elements with a default anchor element |
| Inherited | no |
| Computed value | as specified |
| Animation type | discrete |
Cú pháp hình thức
position-area =
none |
<position-area>
<position-area> =
[ left | center | right | span-left | span-right | x-start | x-end | span-x-start | span-x-end | self-x-start | self-x-end | span-self-x-start | span-self-x-end | span-all ] || [ top | center | bottom | span-top | span-bottom | y-start | y-end | span-y-start | span-y-end | self-y-start | self-y-end | span-self-y-start | span-self-y-end | span-all ] |
[ block-start | center | block-end | span-block-start | span-block-end | span-all ] || [ inline-start | center | inline-end | span-inline-start | span-inline-end | span-all ] |
[ self-block-start | center | self-block-end | span-self-block-start | span-self-block-end | span-all ] || [ self-inline-start | center | self-inline-end | span-self-inline-start | span-self-inline-end | span-all ] |
[ start | center | end | span-start | span-end | span-all ]{1,2} |
[ self-start | center | self-end | span-self-start | span-self-end | span-all ]{1,2}
Ví dụ
>Ví dụ cơ bản
Trong ví dụ này, một phần tử được định vị được gắn kết và định vị tương đối với neo liên kết của nó bằng thuộc tính position-area.
HTML
HTML bao gồm một <div> và một <p>. <p> sẽ được định vị tương đối với <div> bằng CSS. Chúng ta cũng bao gồm một khối style sẽ được hiển thị. Tất cả các phần tử được đặt để có thể chỉnh sửa trực tiếp thông qua thuộc tính contenteditable.
<div class="anchor" contenteditable="true">⚓︎</div>
<p class="positionedElement" contenteditable="true">This can be edited.</p>
<style contenteditable="true">.positionedElement {
position-area: top center;
}
</style>
CSS
Chúng ta chuyển <div> thành một phần tử neo với thuộc tính anchor-name. Sau đó chúng ta liên kết <p> được định vị tuyệt đối với nó bằng cách đặt giá trị position-anchor của nó thành cùng tên neo.
Chúng ta đặt giá trị position-area ban đầu là top center. Giá trị này được đặt trên bộ chọn p, vì vậy giá trị có độ đặc hiệu thấp hơn bất kỳ giá trị nào được thêm vào bộ chọn lớp .positionedElement của khối <style>. Do đó, bạn có thể ghi đè giá trị position-area ban đầu bằng cách đặt giá trị position-area bên trong khối style.
.anchor {
anchor-name: --infobox;
background: palegoldenrod;
font-size: 3em;
width: fit-content;
border: 1px solid goldenrod;
margin: 100px auto;
}
p {
position: absolute;
position-anchor: --infobox;
position-area: top center;
margin: 0;
background-color: darkkhaki;
border: 1px solid darkolivegreen;
}
style {
display: block;
white-space: pre;
font-family: monospace;
background-color: #ededed;
-webkit-user-modify: read-write-plaintext-only;
line-height: 1.5;
padding: 10px;
}
Kết quả
Thử thay đổi lượng văn bản trong phần tử được định vị neo để xem nó lớn lên như thế nào. Ngoài ra, thử thay đổi giá trị của thuộc tính position-area thành một giá trị khác, như center.
So sánh giá trị position-area
Bản demo này tạo ra một neo và gắn kết một phần tử được định vị với nó. Nó cũng cung cấp một menu thả xuống cho phép bạn chọn các giá trị position-area khác nhau để áp dụng cho phần tử được định vị, để xem hiệu ứng của chúng. Một trong các tùy chọn khiến một trường văn bản xuất hiện cho phép bạn nhập giá trị tùy chỉnh. Cuối cùng, một hộp kiểm được cung cấp để bật và tắt writing-mode: vertical-lr, cho phép bạn quan sát cách các hiệu ứng của giá trị position-area khác nhau giữa các chế độ viết.
HTML
Trong HTML, chúng ta chỉ định hai phần tử <div>, một với lớp anchor và một với lớp infobox. Những phần tử này được dự định là phần tử neo và phần tử được định vị mà chúng ta sẽ liên kết với nhau. Chúng ta đã bao gồm thuộc tính contenteditable trên cả hai, làm cho chúng có thể chỉnh sửa trực tiếp.
Chúng ta cũng đã bao gồm hai biểu mẫu chứa các phần tử <select> và <input type="text"> để đặt các giá trị position-area khác nhau, và phần tử <input type="checkbox"> để bật/tắt writing-mode dọc. Mã cho những phần tử này, cùng với JavaScript, đã được ẩn đi để ngắn gọn.
<div class="anchor" contenteditable>⚓︎</div>
<div class="infobox">
<p contenteditable>You can edit this text.</p>
</div>
CSS
Trong CSS, trước tiên chúng ta khai báo <div> anchor là phần tử neo bằng cách đặt tên neo trên nó thông qua thuộc tính anchor-name.
Phần tử được định vị được liên kết với phần tử neo bằng cách đặt tên neo của nó làm giá trị của thuộc tính position-anchor của phần tử được định vị. Chúng ta cũng cung cấp cho nó một vị trí ban đầu với position-area: top left; giá trị này sẽ bị ghi đè khi các giá trị mới được chọn từ menu <select>. Cuối cùng, chúng ta đặt opacity của nó là 0.8, để khi phần tử được định vị được cung cấp giá trị position-area đặt nó lên trên neo, bạn vẫn có thể thấy vị trí tương đối của các phần tử.
.anchor {
anchor-name: --my-anchor;
}
.infobox {
position-anchor: --my-anchor;
position: fixed;
opacity: 0.8;
position-area: top left;
}
Kết quả
Kết quả như sau:
Hãy thử chọn các giá trị position-area mới từ menu <select> để xem hiệu ứng của chúng đối với vị trí của infobox. Chọn giá trị "Custom" và thử nhập một số giá trị position-area tùy chỉnh vào trường nhập văn bản để xem hiệu ứng của chúng. Thêm văn bản vào phần tử neo và phần tử được định vị neo để xem phần tử được định vị neo lớn lên như thế nào dựa trên giá trị position-area. Cuối cùng, đánh dấu hộp kiểm và sau đó thử nghiệm với các giá trị position-area khác nhau để xem giá trị nào cho kết quả giống nhau giữa các chế độ viết và giá trị nào cho kết quả khác nhau.
Đặc tả
| Specification |
|---|
| CSS Anchor Positioning Module Level 1> # position-area> |
Tương thích trình duyệt
Xem thêm
anchor-nameposition-anchorposition-try-fallbacks- Hàm
anchor() - Giá trị
<position-area> - Hướng dẫn Sử dụng định vị neo CSS
- Hướng dẫn Tùy chọn dự phòng và ẩn có điều kiện khi tràn
- Mô-đun Định vị neo CSS