Lời nói đầu
Có nhiều cách để ẩn một phần tử trong CSS. Bạn có thể ẩn nó bằng cách đặt opacity
xuống 0, visibility
sang hidden
, display
sang none
hoặc bằng cách đặt các giá trị cực trị cho vị trí tuyệt đối.
Bạn có bao giờ tự hỏi tại sao chúng ta có rất nhiều kỹ thuật giấu một phần tử khi tất cả chúng dường như cùng làm một điều tương tự ?
Tất cả các phương pháp này thực ra có khác nhau một chút và sự khác biệt này chỉ ra mỗi phương pháp nên được sử dụng trong một trường hợp cụ thể. Hướng dẫn này sẽ đề cập đến những điểm khác biệt nhỏ mà bạn cần lưu ý khi ẩn phần tử bằng cách sử dụng bất kỳ phương pháp nào ở trên.
Hướng dẫn này sẽ đề cập đến những điểm khác biệt nhỏ mà bạn cần lưu ý khi ẩn phần tử bằng cách sử dụng bất kỳ phương pháp nào ở trên.
Nội dung
1 , Opacity
Thuộc tính opacity
là để thiết lập transparency
(độ trong suốt ) của phần tử. Nó không được thiết kế để thay đổi khung giới hạn của phần tử dưới bất kỳ hính thức nào.
Điều này có nghĩa là cài đặt opacity xuống 0 chỉ giấu đi phần tử một cách trực quan. Phần tử vẫn chiếm vị trí của nó và ảnh hưởng đến bố cục của trang web. Nó cũng sẽ phản hồi lại với tương tác của người dùng.
.hide { opacity: 0;
}
Nếu bạn định sử dụng thuộc tính opacity để ẩn hoàn toàn khỏi màn hình – thật tiếc, điều này là không thể. Phần tử và tất cả nội dung của nó sẽ vẫn được browser hiển thị (hiển thị trắng), giống như tất cả các phần tử khác trên trang web. Nói cách khác, phần tử vẫn hoạt động (vẫn bắt được các sự tương tác từ user) như cách nó khi chưa bị làm mờ.
Chính vì thế tôi khuyến nghị nên sử dụng thuộc tính opacity
tạo ra các hiệu ứng sinh động.
Khi bạn di chuột qua khối thứ hai bị ẩn, phần tử sẽ chuyển đổi trôi chảy từ trạng thái trong suốt hoàn toàn sang rõ ràng. Và khi chuột ko còn ở khối thứ 2 nữa thì khối này bị ẩn đi. Điều này chứng tỏ ràng, khối bị ẩn đi vẫn có thể tiếp nhận các sự tương tác từ user.
2,Visibility
Thuộc tính tiếp theo trong danh sách là Visibility
khả năng hiển thị. Cài đặt thuộc tính này sẽ làm ẩn phần tử .
Cũng giống như thuộc tính opacity
, phần tử ẩn sẽ vẫn ảnh hưởng đến bố cục của trang web. Sự khác biệt duy nhất là thời gian này nó sẽ không nắm bắt bất kỳ tương tác nào của người dùng khi bị ẩn khỏi người dùng.
Thuộc tính này cũng có thể làm được các hình ảnh động miễn là các trạng thái ban đầu và cuối cùng có các giá trị khác nhau. Điều này bảo đảm rằng quá trình chuyển đổi giữa các trạng thái hiển thị có thể được trơn tru thay vì đột ngột.
.hide { visibility: hidden;
}
Demi sự khác nhau giữa Visibility và Opacity
- Lưu ý rằng các phần tử con của một phần tử với
visibility
đặt ởhidden
vẫn có thể vẫn hiển thị nếu thuộc tínhvisibility
của chúng được đặt vềvisible
. - Hãy thử di chuột qua phần tử ẩn và không nằm trong đoạn văn bên, bạn sẽ thấy con trỏ truột của bạn không thay đổi thành con trỏ hình ngón tay.
- Hơn nữa, nếu bạn cố nhấp vào phần tử, các nhấp chuột của bạn sẽ không được tạo ra bất kì sự kiện nào.
- Thẻ
<p>
bên trong<div>
vẫn sẽ nắm bắt tất cả hoạt động của chuột. Ngay khi bạn di chuột qua văn bản, biểu tượng<div>
sẽ được phát hiện và bắt đầu ghi nhận các sự kiện(con trỏ chuột thay đổi và background của cả div thay đổi)
4, Display
Thuộc tính display
ẩn phần tử theo đúng ý nghĩa thực của từ đó. Thiết lập display
về none
bảo đảm khối sẽ không được tạo ra.
Sử dụng thuộc tính này, không có không gian trống nào để lại phía sau khi phần tử đã bị ẩn đi. Không chỉ vậy, bất kỳ tương tác trực tiếp (click, mouse_up, ..v..v. ) nào của người dùng sẽ không thể thực hiện khi display
được đặt ở none
.
Hơn nữa, người đọc sẽ không đọc được nội dung của phần tử. Nó giống như thể phần tử không hề tồn tại.
Tất cả các hậu duệ của phần tử cũng sẽ bị giấu kín. Thuộc tính này không thể được các animation vì vậy sự chuyển tiếp giữa các trạng thái khác nhau luôn luôn đột ngột.
Xin lưu ý, phần tử vẫn có thể truy cập qua DOM . Bạn sẽ có thể thao tác nó giống như với bất kỳ yếu tố khác.
.hide { display: none;
}
Bạn sẽ thấy rằng khối thứ hai có một đoạn văn với thuộc tính display
được thiết lập về block
nhưng đoạn văn vẫn vô hình. Đây là một sự khác biệt nữa giữa visibility: hidden
và display: none
. Trong trường hợp đầu tiên, bất kỳ hậu duệ nào được thiết lập visibility
về visible
sẽ được hiển thị nhưng đó không phải là những gì xảy ra với display
. Tất cả các phần tử con được giấu kín bất kể giá trị của thuộc tính hiển thị.
Bây giờ, di chuột một vài lần trên khối đầu tiên trong bản giới thiệu. Đã hoàn tác? Nhấp vào khối đầu tiên này. Điều này sẽ làm cho khối thứ hai nhìn thấy được. Giá trị bên trong bây giờ là một con số khác không. Điều này là do phần tử, mặc dù ẩn với người dùng nhưng vẫn có thể được thao tác bằng JavaScript.
4, Position
Giả sử bạn có một phần tử mà bạn muốn tương tác nhưng bạn không muốn nó ảnh hưởng đến việc bố trí trang web của bạn. Không có cách nào có thể xử lý khả quan đến lúc này. Một điều bạn có thể làm trong trường hợp này là di chuyển các phần tử ra khỏi khung nhìn. Bằng cách đó nó sẽ không ảnh hưởng đến việc bố trí và vẫn hoạt động được. Đây là cách CSS làm điều đó:
.hide { position: absolute; top: -9999px; left: -9999px;
}
Hãy xem demo này Ý tưởng chính ở đây là đặt các giá trị bên trái và âm cao đủ cao để phần tử không còn hiển thị trên màn hình nữa. Một lợi ích (hoặc nhược điểm tiềm ẩn) của kỹ thuật này là nội dung của một phần tử xác định có thể được đọc bởi các trình đọc màn hình. Điều này hoàn toàn dễ hiểu bởi vì bạn chỉ di chuyển các phần tử ra khỏi khung nhìn để người dùng không thể nhìn thấy nó.
5, Clip-path
Một cách khác để ẩn các phần tử bằng cách cắt chúng. Trước đây, điều này có thể được thực hiện với thuộc tính clip
nhưng sau đó không được ủng hộ vì có một thuộc tính tốt hơn được gọi là clip-path
.
Nitish Kumar gần đây đã giới thiệu một clip-path
tại SitePoint, vì vậy hãy thoải mái thử nghiệm một thuộc tính có hiệu quả cao vượt trội.
Lưu ý rằng thuộc tính clip-path
được sử dụng bên dưới không được hỗ trợ đầy đủ trong IE hoặc Edge. Thuộc tính clip-path
khi được sử dụng để ẩn một phần tử sẽ như sau:
.hide { clip-path: polygon(0px 0px,0px 0px,0px 0px,0px 0px);
}
-
Nếu bạn di chuột qua phần tử đầu tiên, nó có thể ảnh hưởng đến phần tử thứ hai mặc dù nó được ẩn đi qua clip-path.
-
Nếu bạn nhấp chuột vào phần tử, nó sẽ loại bỏ các lớp ẩn để tiết lộ các phần tử của chúng ta đã có trước ở đó. Văn bản này vẫn có thể đọc được bởi browser
-
Mặc dù phần tử của chúng ta không còn nhìn thấy nữa, các phần tử xung quanh nó vẫn hoạt động như thể nó có kích thước chữ nhật ban đầu.
-
Lưu ý rằng các tương tác của người dùng như di chuột hoặc nhấp chuột không thể thực hiện ở bên ngoài khu vực bị cắt xén. Trong trường hợp của chúng tôi, điều này hàm ý rằng người dùng sẽ không thể tương tác trực tiếp với các phần tử ẩn.
Kết luận
Trong hướng dẫn này, chúng tôi đã xem xét năm phương pháp ẩn các phần tử khác nhau với CSS. Mỗi phương pháp đều khác nhau theo cách này hay cách khác. Biết được những gì bạn muốn có thể giúp bạn quyết định phương pháp nào sẽ sử dụng .
Nguồn
https://www.sitepoint.com/five-ways-to-hide-elements-in-css/