[{"data":1,"prerenderedAt":1051},["ShallowReactive",2],{"guide-html-whitespace-optimization":3},{"id":4,"title":5,"body":6,"date":1043,"description":1044,"extension":1045,"meta":1046,"navigation":219,"path":1047,"readingTime":239,"seo":1048,"stem":1049,"__hash__":1050},"guides\u002Fguides\u002Fhtml-whitespace-optimization.md","HTML Whitespace and Comment Optimization Techniques",{"type":7,"value":8,"toc":1016},"minimark",[9,14,18,21,25,28,119,127,131,145,322,325,329,336,425,432,437,520,523,527,530,534,554,557,561,572,581,585,588,600,612,648,651,672,678,682,688,719,722,726,729,733,779,783,790,811,815,837,848,852,913,916,920,923,947,951,976,980,1000,1004,1012],[10,11,13],"h2",{"id":12},"why-whitespace-matters-in-html","Why Whitespace Matters in HTML",[15,16,17],"p",{},"Whitespace makes source code readable for developers but costs bytes on the network. Every space, tab, and line break between tags adds characters the browser does not render. On a page with deeply nested markup, whitespace can account for 10–20% of the total file size.",[15,19,20],{},"Understanding how browsers handle whitespace helps you decide what to keep and what to remove.",[10,22,24],{"id":23},"types-of-whitespace","Types of Whitespace",[15,26,27],{},"HTML recognizes three whitespace characters:",[29,30,31,50],"table",{},[32,33,34],"thead",{},[35,36,37,41,44,47],"tr",{},[38,39,40],"th",{},"Character",[38,42,43],{},"Name",[38,45,46],{},"Code Point",[38,48,49],{},"Common Use",[51,52,53,71,87,103],"tbody",{},[35,54,55,62,65,68],{},[56,57,58],"td",{},[59,60,61],"code",{}," ",[56,63,64],{},"Space",[56,66,67],{},"U+0020",[56,69,70],{},"Word separation, indentation",[35,72,73,78,81,84],{},[56,74,75],{},[59,76,77],{},"\\t",[56,79,80],{},"Tab",[56,82,83],{},"U+0009",[56,85,86],{},"Indentation in source code",[35,88,89,94,97,100],{},[56,90,91],{},[59,92,93],{},"\\n",[56,95,96],{},"Line feed",[56,98,99],{},"U+000A",[56,101,102],{},"Line breaks between elements",[35,104,105,110,113,116],{},[56,106,107],{},[59,108,109],{},"\\r",[56,111,112],{},"Carriage return",[56,114,115],{},"U+000D",[56,117,118],{},"Windows-style line endings",[15,120,121,122,126],{},"The browser's whitespace collapsing rule: ",[123,124,125],"strong",{},"sequences of whitespace characters collapse into a single space",". Three spaces become one. A tab plus two newlines becomes one space. This means most indentation whitespace is pure overhead.",[10,128,130],{"id":129},"whitespace-between-block-elements","Whitespace Between Block Elements",[15,132,133,134,137,138,137,141,144],{},"Block elements (",[59,135,136],{},"\u003Cdiv>",", ",[59,139,140],{},"\u003Cp>",[59,142,143],{},"\u003Csection>",") stack vertically. Whitespace between them collapses to nothing visually because block formatting contexts ignore inter-element whitespace.",[146,147,152],"pre",{"className":148,"code":149,"language":150,"meta":151,"style":151},"language-html shiki shiki-themes github-light github-dark","\u003C!-- All the whitespace here is wasted bytes -->\n\u003Cdiv class=\"header\">\n  \u003Ch1>Title\u003C\u002Fh1>\n\u003C\u002Fdiv>\n\n\u003Cdiv class=\"content\">\n  \u003Cp>Paragraph\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003C!-- Minified: same visual result -->\n\u003Cdiv class=\"header\">\u003Ch1>Title\u003C\u002Fh1>\u003C\u002Fdiv>\u003Cdiv class=\"content\">\u003Cp>Paragraph\u003C\u002Fp>\u003C\u002Fdiv>\n","html","",[59,153,154,163,188,204,214,221,237,251,260,265,271],{"__ignoreMap":151},[155,156,159],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"sJ8bj","\u003C!-- All the whitespace here is wasted bytes -->\n",[155,164,166,170,174,178,181,185],{"class":157,"line":165},2,[155,167,169],{"class":168},"sVt8B","\u003C",[155,171,173],{"class":172},"s9eBZ","div",[155,175,177],{"class":176},"sScJk"," class",[155,179,180],{"class":168},"=",[155,182,184],{"class":183},"sZZnC","\"header\"",[155,186,187],{"class":168},">\n",[155,189,191,194,197,200,202],{"class":157,"line":190},3,[155,192,193],{"class":168},"  \u003C",[155,195,196],{"class":172},"h1",[155,198,199],{"class":168},">Title\u003C\u002F",[155,201,196],{"class":172},[155,203,187],{"class":168},[155,205,207,210,212],{"class":157,"line":206},4,[155,208,209],{"class":168},"\u003C\u002F",[155,211,173],{"class":172},[155,213,187],{"class":168},[155,215,217],{"class":157,"line":216},5,[155,218,220],{"emptyLinePlaceholder":219},true,"\n",[155,222,224,226,228,230,232,235],{"class":157,"line":223},6,[155,225,169],{"class":168},[155,227,173],{"class":172},[155,229,177],{"class":176},[155,231,180],{"class":168},[155,233,234],{"class":183},"\"content\"",[155,236,187],{"class":168},[155,238,240,242,244,247,249],{"class":157,"line":239},7,[155,241,193],{"class":168},[155,243,15],{"class":172},[155,245,246],{"class":168},">Paragraph\u003C\u002F",[155,248,15],{"class":172},[155,250,187],{"class":168},[155,252,254,256,258],{"class":157,"line":253},8,[155,255,209],{"class":168},[155,257,173],{"class":172},[155,259,187],{"class":168},[155,261,263],{"class":157,"line":262},9,[155,264,220],{"emptyLinePlaceholder":219},[155,266,268],{"class":157,"line":267},10,[155,269,270],{"class":161},"\u003C!-- Minified: same visual result -->\n",[155,272,274,276,278,280,282,284,287,289,291,293,296,298,300,302,304,306,308,310,312,314,316,318,320],{"class":157,"line":273},11,[155,275,169],{"class":168},[155,277,173],{"class":172},[155,279,177],{"class":176},[155,281,180],{"class":168},[155,283,184],{"class":183},[155,285,286],{"class":168},">\u003C",[155,288,196],{"class":172},[155,290,199],{"class":168},[155,292,196],{"class":172},[155,294,295],{"class":168},">\u003C\u002F",[155,297,173],{"class":172},[155,299,286],{"class":168},[155,301,173],{"class":172},[155,303,177],{"class":176},[155,305,180],{"class":168},[155,307,234],{"class":183},[155,309,286],{"class":168},[155,311,15],{"class":172},[155,313,246],{"class":168},[155,315,15],{"class":172},[155,317,295],{"class":168},[155,319,173],{"class":172},[155,321,187],{"class":168},[15,323,324],{},"You can safely remove all whitespace between block elements without affecting layout.",[10,326,328],{"id":327},"the-inline-element-whitespace-problem","The Inline Element Whitespace Problem",[15,330,331,332,335],{},"Inline and inline-block elements are different. Whitespace between them ",[123,333,334],{},"does render"," — as a single space on screen. This causes the infamous inline-block gap.",[146,337,339],{"className":148,"code":338,"language":150,"meta":151,"style":151},"\u003C!-- Renders with gaps between each item -->\n\u003Cnav>\n  \u003Ca href=\"\u002Fhome\">Home\u003C\u002Fa>\n  \u003Ca href=\"\u002Fabout\">About\u003C\u002Fa>\n  \u003Ca href=\"\u002Fcontact\">Contact\u003C\u002Fa>\n\u003C\u002Fnav>\n",[59,340,341,346,355,377,397,417],{"__ignoreMap":151},[155,342,343],{"class":157,"line":158},[155,344,345],{"class":161},"\u003C!-- Renders with gaps between each item -->\n",[155,347,348,350,353],{"class":157,"line":165},[155,349,169],{"class":168},[155,351,352],{"class":172},"nav",[155,354,187],{"class":168},[155,356,357,359,362,365,367,370,373,375],{"class":157,"line":190},[155,358,193],{"class":168},[155,360,361],{"class":172},"a",[155,363,364],{"class":176}," href",[155,366,180],{"class":168},[155,368,369],{"class":183},"\"\u002Fhome\"",[155,371,372],{"class":168},">Home\u003C\u002F",[155,374,361],{"class":172},[155,376,187],{"class":168},[155,378,379,381,383,385,387,390,393,395],{"class":157,"line":206},[155,380,193],{"class":168},[155,382,361],{"class":172},[155,384,364],{"class":176},[155,386,180],{"class":168},[155,388,389],{"class":183},"\"\u002Fabout\"",[155,391,392],{"class":168},">About\u003C\u002F",[155,394,361],{"class":172},[155,396,187],{"class":168},[155,398,399,401,403,405,407,410,413,415],{"class":157,"line":216},[155,400,193],{"class":168},[155,402,361],{"class":172},[155,404,364],{"class":176},[155,406,180],{"class":168},[155,408,409],{"class":183},"\"\u002Fcontact\"",[155,411,412],{"class":168},">Contact\u003C\u002F",[155,414,361],{"class":172},[155,416,187],{"class":168},[155,418,419,421,423],{"class":157,"line":223},[155,420,209],{"class":168},[155,422,352],{"class":172},[155,424,187],{"class":168},[15,426,427,428,431],{},"The browser inserts a space between each ",[59,429,430],{},"\u003Ca>"," because of the whitespace in the source. You see visible gaps even though you did not set any margin.",[433,434,436],"h3",{"id":435},"solutions-for-the-inline-gap","Solutions for the Inline Gap",[29,438,439,452],{},[32,440,441],{},[35,442,443,446,449],{},[38,444,445],{},"Method",[38,447,448],{},"How It Works",[38,450,451],{},"Tradeoff",[51,453,454,465,478,492,506],{},[35,455,456,459,462],{},[56,457,458],{},"Remove whitespace",[56,460,461],{},"Put tags on the same line",[56,463,464],{},"Harder to read source",[35,466,467,470,475],{},[56,468,469],{},"HTML comments",[56,471,472],{},[59,473,474],{},"\u003Ca>Home\u003C\u002Fa>\u003C!-- -->\u003Ca>About\u003C\u002Fa>",[56,476,477],{},"Verbose but preserves formatting",[35,479,480,483,489],{},[56,481,482],{},"Negative margin",[56,484,485,488],{},[59,486,487],{},"margin-left: -4px"," on items",[56,490,491],{},"Fragile — varies by font size",[35,493,494,497,503],{},[56,495,496],{},"Font-size zero",[56,498,499,502],{},[59,500,501],{},"font-size: 0"," on parent, restore on children",[56,504,505],{},"Extra CSS, accessibility concerns",[35,507,508,511,517],{},[56,509,510],{},"Flexbox",[56,512,513,516],{},[59,514,515],{},"display: flex"," on parent",[56,518,519],{},"Best solution — gaps disappear entirely",[15,521,522],{},"Flexbox is the modern fix. It ignores inter-element whitespace entirely, so you can format your HTML however you like without visual side effects.",[10,524,526],{"id":525},"conditional-comments-and-must-preserve-comments","Conditional Comments and Must-Preserve Comments",[15,528,529],{},"Not all comments are safe to remove. Some carry functional meaning:",[433,531,533],{"id":532},"legacy-ie-conditional-comments","Legacy IE conditional comments",[146,535,537],{"className":148,"code":536,"language":150,"meta":151,"style":151},"\u003C!--[if lt IE 9]>\n  \u003Cscript src=\"html5shiv.js\">\u003C\u002Fscript>\n\u003C![endif]-->\n",[59,538,539,544,549],{"__ignoreMap":151},[155,540,541],{"class":157,"line":158},[155,542,543],{"class":161},"\u003C!--[if lt IE 9]>\n",[155,545,546],{"class":157,"line":165},[155,547,548],{"class":161},"  \u003Cscript src=\"html5shiv.js\">\u003C\u002Fscript>\n",[155,550,551],{"class":157,"line":190},[155,552,553],{"class":161},"\u003C![endif]-->\n",[15,555,556],{},"If you still support legacy IE (rare in 2026), your minifier must preserve these. Most modern minifiers already do.",[433,558,560],{"id":559},"license-and-copyright-comments","License and copyright comments",[15,562,563,564,567,568,571],{},"Some JavaScript and CSS comments contain license text required by open-source licenses. The ",[59,565,566],{},"\u002F*!"," prefix signals to most minifiers: ",[123,569,570],{},"keep this comment",".",[146,573,575],{"className":148,"code":574,"language":150,"meta":151,"style":151},"\u003C!-- \u002F*! MIT License: github.com\u002Fexample\u002Frepo *\u002F -->\n",[59,576,577],{"__ignoreMap":151},[155,578,579],{"class":157,"line":158},[155,580,574],{"class":161},[433,582,584],{"id":583},"seo-and-accessibility-comments","SEO and accessibility comments",[15,586,587],{},"Developers sometimes leave comments for screen readers or SEO tools. These are safe to strip because browsers ignore HTML comments entirely — they never reach assistive technology.",[10,589,591,592,595,596,599],{"id":590},"handling-pre-and-code-tags","Handling ",[59,593,594],{},"\u003Cpre>"," and ",[59,597,598],{},"\u003Ccode>"," Tags",[15,601,602,603,595,605,607,608,611],{},"Whitespace inside ",[59,604,594],{},[59,606,598],{}," is ",[123,609,610],{},"significant",". The browser renders every space, tab, and line break exactly as written.",[146,613,615],{"className":148,"code":614,"language":150,"meta":151,"style":151},"\u003Cpre>\nfunction hello() {\n  console.log(\"Hello, world!\")\n}\n\u003C\u002Fpre>\n",[59,616,617,625,630,635,640],{"__ignoreMap":151},[155,618,619,621,623],{"class":157,"line":158},[155,620,169],{"class":168},[155,622,146],{"class":172},[155,624,187],{"class":168},[155,626,627],{"class":157,"line":165},[155,628,629],{"class":168},"function hello() {\n",[155,631,632],{"class":157,"line":190},[155,633,634],{"class":168},"  console.log(\"Hello, world!\")\n",[155,636,637],{"class":157,"line":206},[155,638,639],{"class":168},"}\n",[155,641,642,644,646],{"class":157,"line":216},[155,643,209],{"class":168},[155,645,146],{"class":172},[155,647,187],{"class":168},[15,649,650],{},"A naïve minifier that collapses whitespace would destroy this formatting. Your minifier must either:",[652,653,654,666],"ol",{},[655,656,657,660,661,595,663,665],"li",{},[123,658,659],{},"Skip"," whitespace inside ",[59,662,594],{},[59,664,598],{}," blocks entirely",[655,667,668,671],{},[123,669,670],{},"Preserve"," the content verbatim while minifying everything else",[15,673,674,675,677],{},"Most established HTML minifiers handle this correctly out of the box. But if you write a custom minification pipeline, test it against ",[59,676,594],{}," blocks first.",[433,679,681],{"id":680},"the-leading-newline-gotcha","The leading newline gotcha",[15,683,684,685,687],{},"Browsers strip the first newline inside ",[59,686,594],{}," tags. If you write:",[146,689,691],{"className":148,"code":690,"language":150,"meta":151,"style":151},"\u003Cpre>\nLine one\nLine two\n\u003C\u002Fpre>\n",[59,692,693,701,706,711],{"__ignoreMap":151},[155,694,695,697,699],{"class":157,"line":158},[155,696,169],{"class":168},[155,698,146],{"class":172},[155,700,187],{"class":168},[155,702,703],{"class":157,"line":165},[155,704,705],{"class":168},"Line one\n",[155,707,708],{"class":157,"line":190},[155,709,710],{"class":168},"Line two\n",[155,712,713,715,717],{"class":157,"line":206},[155,714,209],{"class":168},[155,716,146],{"class":172},[155,718,187],{"class":168},[15,720,721],{},"The rendered output starts at \"Line one\" — the initial newline disappears. Some developers add a leading newline for source readability, then wonder where minification \"broke\" things. It was always being stripped; minification just made it visible.",[10,723,725],{"id":724},"template-engine-output-compression","Template Engine Output Compression",[15,727,728],{},"Template engines — Twig, Handlebars, Jinja, EJS — generate HTML from templates. The template's whitespace carries through to the output unless you explicitly strip it.",[433,730,732],{"id":731},"twig-laravel-blade","Twig \u002F Laravel Blade",[146,734,738],{"className":735,"code":736,"language":737,"meta":151,"style":151},"language-twig shiki shiki-themes github-light github-dark","{# Use the spaceless tag #}\n{% spaceless %}\n  \u003Cdiv>\n    \u003Cp>Content\u003C\u002Fp>\n  \u003C\u002Fdiv>\n{% endspaceless %}\n\n{# Output: \u003Cdiv>\u003Cp>Content\u003C\u002Fp>\u003C\u002Fdiv> #}\n","twig",[59,739,740,745,750,755,760,765,770,774],{"__ignoreMap":151},[155,741,742],{"class":157,"line":158},[155,743,744],{},"{# Use the spaceless tag #}\n",[155,746,747],{"class":157,"line":165},[155,748,749],{},"{% spaceless %}\n",[155,751,752],{"class":157,"line":190},[155,753,754],{},"  \u003Cdiv>\n",[155,756,757],{"class":157,"line":206},[155,758,759],{},"    \u003Cp>Content\u003C\u002Fp>\n",[155,761,762],{"class":157,"line":216},[155,763,764],{},"  \u003C\u002Fdiv>\n",[155,766,767],{"class":157,"line":223},[155,768,769],{},"{% endspaceless %}\n",[155,771,772],{"class":157,"line":239},[155,773,220],{"emptyLinePlaceholder":219},[155,775,776],{"class":157,"line":253},[155,777,778],{},"{# Output: \u003Cdiv>\u003Cp>Content\u003C\u002Fp>\u003C\u002Fdiv> #}\n",[433,780,782],{"id":781},"handlebars","Handlebars",[15,784,785,786,789],{},"Handlebars preserves whitespace by default. Use the ",[59,787,788],{},"~"," tilde operator to strip whitespace around expressions:",[146,791,794],{"className":792,"code":793,"language":781,"meta":151,"style":151},"language-handlebars shiki shiki-themes github-light github-dark","{{#each items~}}\n  \u003Cli>{{this}}\u003C\u002Fli>\n{{~\u002Feach}}\n",[59,795,796,801,806],{"__ignoreMap":151},[155,797,798],{"class":157,"line":158},[155,799,800],{},"{{#each items~}}\n",[155,802,803],{"class":157,"line":165},[155,804,805],{},"  \u003Cli>{{this}}\u003C\u002Fli>\n",[155,807,808],{"class":157,"line":190},[155,809,810],{},"{{~\u002Feach}}\n",[433,812,814],{"id":813},"jinja2","Jinja2",[146,816,820],{"className":817,"code":818,"language":819,"meta":151,"style":151},"language-jinja shiki shiki-themes github-light github-dark","{%- for item in items %}\n  \u003Cli>{{ item }}\u003C\u002Fli>\n{%- endfor %}\n","jinja",[59,821,822,827,832],{"__ignoreMap":151},[155,823,824],{"class":157,"line":158},[155,825,826],{},"{%- for item in items %}\n",[155,828,829],{"class":157,"line":165},[155,830,831],{},"  \u003Cli>{{ item }}\u003C\u002Fli>\n",[155,833,834],{"class":157,"line":190},[155,835,836],{},"{%- endfor %}\n",[15,838,839,840,843,844,847],{},"The ",[59,841,842],{},"-"," in ",[59,845,846],{},"{%-"," strips whitespace before the tag. These template-level tricks reduce output size before any post-processing minifier runs.",[10,849,851],{"id":850},"comment-optimization-strategies","Comment Optimization Strategies",[29,853,854,867],{},[32,855,856],{},[35,857,858,861,864],{},[38,859,860],{},"Strategy",[38,862,863],{},"When to Use",[38,865,866],{},"Impact",[51,868,869,880,891,902],{},[35,870,871,874,877],{},[56,872,873],{},"Strip all comments",[56,875,876],{},"Production builds",[56,878,879],{},"5–15% size reduction",[35,881,882,885,888],{},[56,883,884],{},"Preserve license comments",[56,886,887],{},"Open-source dependencies",[56,889,890],{},"Legal compliance",[35,892,893,896,899],{},[56,894,895],{},"Preserve conditional comments",[56,897,898],{},"Legacy IE support",[56,900,901],{},"Functional necessity",[35,903,904,907,910],{},[56,905,906],{},"Strip TODO\u002FFIXME comments",[56,908,909],{},"Always — they belong in source only",[56,911,912],{},"Removes debugging noise",[15,914,915],{},"The best practice: keep every comment in development, strip everything except license blocks in production.",[10,917,919],{"id":918},"practical-checklist","Practical Checklist",[15,921,922],{},"Before you deploy, verify these items:",[652,924,925,928,931,938,941,944],{},[655,926,927],{},"Whitespace between block elements is removed or compressed",[655,929,930],{},"Inline element whitespace gaps are handled (prefer Flexbox)",[655,932,933,595,935,937],{},[59,934,594],{},[59,936,598],{}," content is untouched",[655,939,940],{},"Conditional and license comments are preserved",[655,942,943],{},"Template engine whitespace controls are enabled",[655,945,946],{},"Your minifier's output passes visual regression tests",[10,948,950],{"id":949},"key-takeaways","Key Takeaways",[952,953,954,957,960,967,970,973],"ul",{},[655,955,956],{},"Block-element whitespace is safe to remove entirely — browsers ignore it visually",[655,958,959],{},"Inline-element whitespace renders as gaps; use Flexbox to eliminate them",[655,961,962,595,964,966],{},[59,963,594],{},[59,965,598],{}," whitespace is significant and must not be compressed",[655,968,969],{},"Conditional comments and license blocks need explicit preservation in minifiers",[655,971,972],{},"Template engines offer built-in whitespace stripping — use it before post-processing",[655,974,975],{},"Comment stripping typically saves 5–15% on production HTML payloads",[10,977,979],{"id":978},"related-guides","Related Guides",[952,981,982,988,994],{},[655,983,984],{},[361,985,987],{"href":986},"\u002Fguides\u002Fhtml-minification-guide","HTML Minification: Reducing Page Size for Faster Loading",[655,989,990],{},[361,991,993],{"href":992},"\u002Fguides\u002Fweb-performance-basics","Web Performance Basics: From First Byte to Interactive",[655,995,996],{},[361,997,999],{"href":998},"\u002Fguides\u002Fcss-minification-guide","CSS Minification Guide",[10,1001,1003],{"id":1002},"try-it-yourself","Try It Yourself",[15,1005,1006,1007,1011],{},"Clean up whitespace and strip unnecessary comments with our free ",[361,1008,1010],{"href":1009},"\u002Ftools\u002Fhtml-minifier","HTML Minifier"," tool. Paste your HTML, choose what to remove, and get optimized output instantly.",[1013,1014,1015],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":151,"searchDepth":165,"depth":165,"links":1017},[1018,1019,1020,1021,1024,1029,1033,1038,1039,1040,1041,1042],{"id":12,"depth":165,"text":13},{"id":23,"depth":165,"text":24},{"id":129,"depth":165,"text":130},{"id":327,"depth":165,"text":328,"children":1022},[1023],{"id":435,"depth":190,"text":436},{"id":525,"depth":165,"text":526,"children":1025},[1026,1027,1028],{"id":532,"depth":190,"text":533},{"id":559,"depth":190,"text":560},{"id":583,"depth":190,"text":584},{"id":590,"depth":165,"text":1030,"children":1031},"Handling \u003Cpre> and \u003Ccode> Tags",[1032],{"id":680,"depth":190,"text":681},{"id":724,"depth":165,"text":725,"children":1034},[1035,1036,1037],{"id":731,"depth":190,"text":732},{"id":781,"depth":190,"text":782},{"id":813,"depth":190,"text":814},{"id":850,"depth":165,"text":851},{"id":918,"depth":165,"text":919},{"id":949,"depth":165,"text":950},{"id":978,"depth":165,"text":979},{"id":1002,"depth":165,"text":1003},"2026-05-28","Optimize HTML whitespace and comments — types of whitespace, inline element gaps, conditional comments, pre tags, and template engine output.","md",{"immutable":219},"\u002Fguides\u002Fhtml-whitespace-optimization",{"title":5,"description":1044},"guides\u002Fhtml-whitespace-optimization","cgMyWaM51xvThUJu-Nblk143p6H-1vW2bY0ywUNhhqc",1780401327256]