{"id":39741,"date":"2026-01-24T02:39:11","date_gmt":"2026-01-24T10:39:11","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=39741"},"modified":"2026-01-24T02:39:12","modified_gmt":"2026-01-24T10:39:12","slug":"how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/","title":{"rendered":"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?"},"content":{"rendered":"\n<p>Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and progressive disclosure. The community often debates the best way to hide or show content while keeping UX smooth and accessible.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Question:<\/h2>\n\n\n\n<p><em>How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?<\/em><br><em>I want to implement robust show and hide behavior for things like menus, accordions, and modals. I know about display, visibility, and opacity, but I am not sure when to use which approach, how to animate the transitions cleanly, and how to keep everything accessible. Are there CSS-only patterns I should know, and what are the gotchas for layout, focus, and performance?<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Answer:<\/h2>\n\n\n\n<p>Great question. There are several reliable patterns for conditional visibility, each with trade-offs. Below is a quick guide, followed by examples you can use in production.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pick the right visibility strategy<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>display: none<\/strong>: Removes the element from layout and accessibility tree. Best for fully hiding elements. Not animatable directly.<\/li>\n\n\n\n<li><strong>visibility: hidden<\/strong>: Element takes space but is not painted. Remains in layout, not read by AT. You can transition to <code>visibility: visible<\/code> with opacity for nicer fades.<\/li>\n\n\n\n<li><strong>opacity: 0<\/strong>: Element is still in layout and focusable unless you also manage <code>pointer-events: none<\/code> and focus order. Good for fade animations, but make sure to trap focus correctly for modals.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Common patterns with code<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><em>1) Class-based toggle with display for instant hide<\/em><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"toggle\"<\/span>&gt;<\/span>Toggle panel<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"panel\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"is-hidden\"<\/span>&gt;<\/span>Content<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">style<\/span>&gt;<\/span><span class=\"css\">\n\u00a0 <span class=\"hljs-selector-class\">.is-hidden<\/span> { <span class=\"hljs-attribute\">display<\/span>: none; }\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n\u00a0 <span class=\"hljs-keyword\">const<\/span> btn = <span class=\"hljs-built_in\">document<\/span>.getElementById(<span class=\"hljs-string\">'toggle'<\/span>);\n\u00a0 <span class=\"hljs-keyword\">const<\/span> panel = <span class=\"hljs-built_in\">document<\/span>.getElementById(<span class=\"hljs-string\">'panel'<\/span>);\n\u00a0 btn.addEventListener(<span class=\"hljs-string\">'click'<\/span>, () =&gt; panel.classList.toggle(<span class=\"hljs-string\">'is-hidden'<\/span>));\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><em>2) Animated show or hide with opacity and max-height<\/em><\/h4>\n\n\n\n<p>Since height is often unknown, combine opacity with a large max-height for a smooth collapse.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">style<\/span>&gt;<\/span><span class=\"css\">\n\u00a0 <span class=\"hljs-selector-class\">.collapse<\/span> {\n\u00a0 \u00a0 <span class=\"hljs-attribute\">overflow<\/span>: hidden;\n\u00a0 \u00a0 <span class=\"hljs-attribute\">max-height<\/span>: <span class=\"hljs-number\">0<\/span>;\n\u00a0 \u00a0 <span class=\"hljs-attribute\">opacity<\/span>: <span class=\"hljs-number\">0<\/span>;\n\u00a0 \u00a0 <span class=\"hljs-attribute\">transition<\/span>: max-height <span class=\"hljs-number\">250ms<\/span> ease, opacity <span class=\"hljs-number\">200ms<\/span> ease;\n\u00a0 }\n\u00a0 <span class=\"hljs-selector-class\">.collapse<\/span><span class=\"hljs-selector-class\">.is-open<\/span> {\n\u00a0 \u00a0 <span class=\"hljs-attribute\">max-height<\/span>: <span class=\"hljs-number\">1000px<\/span>; <span class=\"hljs-comment\">\/* large enough to fit content *\/<\/span>\n\u00a0 \u00a0 <span class=\"hljs-attribute\">opacity<\/span>: <span class=\"hljs-number\">1<\/span>;\n\u00a0 }\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"collapse\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"faq\"<\/span>&gt;<\/span>Answer goes here...<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><em>3) CSS-only toggle with checkbox + :checked<\/em><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"nav-toggle\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"checkbox\"<\/span> <span class=\"hljs-attr\">hidden<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"nav-toggle\"<\/span>&gt;<\/span>Menu<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">nav<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"drawer\"<\/span>&gt;<\/span>...<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">nav<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">style<\/span>&gt;<\/span><span class=\"css\">\n\u00a0 <span class=\"hljs-selector-class\">.drawer<\/span> { <span class=\"hljs-attribute\">transform<\/span>: <span class=\"hljs-built_in\">translateX<\/span>(-<span class=\"hljs-number\">100%<\/span>); <span class=\"hljs-attribute\">transition<\/span>: transform <span class=\"hljs-number\">200ms<\/span> ease; }\n\u00a0 <span class=\"hljs-selector-id\">#nav-toggle<\/span><span class=\"hljs-selector-pseudo\">:checked<\/span> + <span class=\"hljs-selector-tag\">label<\/span> + <span class=\"hljs-selector-class\">.drawer<\/span> { <span class=\"hljs-attribute\">transform<\/span>: <span class=\"hljs-built_in\">translateX<\/span>(<span class=\"hljs-number\">0<\/span>); }\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><em>4) Use details and summary for accessible disclosure<\/em><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">details<\/span>&gt;<\/span>\n\u00a0 <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">summary<\/span>&gt;<\/span>More options<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">summary<\/span>&gt;<\/span>\n\u00a0 <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>Hidden content becomes visible when opened.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">details<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><em>5) Responsive show and hide with media queries<\/em><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">style<\/span>&gt;<\/span><span class=\"css\">\n\u00a0 <span class=\"hljs-selector-class\">.desktop-only<\/span> { <span class=\"hljs-attribute\">display<\/span>: none; }\n\u00a0 <span class=\"hljs-keyword\">@media<\/span> (<span class=\"hljs-attribute\">min-width:<\/span> <span class=\"hljs-number\">768px<\/span>) {\n\u00a0 \u00a0 <span class=\"hljs-selector-class\">.desktop-only<\/span> { <span class=\"hljs-attribute\">display<\/span>: block; }\n\u00a0 }\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"desktop-only\"<\/span>&gt;<\/span>Visible on tablets and up<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>For more layout and scaling tactics, see <a href=\"https:\/\/cloudinary.com\/guides\/front-end-development\/using-css-to-scale-page-elements-and-a-better-way-to-scale-your-images\">this guide on scaling elements with CSS<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Accessibility and UX tips<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When hiding content from assistive tech, pair visual hiding with <code>aria-hidden=\"true\"<\/code> or move focus appropriately. When showing a modal, trap focus inside; when closing, return focus to the trigger.<\/li>\n\n\n\n<li>Use <code>prefers-reduced-motion<\/code> to minimize animation for motion-sensitive users.<\/li>\n\n\n\n<li>Prevent interaction with visually hidden elements using <code>pointer-events: none<\/code> or by removing them from the DOM via <code>display: none<\/code>.<\/li>\n\n\n\n<li>Avoid layout shift by reserving space or using measured transitions. For alignment patterns, check <a href=\"https:\/\/cloudinary.com\/guides\/image-effects\/image-align-centering-with-html-and-css\">centering and alignment techniques<\/a>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Handling JavaScript-driven animations cleanly<\/h3>\n\n\n\n<p>If you need to animate out then set display: none, use a two-step sequence: remove the open class to start the transition, listen for <code>transitionend<\/code>, then apply the hidden class.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-comment\">\/\/ triggers fade-out<\/span>\n\npanel.classList.remove(<span class=\"hljs-string\">'is-open'<\/span>);\u00a0\n\npanel.addEventListener(<span class=\"hljs-string\">'transitionend'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">onEnd<\/span>(<span class=\"hljs-params\">e<\/span>) <\/span>{\n\u00a0 <span class=\"hljs-keyword\">if<\/span> (e.propertyName !== <span class=\"hljs-string\">'opacity'<\/span>) <span class=\"hljs-keyword\">return<\/span>;\n\u00a0 panel.classList.add(<span class=\"hljs-string\">'is-hidden'<\/span>);\n\u00a0 panel.removeEventListener(<span class=\"hljs-string\">'transitionend'<\/span>, onEnd);\n});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Cloudinary angle: conditionally show images efficiently<\/h3>\n\n\n\n<p>When content visibility depends on viewport or state, you can delay or conditionally load media. Use responsive URLs and lazy loading, and serve only what is needed. Cloudinary helps by producing fast, right-sized assets and by providing predictable image URLs you can swap as states change. For general performance strategy, see <a href=\"https:\/\/cloudinary.com\/guides\/web-performance\/what-is-an-optimized-website-and-6-ways-to-optimize-yours\">this optimization overview<\/a>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">&lt;img\n\u00a0 src=<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/w_600,c_fill,q_auto,f_auto\/sample.jpg\"<\/span>\n\u00a0 alt=<span class=\"hljs-string\">\"Hero\"<\/span>\n\u00a0 loading=<span class=\"hljs-string\">\"lazy\"<\/span>\n\u00a0 <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span><\/span>=<span class=\"hljs-string\">\"is-hidden\"<\/span>&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Combine the earlier visibility classes with responsive images and conditional loading in your app logic.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quick decision reference<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Need complete hide, no layout space, not animating:<\/strong> Use <code>display: none<\/code>.<\/li>\n\n\n\n<li><strong>Need to animate opacity or scale: <\/strong>Keep in DOM, animate <code>opacity<\/code> or <code>transform<\/code>, then switch to <code>display: none<\/code> after transition.<\/li>\n\n\n\n<li><strong>Want CSS-only toggle:<\/strong> Use <code>:checked<\/code> or <code>&lt;details><\/code>.<\/li>\n\n\n\n<li><strong>Responsive visibility: <\/strong>Media or container queries that flip a class or direct CSS rule.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<p>Choose <code>display: none<\/code> for complete removal, <code>visibility<\/code> or <code>opacity<\/code> for transitions, and pair with accessibility and focus management. For responsive cases, use media queries or semantic <code>&lt;details><\/code>. Optimize the visible media you deliver, and align layout to prevent jank.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Learn More<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudinary.com\/tools\/image-upscale\">Image Upscaling and Quality Enhancement<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/tools\/png-to-webp\">PNG to WebP Converter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/tools\/jpg-to-webp\">JPG to WebP Converter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/tools\/avif-to-png\">AVIF to PNG Converter<\/a><\/li>\n<\/ul>\n\n\n\n<p>Ready to optimize how your UI shows and hides content while delivering fast, responsive media? <a href=\"https:\/\/cloudinary.com\/users\/register_free\">Create a free Cloudinary account<\/a> and start streamlining your frontend workflow today.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and progressive disclosure. The community often debates the best way to hide or show content while keeping UX smooth and accessible. Question: How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in [&hellip;]<\/p>\n","protected":false},"author":88,"featured_media":39726,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[423],"class_list":["post-39741","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-questions"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?<\/title>\n<meta name=\"description\" content=\"Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?\" \/>\n<meta property=\"og:description\" content=\"Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-24T10:39:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-24T10:39:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"damjanantevski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/\"},\"author\":{\"name\":\"damjanantevski\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e\"},\"headline\":\"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?\",\"datePublished\":\"2026-01-24T10:39:11+00:00\",\"dateModified\":\"2026-01-24T10:39:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/\"},\"wordCount\":612,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA\",\"keywords\":[\"Questions\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/\",\"name\":\"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA\",\"datePublished\":\"2026-01-24T10:39:11+00:00\",\"dateModified\":\"2026-01-24T10:39:12+00:00\",\"description\":\"Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA\",\"width\":1200,\"height\":630,\"caption\":\"CSS featured image\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e\",\"name\":\"damjanantevski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"caption\":\"damjanantevski\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?","description":"Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/","og_locale":"en_US","og_type":"article","og_title":"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?","og_description":"Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and","og_url":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/","og_site_name":"Cloudinary Blog","article_published_time":"2026-01-24T10:39:11+00:00","article_modified_time":"2026-01-24T10:39:12+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA","type":"image\/jpeg"}],"author":"damjanantevski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/"},"author":{"name":"damjanantevski","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e"},"headline":"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?","datePublished":"2026-01-24T10:39:11+00:00","dateModified":"2026-01-24T10:39:12+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/"},"wordCount":612,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA","keywords":["Questions"],"inLanguage":"en-US","copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/","url":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/","name":"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA","datePublished":"2026-01-24T10:39:11+00:00","dateModified":"2026-01-24T10:39:12+00:00","description":"Toggling UI pieces is a daily task for frontend developers. Think dropdowns, modals, feature flags, skeleton loaders, responsive navigation, and","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA","width":1200,"height":630,"caption":"CSS featured image"},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/questions\/how-can-conditional-visibility-be-used-when-elements-need-to-show-or-hide-in-css\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How can conditional visibility be used when elements need to \u201cshow\u201d or \u201chide\u201d in CSS?"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e","name":"damjanantevski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","caption":"damjanantevski"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1769222068\/css_featured_image\/css_featured_image.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/88"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=39741"}],"version-history":[{"count":1,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39741\/revisions"}],"predecessor-version":[{"id":39742,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39741\/revisions\/39742"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/39726"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=39741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=39741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=39741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}