您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Moves compatibility and specs tables to the top and makes them compact in articles at developer.mozilla.org.
/* ==UserStyle== @name MDN: Compat table: first and compact @description Moves compatibility and specs tables to the top and makes them compact in articles at developer.mozilla.org. @namespace myfonj @version 1.6.0 @license CC0 - Public Domain ==/UserStyle== */ @-moz-document domain("developer.mozilla.org") { /* Changelog 1.6.0 (2024-10-16) - "Resources" like "See also" on the top 1.5.0 (2024-04-17) - sticky header attepmt 1.4.3 (2024-03-21) - "see also" also in right order in sidebar nav 1.4.2 (2024-03-21) - reordered sidebar nav to match new order 1.4.1 (2024-03-20) - pulling up even the "no compat/spec data found" warning boxes */ /** no fancy yet distracting underlines */ .main-page-content h1::after { content: none; } /* https://userstyles.org/styles/177139/edit https://gf.qytechs.cn/en/scripts/408039/versions/new MDN: Compat table: first and compact */ /* Pull Browser Compatibility table to the top */ .main-page-content { display: flex; flex-direction: column; } section[aria-labelledby="browser_compatibility" i], [id="Browser_compatibility" i], [id="Browser_compatibility" i] + a, [id="Browser_compatibility" i] + a + .table-scroll , [id="Browser_compatibility" i] + a + .table-container , [id="Browser_compatibility" i] + div[class="notecard warning"] { order: -2; } .document-toc-list { display: flex; flex-direction: column; & .document-toc-item:has([href="#browser_compatibility" i]) { order: -3; } & .document-toc-item:has([href="#specifications" i]) { order: -2; } & .document-toc-item:has([href="#resources" i]) { order: -1; } & .document-toc-item:has([href="#see_also" i]) { order: -1; } } /* for pages wit multiple compat tables scattered e.g.: https://developer.mozilla.org/en-US/docs/Web/CSS/hue-interpolation-method keeping separate from above to keep compat with older UAs */ [id]:has(+ a.bc-github-link + .table-container .bc-table) { & { font-size: 1.1rem; position: relative; z-index: 1; margin: 0 3em 0 0; align-self: flex-start; } & + a.bc-github-link { margin-top: -1.5rem; margin-left: 3em; } &, & + a.bc-github-link, & + a.bc-github-link + .table-container { order: -2; } } .table-container:has(.bc-table) ~ .table-container:has(.bc-table) thead { & *:not(.bc-head-icon-symbol){ height: 0px !important; overflow: hidden; padding: 0; margin: 0; line-height: 0; } & .bc-head-icon-symbol, & .bc-head-icon-symbol::before { --_w: 2ch; height: var(--_w) !important; background-size: var(--_w) var(--_w) !important; background-repeat: no-repeat; } } /* Pull Specifications Table below Compatibility table */ [aria-labelledby="specifications"], /* this is probably obsolete */ :is([id="Specifications" i], [id="Specification" i]), :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table, div[class="notecard warning"]) { order: -1; border-left: none; margin-top: 0 !important; } /* Pull "See also" and "Resources" up (below specifications) // Yay, we can now target sections by aria attributes! // We don't even need upcoming :has() anymore! */ section[aria-labelledby="resources"], section[aria-labelledby="see_also"] { order: -1; } /* main heading: above all, after all, and slightly dimmer; */ .main-page-content > h1 { order: -2; margin: 0 !important; opacity: .6; } main#content { padding-top: 0; } section[aria-labelledby="resources"] h2[id="resources"], section[aria-labelledby="see_also"] h2[id="see_also"] { font-size: 1.2rem; margin: .8em 0 0 } /* * remake Specifications Table into condensed and reversed "list" * • 3 columns without status badge (Specification | Comment | Feedback) * e.g. https://developer.mozilla.org/en-US/docs/Web/CSS/@media#Specifications * -> (counter) Specification Comment Feedback * • 3 columns with status badge (Specification | Status | Comment) * e.g. https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#Specifications * -> Status (badge) Specification (link) Comment * • 2 columns (Specification | Title) * e.g. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires#Specifications * -> Title Specification (link) * // the only page using `#Specification` instead of `#Specifications` was https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML */ :is([id="Specifications" i], [id="Specification" i]) + :is(table.standard-table, div > table.standard-table) tbody { display: flex; flex-direction: column-reverse; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) th, :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td br { display: none !important; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td { background-color: transparent !important; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td, :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td * { display: inline !important; padding: 0; border: none !important; box-shadow: none !important; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td:nth-child(1) small { padding-left: 1ch; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr { border-bottom: 1px solid #ccc; text-indent: 4rem; position: relative; counter-increment: specount -1; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr * { text-indent: 0 !important; /* whoa, text indent is inherited? */ } /* this is just "fallback" */ :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody td:first-child::before { content: counter(specount, lower-roman) '.'; width: 4rem; text-align: center; position: absolute; left: 0; top: 0; opacity: .4; } /* We don't have nice things, sadly: it's impossible to count "backwards" to 1 starting from items count https://github.com/w3c/csswg-drafts/issues/4559#issuecomment-562058086 */ :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(1) { counter-reset: specount 2; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(2) { counter-reset: specount 3; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(3) { counter-reset: specount 4; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(4) { counter-reset: specount 5; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(5) { counter-reset: specount 6; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(6) { counter-reset: specount 7; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(7) { counter-reset: specount 8; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(8) { counter-reset: specount 9; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(9) { counter-reset: specount 10; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(10) { counter-reset: specount 11; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(11) td:first-child::before, :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) tbody tr:first-child:nth-last-child(11) ~ tr td:first-child::before { content: '•'; } /* futile attempt */ /* Status badge is in three columns table [class^="spec-"] Sadly, there are three columns tables WITHOUT status badges in the middle col :sad face: (e.g. https://developer.mozilla.org/en-US/docs/Web/CSS/@media#Browser_compatibility contains ) So resorting to little yanky posabs swap. Because displayed badge is ::before and text is 'real', I cannot make static placeholder for overflowing tooltip pade from text */ :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class^="spec-"] { white-space: nowrap; background-color: #eeeeee !important; font-size: 0; position: absolute; left: 0; top: 0; z-index: 1; padding-right: 1ch; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class^="spec-"]::after { content: ''; font-size: 1rem; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class^="spec-"]:hover { font-size: 1rem; box-shadow: 0 0 1ch #fff; padding-right: 1ch; } :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class^="spec-"]::before { content: attr(class); pointer-events: all; margin: 0; padding: 0; padding-left: 1ch; padding-right: 1ch; font-size: 1rem; } /* ::before contents removed in https://github.com/mdn/mdn-minimalist/commit/c702743a06df0bda9318f4e60b54157cece8df6a restoring something resembling state from https://github.com/mdn/mdn-minimalist/blob/978e0b075d6fb12432a99307ca22c9263d41d406/sass/atoms/_meta.scss */ [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-living"]::before { content: "LS"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-standard"]::before { content: "ST"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-rec"]::before { content: "REC"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-cr"]::before { content: "CR"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-pr"]::before { content: "PR"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-rfc"]::before { content: "RFC"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-wd"]::before { content: "WD"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-draft"]::before { content: "D"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-lc"]::before { content: "LC"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-ed"]::before { content: "ED"; } [id="Specifications" i] + :is(div > table.standard-table, table.standard-table) td:nth-child(2):nth-last-child(2) [class~="spec-obsolete"]::before { content: "O"; } /* */ /* Hide "The definition of '%feature%' in that specification." Redundant. */ :is([id="Specifications" i], [id="Specification" i]) + :is(div > table.standard-table, table.standard-table) td:nth-child(1) > a[href*="#"] > br + small { display: none !important; } /* Hiding unnecessary headings (display: none; breaks anchors) */ [id="Specification" i], [id="Specifications" i], [id="Browser_compatibility" i] { height: 0 !important; overflow: hidden; padding: 0 !important; margin: 0 !important; } .bc-table { margin-top: 0 !important; margin-bottom: 0 !important; } .bc-table td:empty { background-color: inherit !important; } /* compact table headers - icons only */ .bc-table .bc-platforms > th { padding: 0; border-top: 1px solid; height: 1em !important; overflow: visible; } .bc-table .bc-platforms > th::before { position: absolute; top: -1.4em; } .bc-table thead, .bc-table .bc-platforms, .bc-table .bc-platforms > th, .bc-table .bc-platforms > th::before { background-color: inherit; } /* § attempt to have BDC browsers header sticky will probably cause horizontal scroll of entire page sadly necessary */ .table-container:has(.bc-table) { overflow: visible; } .table-container-inner { padding-right: 0; } .bc-table thead .bc-browsers{ background-color: var(--background-primary); position: sticky; top: 0; z-index: 1 } .bc-table .bc-browsers th { padding: 0; height: 2rem; overflow: hidden; } /* browser headers: hide text until hover */ th.bc-browser { position: relative !important; overflow: visible !important; } th.bc-browser:not(:hover) .bc-head-txt-label { opacity: 0; } .bc-head-icon-symbol { opacity: .7; /* too glaring */ } th.bc-browser .bc-head-txt-label { display: block !important; /* reverting other tweaks */ background-color: var(--background-primary) !important; writing-mode: horizontal-tb; transform: translate(50%); position: absolute; top: auto; right: 50%; left: auto; bottom: 100%; padding: .5em 1em; border: 1px solid var(--border-secondary); } th.bc-browser:last-child .bc-head-txt-label { transform: none; right: 0; } /* history dropdown toggle smaller */ .bc-history-link.only-icon { border: none; text-align: right; } .ic-history {border-right: 0.35rem solid transparent } .text-content .bc-has-history.active .bc-history-link { max-width: 2em } .bc-history-link { height: 8px; } td[aria-expanded="false"]:not(:hover) .bc-history-link { opacity: .5 !important; } /* "⚠" badges in theads * OFF 2022-04-04 - messed in cells / .bc-table-row-header { } .bc-table-row-header * { } .bc-table-row-header .bc-icons { position: absolute; right: 0; line-height: 2.1; } .bc-table-row-header:not(:hover) .bc-icons { opacity: 0.7 } /* text underflow fix in label cells e.g. https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP */ .bc-table-row-header code { white-space: normal; } /* Legend is redundant for us */ .bc-legend { display: none; } /* footnote "*" (stars) are quite redundant as well make them small and not let them wrap */ .bc-table td[class^="bc-browser"] .bc-icons { position: absolute; } .bc-table td[class^="bc-browser"] .bc-icons *, .bc-table td[class^="bc-browser"] .bc-icons *::before{ background-size: .4rem !important; background-repeat: no-repeat !important; } /* wild formatting paragraphs appears */ p:empty { display: none; } .text-content dd:last-child { margin-bottom: 0; } /* "Report problems…" */ .bc-github-link { text-align: right; align-self: flex-end; display: block; position: relative; z-index: 0; } .bc-github-link:not(:hover) { color: transparent !important; } /* collision with compacted headings in multiple bc tables */ .bc-github-link:hover { z-index: 2; background-color: var(--background-primary); } /* visually accessible markers of support levels for when background images are not rendered WHCM or user style */ .bc-level-yes::before { content: '✓'; color: transparent; } .bc-level-no::before { content: '✗'; color: transparent; } /* <span class="bc-version-label" title="Released 2018-10-02">18</span> */ /* Release dates in cell tooltips visible */ .bc-version-label[title^="Released "] { position: relative; margin: 0 -.5em; z-index: 0; } .bc-version-label[title^="Released "]::after { content: attr(title); display: block; font-family: monospace; opacity: .5; font-size: 12px; line-height: 1em; margin: -1em 0em 0 0; clip-path: inset(50% 0 0 0); } /* for now pull out only in detail */ /* * OFF, not exitent anymore? / .bc-notes-wrapper .bcd-cell-text-copy { text-align: center; } .bc-notes-wrapper .bc-version-label::after { content: attr(title); display: block; } /* */ /* END of MDN: Compat table: first and compact */ h4:is([id^="html_"],[id^="css_"],[id^="javascript_"]):has(+.code-example) { display: none; outline: #0FF6 solid; outline-offset: -2px; } .code-example , .code-example pre { margin: 0 !important; } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址