| <style> |
| p { |
| position: fixed; |
| right: 20px; |
| bottom: 20px; |
| margin: 0; |
| } |
| [id^="test"] { |
| position: relative; |
| pointer-events: none; |
| |
| --content: 0; |
| --padding: 0; |
| --border: 0; |
| --margin: 0; |
| |
| --content-color: rgba(246, 178, 107, 0.66); |
| --padding-color: rgba(255, 229, 153, 0.66); |
| --border-color: rgba(147, 196, 125, 0.66); |
| --margin-color: rgba(111, 168, 220, 0.66); |
| } |
| .expected { |
| position: absolute; |
| top: 0; |
| left: 0; |
| z-index: -1; |
| pointer-events: none; |
| } |
| .expected > .margin { |
| position: absolute; |
| top: 0; |
| left: 0; |
| width: calc((var(--border) * 2) + (var(--padding) * 2) + var(--content)); |
| height: calc((var(--border) * 2) + (var(--padding) * 2) + var(--content)); |
| border: var(--margin) solid var(--content-color); |
| } |
| .expected > .border { |
| position: absolute; |
| top: var(--margin); |
| left: var(--margin); |
| width: calc((var(--padding) * 2) + var(--content)); |
| height: calc((var(--padding) * 2) + var(--content)); |
| border: var(--border) solid var(--padding-color); |
| } |
| .expected > .padding { |
| position: absolute; |
| top: calc(var(--margin) + var(--border)); |
| left: calc(var(--margin) + var(--border)); |
| width: var(--content); |
| height: var(--content); |
| border: var(--padding) solid var(--border-color); |
| } |
| .expected > .content { |
| position: absolute; |
| top: calc(var(--margin) + var(--border) + var(--padding)); |
| left: calc(var(--margin) + var(--border) + var(--padding)); |
| width: var(--content); |
| height: var(--content); |
| background-color: var(--margin-color); |
| } |
| .actual { |
| display: inline-block; |
| pointer-events: all; |
| width: var(--content); |
| height: var(--content); |
| margin: var(--margin); |
| padding: var(--padding); |
| border: var(--border) solid transparent; |
| } |
| .clear { |
| clear: both; |
| } |
| |
| #test1 { |
| --content: 10px; |
| --padding: 20px; |
| --border: 30px; |
| --margin: 40px; |
| } |
| |
| #test2 { |
| --content: 100px; |
| } |
| #test2 > .expected > .content::after { |
| display: block; |
| width: 100%; |
| height: 100%; |
| content: ""; |
| background-color: rgba(96, 82, 127, 0.8); |
| border-radius: 50%; |
| } |
| #test2 > .actual { |
| float: left; |
| shape-outside: ellipse(50%); |
| } |
| </style> |
| <body> |
| <div id="test1"> |
| <div class="expected" hidden> |
| <div class="margin"></div> |
| <div class="border"></div> |
| <div class="padding"></div> |
| <div class="content"></div> |
| </div> |
| <div class="actual"></div> |
| <div class="clear"></div> |
| </div> |
| |
| <hr> |
| |
| <div id="test2"> |
| <div class="expected" hidden> |
| <div class="margin"></div> |
| <div class="border"></div> |
| <div class="padding"></div> |
| <div class="content"></div> |
| </div> |
| <div class="actual"></div> |
| <div class="clear"></div> |
| </div> |
| |
| <p>Inspect this page and hover each test area in the Elements tab. Click <button>Show Expected</button> to compare with the expected result.</p> |
| <script> |
| let showingExpected = false; |
| document.querySelector("button").addEventListener("click", (event) => { |
| showingExpected = !showingExpected; |
| for (let node of document.querySelectorAll(".expected")) |
| node.hidden = !showingExpected; |
| }); |
| </script> |
| </body> |