overlay

Khả dụng hạn chế

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Thuộc tính CSS overlay chỉ định liệu một phần tử xuất hiện trong lớp trên cùng (ví dụ: một popover đang hiển thị hoặc phần tử <dialog> modal) có thực sự được hiển thị trong lớp trên cùng hay không. Thuộc tính này chỉ có liên quan trong danh sách các giá trị transition-property, và chỉ khi allow-discrete được đặt làm transition-behavior.

Cần lưu ý rằng overlay chỉ có thể được đặt bởi trình duyệt — các kiểu do tác giả viết không thể thay đổi giá trị overlay của bất kỳ phần tử nào. Tuy nhiên, bạn có thể thêm overlay vào danh sách các thuộc tính chuyển tiếp được đặt trên một phần tử. Điều này khiến việc xóa phần tử khỏi lớp trên cùng bị trì hoãn để nó có thể được hoạt hình thay vì biến mất ngay lập tức.

Note: Khi chuyển tiếp overlay, bạn cần đặt transition-behavior: allow-discrete trên chuyển tiếp để nó hoạt hình. Hoạt hình overlay khác với hoạt hình rời rạc thông thường ở chỗ trạng thái hiển thị (tức là auto) sẽ luôn được hiển thị trong toàn bộ thời gian chuyển tiếp, bất kể đó là trạng thái bắt đầu hay kết thúc.

Cú pháp

css
/* Giá trị từ khóa */
overlay: auto;
overlay: none;

/* Giá trị toàn cục */
overlay: inherit;
overlay: initial;
overlay: revert;
overlay: revert-layer;
overlay: unset;

Giá trị

auto

Phần tử được hiển thị trong lớp trên cùng nếu nó được đưa lên lớp trên cùng.

none

Phần tử không được hiển thị trong lớp trên cùng.

Định nghĩa chính thức

Initial valuenone
Applies toall elements
Inheritedno
Computed valueas specified
Animation typeDiscrete behavior except when animating to or from none is visible for the entire duration

Cú pháp chính thức

overlay = 
none |
auto

Ví dụ

Chuyển tiếp một popover

Trong ví dụ này, một popover được hoạt hình khi nó chuyển tiếp từ trạng thái ẩn sang hiện và ngược lại.

HTML

HTML chứa một phần tử <div> được khai báo là popover sử dụng thuộc tính popover, và một phần tử <button> được chỉ định là điều khiển hiển thị popover sử dụng thuộc tính popovertarget.

html
<button popovertarget="mypopover">Show the popover</button>
<div popover="auto" id="mypopover">I'm a Popover! I should animate.</div>

CSS

Thuộc tính overlay chỉ có mặt trong danh sách các thuộc tính được chuyển tiếp. Vì overlay là thuộc tính được điều khiển bởi tác nhân người dùng, nó không được khai báo trong các trạng thái trước hoặc sau chuyển tiếp.

css
html {
  font-family: "Helvetica", "Arial", sans-serif;
}

[popover]:popover-open {
  opacity: 1;
  transform: scaleX(1);
}

[popover] {
  font-size: 1.2rem;
  padding: 10px;

  /* Final state of the exit animation */
  opacity: 0;
  transform: scaleX(0);

  transition:
    opacity 0.7s,
    transform 0.7s,
    overlay 0.7s allow-discrete,
    display 0.7s allow-discrete;
  /* Equivalent to
  transition: all 0.7s allow-discrete; */
}

/* Needs to be included after the previous [popover]:popover-open
   rule to take effect, as the specificity is the same */
@starting-style {
  [popover]:popover-open {
    opacity: 0;
    transform: scaleX(0);
  }
}

/* Transition for the popover's backdrop */

[popover]::backdrop {
  background-color: transparent;
  transition:
    display 0.7s allow-discrete,
    overlay 0.7s allow-discrete,
    background-color 0.7s;
  /* Equivalent to
  transition: all 0.7s allow-discrete; */
}

[popover]:popover-open::backdrop {
  background-color: rgb(0 0 0 / 25%);
}

/* Nesting selectors (&) cannot represent pseudo-elements, so this 
   starting-style rule cannot be nested. */

@starting-style {
  [popover]:popover-open::backdrop {
    background-color: transparent;
  }
}

Hai thuộc tính chúng ta muốn hoạt hình là opacitytransform: chúng ta muốn popover mờ dần vào và ra trong khi phát triển và thu nhỏ theo chiều ngang. Chúng ta đặt trạng thái bắt đầu cho các thuộc tính này ở trạng thái ẩn mặc định của phần tử popover (được chọn qua [popover]), và trạng thái kết thúc ở trạng thái mở của popover (được chọn qua lớp giả :popover-open). Sau đó chúng ta đặt thuộc tính transition để hoạt hình giữa hai trạng thái.

Vì phần tử được hoạt hình đang được đưa lên lớp trên cùng khi hiển thị và bị xóa khỏi lớp trên cùng khi ẩn, overlay được thêm vào danh sách các phần tử được chuyển tiếp. Điều này đảm bảo rằng việc xóa phần tử khỏi lớp trên cùng bị trì hoãn cho đến khi hoạt hình kết thúc.

Các bước sau đây cũng cần thiết để hoạt hình hoạt động ở cả hai chiều:

  • Trạng thái bắt đầu cho hoạt hình được đặt bên trong quy tắc at @starting-style. Điều này cần thiết để tránh hành vi không mong muốn. Theo mặc định, các chuyển tiếp không được kích hoạt trong các cập nhật kiểu đầu tiên của phần tử, hoặc khi loại display thay đổi từ none sang loại khác.
  • display cũng được thêm vào danh sách các phần tử được chuyển tiếp để phần tử được hoạt hình hiển thị (đặt thành display: block) trong suốt cả hoạt hình vào và ra.

Kết quả

Thông số kỹ thuật

Thông số kỹ thuật
CSS Positioned Layout Module Level 4
# overlay

Khả năng tương thích trình duyệt

Xem thêm