<!doctype html>
<!--
     Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/
-->
<html><head>
  <meta charset="utf-8">
  <title>Reference: content:none on FIELDSET</title>
  <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1699964">
  <link rel="stylesheet" type="text/css" href="/fonts/ahem.css">
  <meta name="flags" content="ahem">
  <style>
html,body {
  color:black; background-color:white; font:4px/1 Ahem; padding:0; margin:0;
}
body { margin-left: 3ch; }
body > * {
  padding:0; margin:0; border:none;
}
::marker { content: 'M'; }
.after::after { content: 'A'; }
.before::before { content: 'B'; }

  </style>
</head>
<body>

<script>
  document.body.style.display = 'none';

  const display = [
    "display:block", "display:inline", "display:ruby", "display:none", "display:grid",
    "display:table", "display:list-item", "display:contents",
    "columns:2",
  ];
  const overflow = [
    "", "overflow:scroll",
  ];
  const position = [
    "", "position:absolute",
  ];
  const tags = [
    "fieldset"
  ];
  const classes = [
    "", "after", "before",
  ];
  const body = document.body;
  for (var d of display) {
    for (var o of overflow) {
      for (var p of position) {
        for (var c of classes) {
          for (var t of tags) {
            let elem = document.createElement(t);
            elem.style = d + ';' + o + ';' + p + ';';
            elem.className = c;
            body.append(elem);
          }
        }
      }
    }
  }

  document.body.style.display = '';
</script>

</body>
</html>
