[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"blog-categories":6,"topic:css-view-transitions":35,"course-tree":125},{"data":4},{"google_site_verification":5,"ga4_measurement_id":5,"site_name":5,"default_og_image":5,"twitter_handle":5},null,{"data":7},[8,14,19,25,30],{"name":9,"slug":10,"description":11,"post_count":12,"subcategories":13},"CSS","css","Learn CSS with practical tutorials and examples covering layouts, Flexbox, Grid, responsive design, typography, positioning, animations, and more.",2,[],{"name":15,"slug":16,"description":17,"post_count":12,"subcategories":18},"HTML","html","Learn HTML with practical tutorials and examples for beginners. Explore HTML tags, elements, attributes, links, images, forms, semantic HTML, and more with clear explanations and real code examples.",[],{"name":20,"slug":21,"description":22,"post_count":23,"subcategories":24},"WPF","wpf","Learn WPF with practical tutorials and examples covering XAML, windows, controls, layouts, data binding, MVVM, commands, styles, templates, debugging, and modern WPF UI development.",1,[],{"name":26,"slug":27,"description":28,"post_count":23,"subcategories":29},"Python","python","Learn Python with practical tutorials covering strings, lists, functions, exceptions, files, packages, virtual environments, modules, classes, and beginner programming concepts.",[],{"name":31,"slug":32,"description":33,"post_count":23,"subcategories":34},"Java","java","Learn Java with practical tutorials and examples for beginners. Explore Java syntax, variables, data types, classes, objects, methods, inheritance, exceptions, collections, and more with clear explanations and real code examples.",[],{"data":36},{"id":37,"title":38,"slug":39,"content":40,"course":41,"subcategory":42,"author":45,"reading_time_minutes":51,"cornerstone":52,"schema_type":53,"faq_json":5,"video_url":5,"canonical_url":54,"meta_title":55,"meta_description":56,"og_image":5,"toc_json":57,"code_examples":94,"quiz":5,"exercises":108,"published_at":5,"updated_at":116,"prev":117,"next":121},146,"CSS View Transitions API: Progressive Enhancement for Page and State Animations","css-view-transitions","\u003Ch2 id=\"what-are-view-transitions\">What are view transitions?\u003C\u002Fh2>\u003Cp>The \u003Cstrong>View Transitions API\u003C\u002Fstrong> lets the browser animate between two states of a page. It takes a snapshot of the old view, applies your DOM or page change, takes a snapshot of the new view and then cross-fades or animates between them. It works for same-document changes (for example, switching a theme, reordering a list or opening a detail view in a single-page app) and, in supporting browsers, for cross-document navigation between normal multi-page website pages.\u003C\u002Fp>\u003Cp>Focus keyword: \u003Cstrong>View Transitions API\u003C\u002Fstrong>. Related trending keywords: \u003Cem>document.startViewTransition\u003C\u002Fem>, \u003Cem>view-transition-name\u003C\u002Fem>, \u003Cem>@view-transition navigation auto\u003C\u002Fem>, \u003Cem>::view-transition-old and ::view-transition-new\u003C\u002Fem>, \u003Cem>shared element transition\u003C\u002Fem>, \u003Cem>page transition CSS\u003C\u002Fem>, \u003Cem>MPA view transitions\u003C\u002Fem>, \u003Cem>view-transition-class\u003C\u002Fem>.\u003C\u002Fp>\u003Ch2 id=\"why-treat-it-as-progressive-enhancement\">Why treat it as progressive enhancement?\u003C\u002Fh2>\u003Cp>Browser support differs between same-document and cross-document transitions, and between browsers and versions. The safe approach is: your site must work exactly the same without the animation. If the browser does not support it, the content simply updates instantly. Always feature-detect in JavaScript, use \u003Ccode>@supports\u003C\u002Fcode> or the at-rule where appropriate, and verify support on Can I use before you depend on the feature.\u003C\u002Fp>\u003Ch2 id=\"same-document-transitions-spa-or-js-state-changes\">Same-document transitions (SPA or JS state changes)\u003C\u002Fh2>\u003Cp>Wrap your DOM update in \u003Ccode>document.startViewTransition(callback)\u003C\u002Fcode>. The browser captures the old state, runs the callback to update the DOM, captures the new state, and animates between them. A safe wrapper looks like this:\u003C\u002Fp>\u003Cul>\u003Cli>If \u003Ccode>document.startViewTransition\u003C\u002Fcode> does not exist, run the update directly.\u003C\u002Fli>\u003Cli>Otherwise call \u003Ccode>document.startViewTransition(() =&gt; update())\u003C\u002Fcode>.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>The returned object has promises: \u003Ccode>ready\u003C\u002Fcode> (pseudo-elements are created, animation is about to start), \u003Ccode>finished\u003C\u002Fcode> (animation complete) and \u003Ccode>updateCallbackDone\u003C\u002Fcode>. It also has \u003Ccode>skipTransition()\u003C\u002Fcode>.\u003C\u002Fp>\u003Ch2 id=\"the-pseudo-element-tree\">The pseudo-element tree\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Ccode>::view-transition\u003C\u002Fcode>: root overlay.\u003C\u002Fli>\u003Cli>\u003Ccode>::view-transition-group(name)\u003C\u002Fcode>: handles position and size movement.\u003C\u002Fli>\u003Cli>\u003Ccode>::view-transition-image-pair(name)\u003C\u002Fcode>: holds old and new snapshots.\u003C\u002Fli>\u003Cli>\u003Ccode>::view-transition-old(name)\u003C\u002Fcode>: snapshot before the change.\u003C\u002Fli>\u003Cli>\u003Ccode>::view-transition-new(name)\u003C\u002Fcode>: snapshot after the change.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>The default for the whole page is the name \u003Ccode>root\u003C\u002Fcode>, a simple cross-fade. You can restyle it with normal CSS animations, for example: \u003Ccode>::view-transition-old(root) { animation: fade-out .3s; }\u003C\u002Fcode>.\u003C\u002Fp>\u003Ch2 id=\"view-transition-name-shared-element-transitions\">view-transition-name: shared element transitions\u003C\u002Fh2>\u003Cp>Give an element a unique \u003Ccode>view-transition-name\u003C\u002Fcode> in both states (like \u003Ccode>hero-image\u003C\u002Fcode>). The browser will morph its size and position between the old and new versions, which creates the popular shared element or hero transition. Rules: names must be unique on the page at the moment of capture, and duplicates cause the transition to be skipped. For lists, set a name per item using inline styles or \u003Ccode>attr()\u003C\u002Fcode> alternatives, or use \u003Ccode>view-transition-class\u003C\u002Fcode> to apply shared styling to many named elements.\u003C\u002Fp>\u003Ch2 id=\"cross-document-multi-page-transitions\">Cross-document (multi-page) transitions\u003C\u002Fh2>\u003Cp>For normal navigations between same-origin pages, opt in with CSS on both pages: \u003Ccode>@view-transition { navigation: auto; }\u003C\u002Fcode>. Then use \u003Ccode>view-transition-name\u003C\u002Fcode> on elements that exist on both pages to morph them. Events such as \u003Ccode>pageswap\u003C\u002Fcode> and \u003Ccode>pagereveal\u003C\u002Fcode> let you customize the transition with JavaScript. Keep pages fast: the transition waits for the new page to be ready to render, so slow pages will feel slow.\u003C\u002Fp>\u003Ch2 id=\"view-transition-types\">View transition types\u003C\u002Fh2>\u003Cp>You can pass types (for example \u003Ccode>forward\u003C\u002Fcode> and \u003Ccode>back\u003C\u002Fcode>) and target them with \u003Ccode>:active-view-transition-type(forward)\u003C\u002Fcode> in CSS to use different animations per direction.\u003C\u002Fp>\u003Ch2 id=\"accessibility-and-performance\">Accessibility and performance\u003C\u002Fh2>\u003Cul>\u003Cli>Respect \u003Ccode>prefers-reduced-motion\u003C\u002Fcode>: disable or shorten custom animations, or keep only a simple fade.\u003C\u002Fli>\u003Cli>Keep durations short (about 200ms to 400ms).\u003C\u002Fli>\u003Cli>During a transition, the page shows snapshots, so the old content is not interactive. Keep it brief.\u003C\u002Fli>\u003Cli>Focus management still matters. After the update, move focus to a sensible place and update the page title for SPAs.\u003C\u002Fli>\u003Cli>Do not rely on it to communicate state. Use normal, accessible DOM changes.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"quick-summary\">Quick summary\u003C\u002Fh2>\u003Cp>Use the \u003Cstrong>View Transitions API\u003C\u002Fstrong> to add polished state and page animations with very little code. Feature-detect, keep the no-animation path fully functional and respect reduced motion.\u003C\u002Fp>\u003Cdiv class=\"try-it-yourself language-html\">\u003Cpre>\u003Ccode>&lt;style&gt;\n  :root { --bg: #ffffff; --fg: #0f172a; }\n  :root.dark { --bg: #0f172a; --fg: #f8fafc; }\n  body { margin: 0; min-height: 200px; display: grid; place-items: center; background: var(--bg); color: var(--fg); font-family: system-ui, sans-serif; }\n  button { padding: 12px 20px; border-radius: 10px; border: 0; background: #6366f1; color: #fff; font-weight: 600; cursor: pointer; }\n  ::view-transition-old(root), ::view-transition-new(root) { animation-duration: .45s; }\n&lt;\u002Fstyle&gt;\n&lt;div&gt;&lt;h2&gt;Theme toggle&lt;\u002Fh2&gt;&lt;button id='toggle'&gt;Toggle theme&lt;\u002Fbutton&gt;&lt;\u002Fdiv&gt;\n&lt;script&gt;\n  function update() { document.documentElement.classList.toggle('dark'); }\n  document.getElementById('toggle').addEventListener('click', function () {\n    if (!document.startViewTransition) { update(); return; }\n    document.startViewTransition(function () { update(); });\n  });\n&lt;\u002Fscript&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv class=\"try-it-yourself language-html\">\u003Cpre>\u003Ccode>&lt;style&gt;\n  body { font-family: system-ui, sans-serif; padding: 24px; }\n  .grid { display: flex; gap: 12px; flex-wrap: wrap; }\n  .tile { width: 90px; height: 90px; border-radius: 12px; color: #fff; display: grid; place-items: center; font-weight: 700; cursor: pointer; }\n  .a { background: #ef4444; view-transition-name: tile-a; }\n  .b { background: #10b981; view-transition-name: tile-b; }\n  .c { background: #3b82f6; view-transition-name: tile-c; }\n  .d { background: #f59e0b; view-transition-name: tile-d; }\n&lt;\u002Fstyle&gt;\n&lt;button id='shuffle'&gt;Shuffle tiles&lt;\u002Fbutton&gt;\n&lt;div class='grid' id='grid' style='margin-top: 16px'&gt;\n  &lt;div class='tile a'&gt;A&lt;\u002Fdiv&gt;&lt;div class='tile b'&gt;B&lt;\u002Fdiv&gt;&lt;div class='tile c'&gt;C&lt;\u002Fdiv&gt;&lt;div class='tile d'&gt;D&lt;\u002Fdiv&gt;\n&lt;\u002Fdiv&gt;\n&lt;script&gt;\n  function shuffle() {\n    var grid = document.getElementById('grid');\n    var items = Array.prototype.slice.call(grid.children);\n    items.sort(function () { return Math.random() - 0.5; });\n    items.forEach(function (el) { grid.appendChild(el); });\n  }\n  document.getElementById('shuffle').addEventListener('click', function () {\n    if (!document.startViewTransition) { shuffle(); return; }\n    document.startViewTransition(shuffle);\n  });\n&lt;\u002Fscript&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv class=\"try-it-yourself language-html\">\u003Cpre>\u003Ccode>&lt;style&gt;\n  body { font-family: system-ui, sans-serif; padding: 24px; }\n  .thumb { width: 120px; height: 80px; border-radius: 10px; background: linear-gradient(135deg, #8b5cf6, #ec4899); cursor: pointer; }\n  .full { width: 100%; max-width: 420px; height: 240px; border-radius: 16px; background: linear-gradient(135deg, #8b5cf6, #ec4899); }\n  .hero { view-transition-name: hero; }\n  .hidden { display: none; }\n  ::view-transition-group(hero) { animation-duration: .5s; animation-timing-function: cubic-bezier(.2, .8, .2, 1); }\n&lt;\u002Fstyle&gt;\n&lt;div id='list'&gt;&lt;div class='thumb hero' id='thumb'&gt;&lt;\u002Fdiv&gt;&lt;p&gt;Click the thumbnail to morph it into a large image.&lt;\u002Fp&gt;&lt;\u002Fdiv&gt;\n&lt;div id='detail' class='hidden'&gt;&lt;div class='full' id='full'&gt;&lt;\u002Fdiv&gt;&lt;p&gt;&lt;button id='back'&gt;Back&lt;\u002Fbutton&gt;&lt;\u002Fp&gt;&lt;\u002Fdiv&gt;\n&lt;script&gt;\n  function show(detail) {\n    var t = document.getElementById('thumb');\n    var f = document.getElementById('full');\n    document.getElementById('list').classList.toggle('hidden', detail);\n    document.getElementById('detail').classList.toggle('hidden', !detail);\n    if (detail) { t.classList.remove('hero'); f.classList.add('hero'); } else { f.classList.remove('hero'); t.classList.add('hero'); }\n  }\n  function go(detail) {\n    if (!document.startViewTransition) { show(detail); return; }\n    document.startViewTransition(function () { show(detail); });\n  }\n  document.getElementById('thumb').addEventListener('click', function () { go(true); });\n  document.getElementById('back').addEventListener('click', function () { go(false); });\n&lt;\u002Fscript&gt;\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv class=\"try-it-yourself language-css\">\u003Cpre>\u003Ccode>\u002F* shared.css: include on every page of a same-origin multi-page site *\u002F\n@view-transition {\n  navigation: auto;\n}\n\n\u002F* Morph the site header between pages *\u002F\nheader.site {\n  view-transition-name: site-header;\n}\n\n\u002F* Custom page animation *\u002F\n@keyframes fade-out { to { opacity: 0; transform: translateY(-10px); } }\n@keyframes fade-in { from { opacity: 0; transform: translateY(10px); } }\n\n::view-transition-old(root) {\n  animation: .25s ease-in both fade-out;\n}\n::view-transition-new(root) {\n  animation: .35s ease-out both fade-in;\n}\n\n\u002F* Respect user motion settings *\u002F\n@media (prefers-reduced-motion: reduce) {\n  ::view-transition-group(*),\n  ::view-transition-old(*),\n  ::view-transition-new(*) {\n    animation: none !important;\n  }\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>",{"name":9,"slug":10},{"name":43,"slug":44},"Transitions & Animation","transitions-animation",{"slug":46,"display_name":47,"job_title":5,"short_bio":5,"expertise_tags":48,"headshot":5,"long_bio":5,"credentials":5,"twitter_url":5,"linkedin_url":5,"github_url":5,"personal_website_url":5,"other_sameas_urls":5,"topics":49,"posts":50},"badar-khalil","Badar Khalil",[],[],[],5,false,"Article","https:\u002F\u002Fwpfsharp.com\u002Ftopics\u002Fcss-view-transitions","CSS View Transitions API: Complete Progressive Guide","Learn the View Transitions API: startViewTransition, view-transition-name, ::view-transition pseudo-elements, cross-document transitions and safe fallbacks.",[58,62,66,70,74,78,82,86,90],{"id":59,"text":60,"level":12,"children":61},"what-are-view-transitions","What are view transitions?",[],{"id":63,"text":64,"level":12,"children":65},"why-treat-it-as-progressive-enhancement","Why treat it as progressive enhancement?",[],{"id":67,"text":68,"level":12,"children":69},"same-document-transitions-spa-or-js-state-changes","Same-document transitions (SPA or JS state changes)",[],{"id":71,"text":72,"level":12,"children":73},"the-pseudo-element-tree","The pseudo-element tree",[],{"id":75,"text":76,"level":12,"children":77},"view-transition-name-shared-element-transitions","view-transition-name: shared element transitions",[],{"id":79,"text":80,"level":12,"children":81},"cross-document-multi-page-transitions","Cross-document (multi-page) transitions",[],{"id":83,"text":84,"level":12,"children":85},"view-transition-types","View transition types",[],{"id":87,"text":88,"level":12,"children":89},"accessibility-and-performance","Accessibility and performance",[],{"id":91,"text":92,"level":12,"children":93},"quick-summary","Quick summary",[],[95,99,102,105],{"id":96,"language":16,"code":97,"is_editable":98},595,"\u003Cstyle>\n  :root { --bg: #ffffff; --fg: #0f172a; }\n  :root.dark { --bg: #0f172a; --fg: #f8fafc; }\n  body { margin: 0; min-height: 200px; display: grid; place-items: center; background: var(--bg); color: var(--fg); font-family: system-ui, sans-serif; }\n  button { padding: 12px 20px; border-radius: 10px; border: 0; background: #6366f1; color: #fff; font-weight: 600; cursor: pointer; }\n  ::view-transition-old(root), ::view-transition-new(root) { animation-duration: .45s; }\n\u003C\u002Fstyle>\n\u003Cdiv>\u003Ch2>Theme toggle\u003C\u002Fh2>\u003Cbutton id='toggle'>Toggle theme\u003C\u002Fbutton>\u003C\u002Fdiv>\n\u003Cscript>\n  function update() { document.documentElement.classList.toggle('dark'); }\n  document.getElementById('toggle').addEventListener('click', function () {\n    if (!document.startViewTransition) { update(); return; }\n    document.startViewTransition(function () { update(); });\n  });\n\u003C\u002Fscript>",true,{"id":100,"language":16,"code":101,"is_editable":98},596,"\u003Cstyle>\n  body { font-family: system-ui, sans-serif; padding: 24px; }\n  .grid { display: flex; gap: 12px; flex-wrap: wrap; }\n  .tile { width: 90px; height: 90px; border-radius: 12px; color: #fff; display: grid; place-items: center; font-weight: 700; cursor: pointer; }\n  .a { background: #ef4444; view-transition-name: tile-a; }\n  .b { background: #10b981; view-transition-name: tile-b; }\n  .c { background: #3b82f6; view-transition-name: tile-c; }\n  .d { background: #f59e0b; view-transition-name: tile-d; }\n\u003C\u002Fstyle>\n\u003Cbutton id='shuffle'>Shuffle tiles\u003C\u002Fbutton>\n\u003Cdiv class='grid' id='grid' style='margin-top: 16px'>\n  \u003Cdiv class='tile a'>A\u003C\u002Fdiv>\u003Cdiv class='tile b'>B\u003C\u002Fdiv>\u003Cdiv class='tile c'>C\u003C\u002Fdiv>\u003Cdiv class='tile d'>D\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003Cscript>\n  function shuffle() {\n    var grid = document.getElementById('grid');\n    var items = Array.prototype.slice.call(grid.children);\n    items.sort(function () { return Math.random() - 0.5; });\n    items.forEach(function (el) { grid.appendChild(el); });\n  }\n  document.getElementById('shuffle').addEventListener('click', function () {\n    if (!document.startViewTransition) { shuffle(); return; }\n    document.startViewTransition(shuffle);\n  });\n\u003C\u002Fscript>",{"id":103,"language":16,"code":104,"is_editable":98},597,"\u003Cstyle>\n  body { font-family: system-ui, sans-serif; padding: 24px; }\n  .thumb { width: 120px; height: 80px; border-radius: 10px; background: linear-gradient(135deg, #8b5cf6, #ec4899); cursor: pointer; }\n  .full { width: 100%; max-width: 420px; height: 240px; border-radius: 16px; background: linear-gradient(135deg, #8b5cf6, #ec4899); }\n  .hero { view-transition-name: hero; }\n  .hidden { display: none; }\n  ::view-transition-group(hero) { animation-duration: .5s; animation-timing-function: cubic-bezier(.2, .8, .2, 1); }\n\u003C\u002Fstyle>\n\u003Cdiv id='list'>\u003Cdiv class='thumb hero' id='thumb'>\u003C\u002Fdiv>\u003Cp>Click the thumbnail to morph it into a large image.\u003C\u002Fp>\u003C\u002Fdiv>\n\u003Cdiv id='detail' class='hidden'>\u003Cdiv class='full' id='full'>\u003C\u002Fdiv>\u003Cp>\u003Cbutton id='back'>Back\u003C\u002Fbutton>\u003C\u002Fp>\u003C\u002Fdiv>\n\u003Cscript>\n  function show(detail) {\n    var t = document.getElementById('thumb');\n    var f = document.getElementById('full');\n    document.getElementById('list').classList.toggle('hidden', detail);\n    document.getElementById('detail').classList.toggle('hidden', !detail);\n    if (detail) { t.classList.remove('hero'); f.classList.add('hero'); } else { f.classList.remove('hero'); t.classList.add('hero'); }\n  }\n  function go(detail) {\n    if (!document.startViewTransition) { show(detail); return; }\n    document.startViewTransition(function () { show(detail); });\n  }\n  document.getElementById('thumb').addEventListener('click', function () { go(true); });\n  document.getElementById('back').addEventListener('click', function () { go(false); });\n\u003C\u002Fscript>",{"id":106,"language":10,"code":107,"is_editable":98},598,"\u002F* shared.css: include on every page of a same-origin multi-page site *\u002F\n@view-transition {\n  navigation: auto;\n}\n\n\u002F* Morph the site header between pages *\u002F\nheader.site {\n  view-transition-name: site-header;\n}\n\n\u002F* Custom page animation *\u002F\n@keyframes fade-out { to { opacity: 0; transform: translateY(-10px); } }\n@keyframes fade-in { from { opacity: 0; transform: translateY(10px); } }\n\n::view-transition-old(root) {\n  animation: .25s ease-in both fade-out;\n}\n::view-transition-new(root) {\n  animation: .35s ease-out both fade-in;\n}\n\n\u002F* Respect user motion settings *\u002F\n@media (prefers-reduced-motion: reduce) {\n  ::view-transition-group(*),\n  ::view-transition-old(*),\n  ::view-transition-new(*) {\n    animation: none !important;\n  }\n}",[109],{"id":110,"title":111,"slug":112,"prompt":113,"starter_code":114,"expected_output":115,"language":16,"order_index":23},210,"Add a safe view transition to a list reorder","view-transition-list-reorder","Wrap the DOM update in document.startViewTransition, but only when the API exists and the user does not prefer reduced motion. Give every list item a unique view-transition-name so items slide to their new positions.","\u003Cstyle>\n  li { padding: 10px; margin: 6px 0; background: #e0e7ff; border-radius: 8px; list-style: none; width: 220px; font-family: system-ui, sans-serif; }\n  \u002F* TODO: unique view-transition-name for each li *\u002F\n\u003C\u002Fstyle>\n\u003Cbutton id='rev'>Reverse\u003C\u002Fbutton>\n\u003Cul id='list'>\u003Cli id='one'>One\u003C\u002Fli>\u003Cli id='two'>Two\u003C\u002Fli>\u003Cli id='three'>Three\u003C\u002Fli>\u003C\u002Ful>\n\u003Cscript>\n  function reverse() {\n    var ul = document.getElementById('list');\n    Array.prototype.slice.call(ul.children).reverse().forEach(function (li) { ul.appendChild(li); });\n  }\n  document.getElementById('rev').addEventListener('click', function () {\n    \u002F\u002F TODO: feature-detect startViewTransition and prefers-reduced-motion\n    reverse();\n  });\n\u003C\u002Fscript>","Clicking Reverse smoothly slides the list items into their new order in supporting browsers, and instantly reorders them in browsers without support or when reduced motion is on.","2026-09-30T18:50:34+00:00",{"id":118,"slug":119,"title":120},145,"css-scroll-driven-animations","CSS Scroll-Driven Animations: animation-timeline, scroll() and view()",{"id":122,"slug":123,"title":124},147,"motion-accessibility-prefers-reduced-motion-performance","Motion Accessibility and Performance: prefers-reduced-motion, will-change and Smooth 60fps Animations",{"data":126},[127,448],{"id":23,"name":15,"slug":128,"icon":5,"icon_url":5,"short_description":129,"meta_title":130,"meta_description":131,"og_image":132,"locale":133,"subcategories":134},"html-tutorial","Welcome to our HTML Tutorial for Beginners, a complete guide designed to help you learn HTML from the ground up.\n\nHTML, which stands for HyperText Markup Language, is the standard language used to structure content on the web. Whether you want to become a web developer, build your own website, or continue learning CSS and JavaScript, understanding HTML is an essential first step.\n\nThis HTML course takes you through the fundamentals step by step, using simple explanations and practical examples. ","HTML Tutorial for Beginners - Learn HTML Step by Step","Learn HTML from scratch with our beginner-friendly HTML tutorial. Understand HTML tags, elements, forms, tables, links, images, semantic HTML and more with practical examples.","https:\u002F\u002Fwpfsharp.com\u002Fstorage\u002Fcourses\u002Fog\u002F01M2GK0XN45C0B937NF9XFAD4S.webp","en",[135,160,196,220,296,330,344,372,396,412],{"id":23,"name":136,"slug":137,"order_index":23,"topics":138},"HTML Fundamentals & Setup","html-fundamentals-setup",[139,142,145,149,153,156],{"id":12,"title":140,"slug":141,"order_index":23,"cornerstone":52,"reading_time_minutes":12},"HTML Editors & Environment Setup","html-editors-and-environment-setup",{"id":23,"title":143,"slug":144,"order_index":23,"cornerstone":52,"reading_time_minutes":23},"HTML Introduction & History","html-introduction-and-history",{"id":146,"title":147,"slug":148,"order_index":146,"cornerstone":52,"reading_time_minutes":12},3,"HTML Basic Syntax & Document Structure","html-basic-syntax-document-structure",{"id":150,"title":151,"slug":152,"order_index":150,"cornerstone":52,"reading_time_minutes":12},4,"HTML Elements & Tags Explained","html-elements-tags-explained",{"id":51,"title":154,"slug":155,"order_index":51,"cornerstone":52,"reading_time_minutes":12},"HTML Attributes (Global & Standard)","html-attributes-global-standard",{"id":157,"title":158,"slug":159,"order_index":157,"cornerstone":52,"reading_time_minutes":12},6,"Understanding the DOCTYPE & HTML5 Boilerplate","understanding-doctype-html5-boilerplate",{"id":12,"name":161,"slug":162,"order_index":12,"topics":163},"Text & Content Basics","text-content-basics",[164,168,172,176,180,184,188,192],{"id":165,"title":166,"slug":167,"order_index":165,"cornerstone":52,"reading_time_minutes":12},7,"HTML Headings (H1–H6) & SEO Best Practices","html-headings-h1-h6-seo-best-practices",{"id":169,"title":170,"slug":171,"order_index":169,"cornerstone":52,"reading_time_minutes":12},8,"HTML Paragraphs & Line Breaks","html-paragraphs-line-breaks",{"id":173,"title":174,"slug":175,"order_index":173,"cornerstone":52,"reading_time_minutes":23},9,"HTML Text Formatting (Bold, Italic, Mark, etc.)","html-text-formatting-bold-italic-mark",{"id":177,"title":178,"slug":179,"order_index":177,"cornerstone":52,"reading_time_minutes":12},10,"HTML Styles (Inline CSS Basics)","html-styles-inline-css-basics",{"id":181,"title":182,"slug":183,"order_index":181,"cornerstone":52,"reading_time_minutes":12},11,"HTML Quotations & Citations (blockquote, q, cite)","html-quotations-citations-blockquote-q-cite",{"id":185,"title":186,"slug":187,"order_index":185,"cornerstone":52,"reading_time_minutes":12},12,"HTML Comments (Best Practices)","html-comments-best-practices",{"id":189,"title":190,"slug":191,"order_index":189,"cornerstone":52,"reading_time_minutes":12},13,"HTML Colors (Names, HEX, RGB, HSL)","html-colors-names-hex-rgb-hsl",{"id":193,"title":194,"slug":195,"order_index":193,"cornerstone":52,"reading_time_minutes":12},14,"HTML & CSS Integration (Inline, Internal, External)","html-css-integration-inline-internal-external",{"id":146,"name":197,"slug":198,"order_index":146,"topics":199},"Links, Media & Navigation","links-media-navigation",[200,204,208,212,216],{"id":201,"title":202,"slug":203,"order_index":201,"cornerstone":52,"reading_time_minutes":12},15,"HTML Links (Anchor Tags & Hyperlinks)","html-links-anchor-tags-hyperlinks",{"id":205,"title":206,"slug":207,"order_index":205,"cornerstone":52,"reading_time_minutes":12},16,"HTML Images (Alt Text, Lazy Loading, Formats)","html-images-alt-text-lazy-loading-formats",{"id":209,"title":210,"slug":211,"order_index":209,"cornerstone":52,"reading_time_minutes":23},17,"HTML Favicon Setup","html-favicon-setup",{"id":213,"title":214,"slug":215,"order_index":213,"cornerstone":52,"reading_time_minutes":12},18,"HTML Page Title & Meta Tags (SEO Essentials)","html-page-title-meta-tags-seo-essentials",{"id":217,"title":218,"slug":219,"order_index":217,"cornerstone":52,"reading_time_minutes":12},19,"HTML File Paths (Absolute vs Relative)","html-file-paths-absolute-vs-relative",{"id":150,"name":221,"slug":222,"order_index":150,"topics":223},"Structuring Content","structuring-content",[224,229,234,239,244,248,252,256,260,264,268,272,276,280,284,288,292],{"id":225,"title":226,"slug":227,"order_index":228,"cornerstone":52,"reading_time_minutes":12},24,"HTML Tables Explained: Rows, Columns & Merging Cells","html-tables-rows-columns-merging-cells",20,{"id":230,"title":231,"slug":232,"order_index":233,"cornerstone":52,"reading_time_minutes":12},25,"HTML Lists: Ordered, Unordered & Description Lists","html-lists-ordered-unordered-description",21,{"id":235,"title":236,"slug":237,"order_index":238,"cornerstone":52,"reading_time_minutes":12},26,"HTML Block vs Inline Elements Explained","html-block-vs-inline-elements",22,{"id":240,"title":241,"slug":242,"order_index":243,"cornerstone":52,"reading_time_minutes":23},27,"HTML Div & Span: Generic Containers Explained","html-div-and-span-containers",23,{"id":245,"title":246,"slug":247,"order_index":225,"cornerstone":52,"reading_time_minutes":12},28,"HTML Classes vs ID: Selectors Explained","html-classes-vs-id-selectors-explained",{"id":249,"title":250,"slug":251,"order_index":230,"cornerstone":52,"reading_time_minutes":23},29,"HTML Iframes: Embedding External Content","html-iframes-embedding-content",{"id":253,"title":254,"slug":255,"order_index":235,"cornerstone":52,"reading_time_minutes":12},30,"HTML Head Element Deep Dive","html-head-element-deep-dive",{"id":257,"title":258,"slug":259,"order_index":240,"cornerstone":52,"reading_time_minutes":12},31,"HTML Layout Techniques: Header, Nav & Footer","html-layout-techniques-header-nav-footer",{"id":261,"title":262,"slug":263,"order_index":245,"cornerstone":52,"reading_time_minutes":12},32,"Responsive HTML Design: Mobile-First Approach","responsive-html-design-mobile-first-approach",{"id":265,"title":266,"slug":267,"order_index":249,"cornerstone":52,"reading_time_minutes":146},74,"HTML Semantic Elements (article, section, aside, nav)","html-semantic-elements-article-section-aside-nav",{"id":269,"title":270,"slug":271,"order_index":253,"cornerstone":52,"reading_time_minutes":12},75,"HTML Style Guide & Coding Conventions","html-style-guide-coding-conventions",{"id":273,"title":274,"slug":275,"order_index":257,"cornerstone":52,"reading_time_minutes":12},76,"HTML Entities & Special Characters","html-entities-special-characters",{"id":277,"title":278,"slug":279,"order_index":261,"cornerstone":52,"reading_time_minutes":23},77,"HTML Symbols","html-symbols",{"id":281,"title":282,"slug":283,"order_index":281,"cornerstone":52,"reading_time_minutes":23},33,"HTML Emojis 😀: How to Use Them in Web Pages","html-emojis-trending-guide",{"id":285,"title":286,"slug":287,"order_index":285,"cornerstone":52,"reading_time_minutes":12},34,"HTML Character Sets: UTF-8 & Encoding Explained","html-character-sets-utf-8-encoding",{"id":289,"title":290,"slug":291,"order_index":289,"cornerstone":52,"reading_time_minutes":23},35,"HTML URL Encoding Explained","html-url-encoding-explained",{"id":293,"title":294,"slug":295,"order_index":293,"cornerstone":52,"reading_time_minutes":23},36,"HTML vs XHTML: Key Differences","html-vs-xhtml-key-differences",{"id":165,"name":297,"slug":298,"order_index":51,"topics":299},"Forms & User Input","forms-user-input",[300,305,310,315,320,325],{"id":301,"title":302,"slug":303,"order_index":304,"cornerstone":52,"reading_time_minutes":12},49,"HTML Forms Introduction","html-forms-introduction",37,{"id":306,"title":307,"slug":308,"order_index":309,"cornerstone":52,"reading_time_minutes":23},50,"HTML Form Attributes (action, method, etc.)","html-form-attributes-action-method",38,{"id":311,"title":312,"slug":313,"order_index":314,"cornerstone":52,"reading_time_minutes":23},51,"HTML Form Elements (input, select, textarea, button)","html-form-elements-input-select-textarea-button",39,{"id":316,"title":317,"slug":318,"order_index":319,"cornerstone":52,"reading_time_minutes":12},52,"HTML Input Types (Modern Types: email, date, color, range)","html-input-types-modern-email-date-color-range",40,{"id":321,"title":322,"slug":323,"order_index":324,"cornerstone":52,"reading_time_minutes":12},53,"HTML Input Attributes (required, placeholder, pattern)","html-input-attributes-required-placeholder-pattern",41,{"id":326,"title":327,"slug":328,"order_index":329,"cornerstone":52,"reading_time_minutes":12},54,"HTML Form Validation (Client-Side)","html-form-validation-client-side",42,{"id":169,"name":331,"slug":332,"order_index":157,"topics":333},"Graphics & Visuals","graphics-visuals",[334,339],{"id":335,"title":336,"slug":337,"order_index":338,"cornerstone":52,"reading_time_minutes":146},55,"HTML Canvas (2D Drawing API) 🔥","html-canvas-2d-drawing-api",43,{"id":340,"title":341,"slug":342,"order_index":343,"cornerstone":52,"reading_time_minutes":146},56,"HTML SVG (Scalable Vector Graphics)","html-svg-scalable-vector-graphics",44,{"id":173,"name":345,"slug":346,"order_index":165,"topics":347},"Multimedia","multimedia",[348,353,358,363,368],{"id":349,"title":350,"slug":351,"order_index":352,"cornerstone":52,"reading_time_minutes":12},57,"HTML Media Overview","html-media-overview",45,{"id":354,"title":355,"slug":356,"order_index":357,"cornerstone":52,"reading_time_minutes":12},58,"HTML Video Embedding (Native Player)","html-video-embedding-native-player",46,{"id":359,"title":360,"slug":361,"order_index":362,"cornerstone":52,"reading_time_minutes":12},59,"HTML Audio Embedding","html-audio-embedding",47,{"id":364,"title":365,"slug":366,"order_index":367,"cornerstone":52,"reading_time_minutes":12},60,"HTML Plug-ins (Object & Embed Tags)","html-plugins-object-embed-tags",48,{"id":369,"title":370,"slug":371,"order_index":301,"cornerstone":52,"reading_time_minutes":12},61,"Embedding YouTube Videos in HTML","embedding-youtube-videos-in-html",{"id":177,"name":373,"slug":374,"order_index":169,"topics":375},"HTML5 Web APIs (Advanced\u002FTrending)","html5-web-apis-advancedtrending",[376,380,384,388,392],{"id":377,"title":378,"slug":379,"order_index":306,"cornerstone":52,"reading_time_minutes":12},62,"HTML Geolocation API","html-geolocation-api",{"id":381,"title":382,"slug":383,"order_index":311,"cornerstone":52,"reading_time_minutes":12},63,"HTML Drag & Drop API","html-drag-and-drop-api",{"id":385,"title":386,"slug":387,"order_index":316,"cornerstone":52,"reading_time_minutes":12},64,"HTML Web Storage (localStorage & sessionStorage)","html-web-storage-localstorage-sessionstorage",{"id":389,"title":390,"slug":391,"order_index":321,"cornerstone":52,"reading_time_minutes":12},65,"HTML Web Workers (Background Processing)","html-web-workers-background-processing",{"id":393,"title":394,"slug":395,"order_index":326,"cornerstone":52,"reading_time_minutes":12},66,"HTML Server-Sent Events (SSE)","html-server-sent-events-sse",{"id":181,"name":397,"slug":398,"order_index":173,"topics":399},"Accessibility & Best Practices (High-Demand  Skill) �","accessibility-best-practices-high-demand-skill",[400,404,408],{"id":401,"title":402,"slug":403,"order_index":335,"cornerstone":52,"reading_time_minutes":12},67,"HTML Accessibility (ARIA, Screen Readers)","html-accessibility-aria-screen-readers",{"id":405,"title":406,"slug":407,"order_index":340,"cornerstone":52,"reading_time_minutes":12},68,"Writing Semantic & SEO-Friendly HTML","writing-semantic-and-seo-friendly-html",{"id":409,"title":410,"slug":411,"order_index":349,"cornerstone":52,"reading_time_minutes":12},69,"HTML Performance Optimization Basics","html-performance-optimization-basics",{"id":185,"name":413,"slug":414,"order_index":177,"topics":415},"Reference & Practice","reference-practice",[416,420,424,428,432,436,440,444],{"id":417,"title":418,"slug":419,"order_index":23,"cornerstone":52,"reading_time_minutes":12},70,"HTML Tag List (Full Reference)","html-tag-list-full-reference",{"id":421,"title":422,"slug":423,"order_index":12,"cornerstone":52,"reading_time_minutes":12},71,"HTML Global Attributes Reference","html-global-attributes-reference",{"id":425,"title":426,"slug":427,"order_index":146,"cornerstone":52,"reading_time_minutes":12},72,"HTML Events Reference","html-events-reference",{"id":429,"title":430,"slug":431,"order_index":150,"cornerstone":52,"reading_time_minutes":12},73,"HTML Browser Support & Compatibility","html-browser-support-compatibility",{"id":433,"title":434,"slug":435,"order_index":51,"cornerstone":52,"reading_time_minutes":12},78,"HTML Doctypes Reference","html-doctypes-reference",{"id":437,"title":438,"slug":439,"order_index":157,"cornerstone":52,"reading_time_minutes":12},79,"HTTP Methods & Messages (Basics for Forms\u002FAPIs)","http-methods-messages-basics",{"id":441,"title":442,"slug":443,"order_index":165,"cornerstone":52,"reading_time_minutes":146},80,"HTML Interview Preparation (Top Q&A)","html-interview-preparation-top-qa",{"id":445,"title":446,"slug":447,"order_index":169,"cornerstone":52,"reading_time_minutes":23},81,"HTML Quiz & Practice Exercises","html-quiz-practice-exercises",{"id":12,"name":9,"slug":10,"icon":5,"icon_url":5,"short_description":449,"meta_title":450,"meta_description":451,"og_image":5,"locale":133,"subcategories":452},"Master CSS from basics to advanced. Learn styling, layouts, Flexbox, Grid, and responsive design with practical examples.","CSS Course - Learn CSS from Scratch to Advanced","Learn CSS (Cascading Style Sheets) step by step. Master selectors, layouts, Flexbox, Grid, animations, and responsive web design with hands-on examples.",[453,482,506,542,574,606,638,670,698,726],{"id":243,"name":454,"slug":455,"order_index":456,"topics":457},"UI Components","ui-components",0,[458,462,466,470,474,478],{"id":459,"title":460,"slug":461,"order_index":369,"cornerstone":52,"reading_time_minutes":157},148,"CSS Buttons: Variants, States, Sizes and Accessible Button Design","css-buttons",{"id":463,"title":464,"slug":465,"order_index":377,"cornerstone":52,"reading_time_minutes":157},149,"CSS Card Component: Layouts with Flexbox, Grid, Container Queries and Subgrid","css-cards",{"id":467,"title":468,"slug":469,"order_index":381,"cornerstone":52,"reading_time_minutes":165},150,"CSS Navbar and Dropdown Menus: Responsive, Sticky and Accessible Navigation","css-navbar-dropdowns",{"id":471,"title":472,"slug":473,"order_index":385,"cornerstone":52,"reading_time_minutes":157},151,"HTML and CSS Forms and Inputs: Styled, Accessible and Validated Form Controls","css-forms-inputs",{"id":475,"title":476,"slug":477,"order_index":389,"cornerstone":52,"reading_time_minutes":157},152,"CSS Tooltips and Popovers: Popover API, Anchor Positioning and Accessible Overlays","css-tooltips-popovers",{"id":479,"title":480,"slug":481,"order_index":393,"cornerstone":52,"reading_time_minutes":157},153,"Pagination and Breadcrumbs: Accessible Navigation Patterns with HTML, CSS and Schema","pagination-breadcrumbs",{"id":189,"name":483,"slug":484,"order_index":456,"topics":485},"CSS Fundamentals & Setup","css-fundamentals-setup",[486,490,494,498,502],{"id":487,"title":488,"slug":489,"order_index":23,"cornerstone":52,"reading_time_minutes":150},82,"CSS Introduction & History: What Is CSS and Why It Matters","css-introduction-and-history",{"id":491,"title":492,"slug":493,"order_index":12,"cornerstone":52,"reading_time_minutes":150},83,"CSS Syntax & How Browsers Apply Styles","css-syntax-how-browsers-apply-styles",{"id":495,"title":496,"slug":497,"order_index":146,"cornerstone":52,"reading_time_minutes":146},84,"Setting Up Your CSS Workspace: Linking Files & Live Server","setting-up-css-workspace-linking-files-live-server",{"id":499,"title":500,"slug":501,"order_index":150,"cornerstone":52,"reading_time_minutes":146},85,"CSS Comments & Code Formatting Best Practices","css-comments-and-code-formatting",{"id":503,"title":504,"slug":505,"order_index":51,"cornerstone":52,"reading_time_minutes":51},86,"Browser DevTools for CSS: Inspect, Debug & Edit Styles Live","browser-devtools-for-css",{"id":193,"name":507,"slug":508,"order_index":456,"topics":509},"Selectors & the Cascade","selectors-the-cascade",[510,514,518,522,526,530,534,538],{"id":511,"title":512,"slug":513,"order_index":157,"cornerstone":52,"reading_time_minutes":150},87,"CSS Basic Selectors: Type, Class, ID, Universal & Grouping","css-basic-selectors",{"id":515,"title":516,"slug":517,"order_index":165,"cornerstone":52,"reading_time_minutes":150},88,"CSS Combinators: Descendant, Child, Adjacent & General Sibling","css-combinators",{"id":519,"title":520,"slug":521,"order_index":169,"cornerstone":52,"reading_time_minutes":150},89,"CSS Attribute Selectors: [attr], ^=, $=, *= and More","css-attribute-selectors",{"id":523,"title":524,"slug":525,"order_index":173,"cornerstone":52,"reading_time_minutes":157},90,"CSS Pseudo-classes: :hover, :focus, :nth-child & Modern Selectors","css-pseudo-classes",{"id":527,"title":528,"slug":529,"order_index":177,"cornerstone":52,"reading_time_minutes":51},91,"CSS Pseudo-elements (::before, ::after)","css-pseudo-elements-before-after",{"id":531,"title":532,"slug":533,"order_index":181,"cornerstone":52,"reading_time_minutes":51},92,"Modern CSS Selectors: :is(), :where(), :has()","modern-css-selectors-is-where-has",{"id":535,"title":536,"slug":537,"order_index":185,"cornerstone":52,"reading_time_minutes":150},93,"CSS Specificity Explained","css-specificity-explained",{"id":539,"title":540,"slug":541,"order_index":189,"cornerstone":52,"reading_time_minutes":51},94,"Cascade, Inheritance & !important","css-cascade-inheritance-important",{"id":201,"name":543,"slug":544,"order_index":456,"topics":545},"Colors, Backgrounds & Effects","colors-backgrounds-effects",[546,550,554,558,562,566,570],{"id":547,"title":548,"slug":549,"order_index":193,"cornerstone":52,"reading_time_minutes":51},95,"CSS Colors (HEX, RGB, HSL, OKLCH)","css-colors-hex-rgb-hsl-oklch",{"id":551,"title":552,"slug":553,"order_index":201,"cornerstone":52,"reading_time_minutes":150},96,"CSS Backgrounds","css-backgrounds",{"id":555,"title":556,"slug":557,"order_index":205,"cornerstone":52,"reading_time_minutes":51},97,"CSS Gradients (Linear, Radial, Conic)","css-gradients-linear-radial-conic",{"id":559,"title":560,"slug":561,"order_index":209,"cornerstone":52,"reading_time_minutes":51},98,"CSS Borders, Outlines & Rounded Corners","css-borders-outlines-rounded-corners",{"id":563,"title":564,"slug":565,"order_index":213,"cornerstone":52,"reading_time_minutes":157},99,"CSS Box Shadow & Text Shadow","css-box-shadow-text-shadow",{"id":567,"title":568,"slug":569,"order_index":217,"cornerstone":52,"reading_time_minutes":51},100,"CSS Opacity & Blend Modes","css-opacity-blend-modes",{"id":571,"title":572,"slug":573,"order_index":228,"cornerstone":52,"reading_time_minutes":157},101,"CSS Filters & backdrop-filter (Glassmorphism)","css-filters-backdrop-filter-glassmorphism",{"id":205,"name":575,"slug":576,"order_index":456,"topics":577},"Box Model & Spacing","box-model-spacing",[578,582,586,590,594,598,602],{"id":579,"title":580,"slug":581,"order_index":233,"cornerstone":52,"reading_time_minutes":165},102,"The CSS Box Model: Content, Padding, Border and Margin","css-box-model",{"id":583,"title":584,"slug":585,"order_index":238,"cornerstone":52,"reading_time_minutes":165},103,"CSS Margin and Margin Collapse","css-margin-and-margin-collapse",{"id":587,"title":588,"slug":589,"order_index":243,"cornerstone":52,"reading_time_minutes":157},104,"CSS Padding: Shorthand, Percentages and Best Practices","css-padding",{"id":591,"title":592,"slug":593,"order_index":225,"cornerstone":52,"reading_time_minutes":173},105,"CSS Width, Height, Min-Width, Max-Width, Min-Height & Max-Height","css-width-height-min-max",{"id":595,"title":596,"slug":597,"order_index":230,"cornerstone":52,"reading_time_minutes":51},106,"CSS box-sizing: content-box vs border-box","css-box-sizing",{"id":599,"title":600,"slug":601,"order_index":235,"cornerstone":52,"reading_time_minutes":165},107,"CSS Overflow: hidden, scroll, auto, clip and Text Truncation","css-overflow",{"id":603,"title":604,"slug":605,"order_index":240,"cornerstone":52,"reading_time_minutes":165},108,"CSS Units: px, rem, em, %, vw, vh and dvh","css-units",{"id":209,"name":607,"slug":608,"order_index":456,"topics":609},"Typography & Text","typography-text",[610,614,618,622,626,630,634],{"id":611,"title":612,"slug":613,"order_index":245,"cornerstone":52,"reading_time_minutes":165},109,"CSS Text Properties: Alignment, Spacing, Decoration and Wrapping","css-text-properties",{"id":615,"title":616,"slug":617,"order_index":249,"cornerstone":52,"reading_time_minutes":165},110,"CSS Fonts and font-family: Font Stacks, Weights and System Fonts","css-fonts-font-family",{"id":619,"title":620,"slug":621,"order_index":253,"cornerstone":52,"reading_time_minutes":165},111,"Web Fonts: Google Fonts, @font-face and Variable Fonts","web-fonts",{"id":623,"title":624,"slug":625,"order_index":257,"cornerstone":52,"reading_time_minutes":165},112,"CSS Text Effects: text-wrap balance, line-clamp, Ellipsis and More","css-text-effects",{"id":627,"title":628,"slug":629,"order_index":261,"cornerstone":52,"reading_time_minutes":169},113,"Styling Links","styling-links-css",{"id":631,"title":632,"slug":633,"order_index":281,"cornerstone":52,"reading_time_minutes":165},114,"Styling Lists & Tables","styling-lists-and-tables-css",{"id":635,"title":636,"slug":637,"order_index":285,"cornerstone":52,"reading_time_minutes":177},115,"Icons (SVG & Icon Fonts)","icons-svg-and-icon-fonts",{"id":213,"name":639,"slug":640,"order_index":456,"topics":641},"Display, Position & Layout Basics","display-position-layout-basics",[642,646,650,654,658,662,666],{"id":643,"title":644,"slug":645,"order_index":289,"cornerstone":52,"reading_time_minutes":165},116,"Display & Inline-block","display-and-inline-block",{"id":647,"title":648,"slug":649,"order_index":293,"cornerstone":52,"reading_time_minutes":157},117,"Position (relative, absolute, fixed, sticky)","position-relative-absolute-fixed-sticky",{"id":651,"title":652,"slug":653,"order_index":304,"cornerstone":52,"reading_time_minutes":157},118,"Z-index & Stacking Contexts","z-index-and-stacking-contexts",{"id":655,"title":656,"slug":657,"order_index":309,"cornerstone":52,"reading_time_minutes":51},119,"Float & Clear (Legacy, and Why to Avoid It)","float-and-clear",{"id":659,"title":660,"slug":661,"order_index":314,"cornerstone":52,"reading_time_minutes":157},120,"Centering Techniques","centering-techniques",{"id":663,"title":664,"slug":665,"order_index":319,"cornerstone":52,"reading_time_minutes":165},121,"aspect-ratio & object-fit","aspect-ratio-and-object-fit",{"id":667,"title":668,"slug":669,"order_index":324,"cornerstone":52,"reading_time_minutes":169},122,"Website Layout Basics","website-layout-basics",{"id":228,"name":671,"slug":672,"order_index":456,"topics":673},"The Modern CSS Toolkit","the-modern-css-toolkit",[674,678,682,686,690,694],{"id":675,"title":676,"slug":677,"order_index":329,"cornerstone":52,"reading_time_minutes":169},129,"CSS Variables (Custom Properties)","css-variables-custom-properties",{"id":679,"title":680,"slug":681,"order_index":338,"cornerstone":52,"reading_time_minutes":169},130,"Math Functions (calc, min, max, clamp)","math-functions-calc-min-max-clamp",{"id":683,"title":684,"slug":685,"order_index":343,"cornerstone":52,"reading_time_minutes":165},131,"Native CSS Nesting","native-css-nesting",{"id":687,"title":688,"slug":689,"order_index":352,"cornerstone":52,"reading_time_minutes":165},132,"Cascade Layers (@layer)","cascade-layers-at-layer",{"id":691,"title":692,"slug":693,"order_index":357,"cornerstone":52,"reading_time_minutes":173},133,"Dark Mode (prefers-color-scheme, light-dark())","dark-mode-prefers-color-scheme-light-dark",{"id":695,"title":696,"slug":697,"order_index":362,"cornerstone":52,"reading_time_minutes":169},134,"CSS Reset & Normalize","css-reset-and-normalize",{"id":233,"name":699,"slug":700,"order_index":456,"topics":701},"Responsive Design","responsive-design",[702,706,710,714,718,722],{"id":703,"title":704,"slug":705,"order_index":367,"cornerstone":52,"reading_time_minutes":173},135,"Mobile-First & the Viewport","mobile-first-and-the-viewport",{"id":707,"title":708,"slug":709,"order_index":301,"cornerstone":52,"reading_time_minutes":169},136,"Media Queries","media-queries",{"id":711,"title":712,"slug":713,"order_index":306,"cornerstone":52,"reading_time_minutes":169},137,"Responsive Images & Video","responsive-images-and-video",{"id":715,"title":716,"slug":717,"order_index":311,"cornerstone":52,"reading_time_minutes":173},138,"Fluid Typography with clamp()","fluid-typography-with-clamp",{"id":719,"title":720,"slug":721,"order_index":316,"cornerstone":52,"reading_time_minutes":173},139,"Container Queries","container-queries",{"id":723,"title":724,"slug":725,"order_index":321,"cornerstone":52,"reading_time_minutes":185},140,"Responsive Navigation Pattern","responsive-navigation-pattern",{"id":238,"name":43,"slug":44,"order_index":456,"topics":727},[728,732,736,740,744,745,746],{"id":729,"title":730,"slug":731,"order_index":326,"cornerstone":52,"reading_time_minutes":51},141,"CSS Transitions: Smooth State Changes with transition, @starting-style and allow-discrete","css-transitions",{"id":733,"title":734,"slug":735,"order_index":335,"cornerstone":52,"reading_time_minutes":150},142,"CSS 2D Transforms: translate, rotate, scale, skew and transform-origin","css-2d-transforms",{"id":737,"title":738,"slug":739,"order_index":340,"cornerstone":52,"reading_time_minutes":51},143,"CSS 3D Transforms: perspective, preserve-3d, rotateX\u002FY and backface-visibility","css-3d-transforms",{"id":741,"title":742,"slug":743,"order_index":349,"cornerstone":52,"reading_time_minutes":51},144,"CSS Keyframe Animations: @keyframes, animation shorthand, fill-mode and @property","css-keyframe-animations",{"id":118,"title":120,"slug":119,"order_index":354,"cornerstone":52,"reading_time_minutes":51},{"id":37,"title":38,"slug":39,"order_index":359,"cornerstone":52,"reading_time_minutes":51},{"id":122,"title":124,"slug":123,"order_index":364,"cornerstone":52,"reading_time_minutes":157}]