<!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 OPTION</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; xfont:5px/1 Ahem; padding:0; margin:0;
}
body { margin-left: 3ch; }
option {
  padding:0; margin:0; border:none;
  font:5px/1 Ahem;
}
::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:flex", "display:table", "display:list-item", "display:contents",
    "columns:2",
  ];
  const overflow = [
    "", "overflow:clip",
  ];
  const position = [
    "", "position:absolute",
  ];
  const tags = [
    "option",
  ];
  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 select = document.createElement("select");
            select.setAttribute("size", "2");
            let elem = document.createElement(t);
            elem.style = d + ';' + o + ';' + p + ';'
            elem.className = c;
            select.append(elem);
            let option = document.createElement("option");
            option.append(document.createTextNode("pass"));
            select.append(option);
            body.append(select);
          }
        }
      }
    }
  }

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

</body>
</html>
