- 10 Ways to Hide Elements in CSS
- Accessibility
- Event Handling
- Performance
- 1. opacity and filter: opacity()
- 2. color Alpha Transparency
- 3. transform
- 4. clip-path
- 5. visibility
- 6. display
- 7. HTML hidden attribute
- 8. Absolute position
- 9. Overlay Another Element
- 10. Reduce Dimensions
- Hidden Choices
- Share This Article
- visibility
- Синтаксис
- Значения
- Синтаксис
- Интерполяция
- Примеры
- Базовый пример
- HTML
- CSS
- Пример с таблицей
- HTML
- CSS
- Соображения доступности
- Примечания
- Спецификация
- Совместимость с браузерами
- Found a content problem with this page?
10 Ways to Hide Elements in CSS
Some CSS hiding options are all or nothing. The element is either fully visible or fully invisible and there’s no in-between state. Others, such as transparency, can have a range of values, so interpolated CSS animations become possible.
Accessibility
Each method described below will visually hide an element, but it may or may not hide the content from assistive technologies. For example, a screen reader could still announce tiny transparent text. Further CSS properties or ARIA attributes such as aria-hidden=»true» may be necessary to describe the appropriate action.
Be wary that animations can also cause disorientation, migraines, seizures, or other physical discomfort for some people. Consider using a prefers-reduced-motion media query to switch off animations when specified in user preferences.
Event Handling
Hiding will either stop events being triggered on that element or have no effect — that is, the element is not visible but can still be clicked or receive other user interactions.
Performance
After a browser loads and parses the HTML DOM and CSS object model, the page is rendered in three stages:
- Layout: generate the geometry and position of each element
- Paint: draw out the pixels for each element
- Composition: position element layers in the appropriate order
An effect which only causes composition changes is noticeably smoother than those affecting layout. In some cases, the browser can also use hardware acceleration.
1. opacity and filter: opacity()
The opacity: N and filter: opacity(N) properties can be passed a number between 0 and 1, or a percentage between 0% and 100% denoting fully transparent and fully opaque accordingly.
There’s little practical difference between the two in modern browsers, although filter should be used if multiple effects are applied at the same time (blur, contrast, grayscale etc.)
Opacity can be animated and offers great performance, but be wary that a fully transparent element remains on the page and can trigger events.
metric | effect |
---|---|
browser support | good, but IE only supports opacity 0 to 1 |
accessibility | content not read if 0 or 0% is set |
layout affected? | no |
rendering required | composition |
performance | best, can use hardware acceleration |
animation frames possible? | yes |
events triggered when hidden? | yes |
2. color Alpha Transparency
opacity affects the whole element, but it’s also possible to set the color , background-color , and border-color properties separately. Applying a zero alpha channel using rgba(0,0,0,0) or similar renders an item fully transparent:
Each property can be animated separately to create interesting effects. Note that transparency can’t be applied to elements with image backgrounds unless they’re generated using linear-gradient or similar.
The alpha channel can be set with:
- transparent : fully transparent (in-between animations are not possible)
- rgba(r, g, b, a) : red, green, blue, and alpha
- hsla(h, s, l, a) : hue, saturation, lightness, and alpha
- #RRGGBBAA and #RGBA
3. transform
The transform property can be used to translate (move), scale, rotate, or skew an element. A scale(0) or translate(-999px, 0px) off-screen will hide the element:
transform offers excellent performance and hardware acceleration because the element is effectively moved into a separate layer and can be animated in 2D or 3D. The original layout space remains as is, but no events will be triggered by a fully hidden element.
metric | effect |
---|---|
browser support | good |
accessibility | content still read |
layout affected? | no — the original dimensions remain |
rendering required | composition |
performance | best, can use hardware acceleration |
animation frames possible? | yes |
events triggered when hidden? | no |
4. clip-path
The clip-path property creates a clipping region that determines which parts of an element are visible. Using a value such as clip-path: circle(0); will completely hide the element.
clip-path offers scope for interesting animations, although it should only be relied on in modern browsers.
metric | effect |
---|---|
browser support | modern browsers only |
accessibility | content still read by some applications |
layout affected? | no — the original dimensions remain |
rendering required | paint |
performance | reasonable |
animation frames possible? | yes, in modern browsers |
events triggered when hidden? | no |
5. visibility
The visibility property can be set to visible or hidden to show and hide an element:
The space used by the element remains in place unless a collapse value is used.
metric | effect |
---|---|
browser support | excellent |
accessibility | content not read |
layout affected? | no, unless collapse is used |
rendering required | composition, unless collapse is used |
performance | good |
animation frames possible? | no |
events triggered when hidden? | no |
6. display
display is probably the most-used element-hiding method. A value of none effectively removes the element as if it never existed in the DOM.
However, it’s possibly the worst CSS property to use in the majority of cases. It can’t be animated and will trigger a page layout unless the element is moved out of the document flow using position: absolute or the new contain property is adopted.
display is also overloaded, with options such as block , inline , table , flexbox , grid and more. Resetting back to the correct value after display: none; can be problematic (although unset may help).
metric | effect |
---|---|
browser support | excellent |
accessibility | content not read |
layout affected? | yes |
rendering required | layout |
performance | poor |
animation frames possible? | no |
events triggered when hidden? | no |
7. HTML hidden attribute
The HTML hidden attribute can be added to any element:
p hidden> Hidden content p>
to apply the browser’s default style:
This has the same benefits and flaws as display: none , although it could be useful when using a content management system that doesn’t permit style changes.
8. Absolute position
The position property allows an element to be moved from its default static position within the page layout using top , bottom , left , and right . An absolute -positioned element can therefore be moved off-screen with left: -999px or similar:
metric | effect |
---|---|
browser support | excellent, unless using position: sticky |
accessibility | content still read |
layout affected? | yes, if positioning is changed |
rendering required | depends |
performance | reasonable if careful |
animation frames possible? | yes, on top , bottom , left , and right |
events triggered when hidden? | yes, but it may be impossible to interact with an off-screen element |
9. Overlay Another Element
An element can be visually hidden by positioning another over the top which has the same color as the background. In this example, an ::after pseudo-element is overlaid, although any child element could be used:
While technically possible, this option required more code than other options.
metric | effect |
---|---|
browser support | excellent |
accessibility | content still read |
layout affected? | no, if absolutely positioned |
rendering required | paint |
performance | reasonable if careful |
animation frames possible? | yes |
events triggered when hidden? | yes, when a pseudo or child element is overlaid |
10. Reduce Dimensions
An element can be hidden by minimizing its dimensions using width , height , padding , border-width and/or font-size . It may also be necessary to apply overflow: hidden; to ensure content doesn’t spill out.
Interesting animated effects are possible, but performance is noticeably better with transform .
metric | effect |
---|---|
browser support | excellent |
accessibility | content still read |
layout affected? | yes |
rendering required | layout |
performance | poor |
animation frames possible? | yes |
events triggered when hidden? | no |
Hidden Choices
display: none has been the favorite solution to hide elements for many years, but it’s been superseded by more flexible, animatable options. It’s still valid, but perhaps only when you want to permanently hide content from all users. transform or opacity are better choices when considering performance.
Take your CSS skills to the next level with CSS Master. Learn CSS architecture, debugging, custom properties, advanced layout and animation techniques, how to use CSS with SVG, and more.
Share This Article
Craig is a freelance UK web consultant who built his first page for IE2.0 in 1995. Since that time he’s been advocating standards, accessibility, and best-practice HTML5 techniques. He’s created enterprise specifications, websites and online applications for companies and organisations including the UK Parliament, the European Parliament, the Department of Energy & Climate Change, Microsoft, and more. He’s written more than 1,000 articles for SitePoint and you can find him @craigbuckler.
visibility
Чтобы скрыть и удалить элемент из разметки, установите свойству display значение none , вместо использования visibility .
Синтаксис
/* Значения */ visibility: visible; visibility: hidden; visibility: collapse; /* Глобальные значения */ visibility: inherit; visibility: initial; visibility: unset;
Свойство visibility указывается в качестве одного из значений ниже.
Значения
Значение по умолчанию, элемент виден.
Элемент не виден (полностью прозрачный, ничего не отображается), но продолжает влиять на шаблон. Потомки элемента могут быть показаны с помощью свойства visibility:visible . Элемент не может получить focus (например, при навигации с помощью tabindex).
* Для строк, столбцов, групп столбцов и групп строк в таблице, которые должны быть удалены (как с помощью display : none применённого к столбцу/строке таблицы). Однако, размер других строк и столбцов должен продолжать вычисляться так, словно скрытые строки/столбцы присутствуют. Это создано для быстрого удаления строк/столбцов из таблицы без дополнительного вычисления ширины и высоты частей таблицы.
- Для XUL элементов размер всегда равен 0, независимо от других стилей, влияющих на размер, хотя отступы продолжают учитываться.
- Для других элементов collapse обрабатывается также, как hidden
Синтаксис
Интерполяция
Значения видимости изменяются между видим и не видим. Интерполяция будет, если одно из начальных или конечных значений будет видимо или нет. Если одно из значений visible , интерполируется как дискретный шаг, где значения временной функции от 0 до 1 для visible и другие значения временной функции (которые происходят только в начале/конце перехода, или как результат функции cubic-bezier() со значениями вне [0, 1]) ближе к конечной точке.
Примеры
Базовый пример
HTML
p class="visible">Первый параграф виден.p> p class="not-visible">Второй параграф не виден.p> p class="visible">Третий параграф также виден. Заметь, второй параграф занимает место.p>
CSS
.visible visibility: visible; > .not-visible visibility: hidden; >
Пример с таблицей
HTML
table> tr> td>1.1td> td class="collapse">1.2td> td>1.3td> tr> tr class="collapse"> td>2.1td> td>2.2td> td>2.3td> tr> tr> td>3.1td> td>3.2td> td>3.3td> tr> table>
CSS
.collapse visibility: collapse; > table border: 1px solid red; > td border: 1px solid gray; >
Соображения доступности
Использование visibility со значением hidden на элементе удалит его из дерева доступности. Это приведёт к тому, что элемент и все его дочерние элементы больше не будут показаны в скринридерах.
Примечания
- Поддержка visibility:collapse отсутствует или частично не работает в некоторых современных браузерах. Во многих случаях может не корректно работать visibility:hidden со столбцами и строками.
- visibility:collapse может изменить шаблон таблицы, если таблица содержит вложенные таблицы, пока visibility:visible не указан явно для вложенной таблицы.
Спецификация
Specification | Status | Comment |
---|---|---|
CSS Flexible Box Layout Module Определение ‘visibility’ в этой спецификации. | Кандидат в рекомендации | Определяет значение collapse применимым к flex элементам |
CSS Box Model Определение ‘visibility’ в этой спецификации. | Кандидат в рекомендации | Без изменений |
CSS Transitions Определение ‘visibility’ в этой спецификации. | Рабочий черновик | Определяет visibility как анимируемое. |
CSS Level 2 (Revision 1) Определение ‘visibility’ в этой спецификации. | Рекомендация | Изначальное определение |
Начальное значение | visible |
---|---|
Применяется к | все элементы |
Наследуется | да |
Обработка значения | как указано |
Animation type | видимость |
Совместимость с браузерами
BCD tables only load in the browser
Found a content problem with this page?
This page was last modified on 13 авг. 2022 г. by MDN contributors.
Your blueprint for a better internet.