<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>CSS Custom Properties IE11 Demo</title>
  <script>window.MSInputMethodContext && document.documentMode && document.write('<script src="./ie11CustomProperties.js"><\x2fscript>');</script>
<body>
<a href="https://github.com/nuxodin/ie11CustomProperties" style="flex-basis:100%; max-width:none; padding:.5em">back to project</a>
<style>
html {
  --theme-color:orange;
}
body {
  display:flex;
  flex-wrap:wrap;
}
body > * {
  max-width:500px;
  margin:2rem;
  padding:2rem;
  overflow:auto;
  border:2px solid var(--theme-color);
}
h2 {
  border-bottom:2px solid var(--theme-color);
}
a {
  color:var(--theme-color);
}
button {
  background-color:var(--theme-color);
}
pre {
  color:#fff;
  background-color:var(--theme-color);
  font-size:13px;
  padding:1em;
  overflow:auto;
}
</style>



<div id=pseudoClasses tabindex=0>
  <h2>Pseudo-classes (:hover, :focus, :target)</h2>
  <ul>
      <li class=hasHover>Has Hover</li>
      <li class=hasTarget>Has Target</li>
      <li class=hasFocus>Has Focus</li>
  </ul>
  <a href="#pseudoClasses">target to #pseudoClasses</a><br>
  <a href="#">click to set target #</a><br>
  <style>
#pseudoClasses:hover .hasHover,
#pseudoClasses:target .hasTarget,
#pseudoClasses:focus .hasFocus {
  background:var(--theme-color);
}
  </style>
</div>



<div id=chaining>
  <h2>Chaining</h2>
  <style>
#chaining {
  --a:var(--theme-color);
  --b:var(--a);
  background-color:var(--b);
}
#chaining:hover {
  --a:transparent;
}
  </style>
</div>

<div id=fallback>
  <h2>Fallback</h2>
  <style>
#fallback {
  --theme-color:var(--not_defined, green);
}
  </style>
</div>

<div id=before>
  <h2>Pseudo-Elements</h2>
<style>
#before > h2 {
--before:' 👉 ';
}
#before > h2::before  {
content:var(--before);
}
</style>
</div>

<div id=style_attribute>
  <h2>ie-style attributes</h2>
  <div style="background-color:var(--theme-color); --inner:white; padding:10px" ie-style="background-color:var(--theme-color); --inner:white">
    <pre>
ie-style="
background-color:var(--theme-color);
--inner:white"
    </pre>
    <pre style="background:var(--inner); color:var(--theme-color)" ie-style="background:var(--inner); color:var(--theme-color)">
ie-style="background:var(--inner);
color:var(--theme-color)"
    </pre>
  </div>
</div>

<div id=dom_change>
  <h2>Dom changes</h2>
  <button onclick="document.body.classList.toggle('dark-mode')">onclick="document.body.classList.toggle('dark-mode')"</button>
  <style>
body.dark-mode {
  --bg-color:#666;
}
body {
  background-color:var(--bg-color);
}
  </style>
</div>


<div id=svg>
  <h2>SVG</h2>
  <svg width="60" height="60" viewbox="0 0 24 24" fill-rule="evenodd" clip-rule="evenodd">
    <path d="M6 24H4a1 1 0 0 1-1-1v-1a2 2 0 0 1-2-2v-8a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1V3a3 3 0 0 1 3-3h16a3 3 0 0 1 3 3v4a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1v8a2 2 0 0 1-2 2v1a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-1H7v1a1 1 0 0 1-1 1zm-1.5-7a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm15 0a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3zm-5 1h-5a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1zM21 5.5a.5.5 0 0 0-.5-.5h-17a.5.5 0 0 0-.5.5V14s3.1 1 9 1 9-1 9-1V5.5zM16 2H8v1h8V2z"/>
  </svg>
  <style>
#svg svg {
  fill:var(--theme-color);
}
#svg:hover svg {
  --theme-color:black;
}
  </style>
</div>



<div id=jsIntegration>
  <h2>JS-Integration</h2>
  <button onclick="setThemeColor('red')">onclick="setThemeColor('red')"</button><br>
  <button onclick="setThemeColor('orange')">onclick="setThemeColor('orange')"</button><br>
  <br>
  <button onclick="getThemeColor(this)">onclick="getThemeColor(this)"</button>
  <script>
function setThemeColor(color) {
  document.body.style.setProperty('--theme-color', color);
}
function getThemeColor(element) {
  const computed = getComputedStyle(element);
  const color = computed.getPropertyValue('--theme-color');
  alert(color);
}
  </script>
</div>



<div id=mediaQueries tabindex=0>
    <h2>Media Queries</h2>
    <p>Resize the browser window</p>
    <ul>
        <li class=min400 >min-width: 400px</li>
        <li class=min800 >min-width: 800px</li>
        <li class=min1200>min-width: 1200px</li>
        <li class=min1600>min-width: 1600px</li>
        <li class=min2000>min-width: 2000px</li>
        <li class=min2400>min-width: 2400px</li>
    </ul>
    <style>
@media (min-width: 400px ) { .min400  { background:var(--theme-color); } }
@media (min-width: 800px ) { .min800  { background:var(--theme-color); } }
@media (min-width: 1200px) { .min1200 { background:var(--theme-color); } }
@media (min-width: 1600px) { .min1600 { background:var(--theme-color); } }
@media (min-width: 2000px) { .min2000 { background:var(--theme-color); } }
@media (min-width: 2400px) { .min2400 { background:var(--theme-color); } }
    </style>
</div>



<div id=important class=important>
  <h2>!important</h2>
  <style hidden>
body {
  --important:var(--theme-color) !important;
  --important:white;
}
.important:hover {
  background-color:var(--important) !important;
}
#important {
  background-color:white;
}
  </style>
  <pre>
/* important on setters: */
body {
  --important:var(--theme-color) !important;
  --important:white;
}

/* important on gettses: */
.important:hover {
  background-color:var(--important) !important;
}
#important {
  background-color:white;
}
  </pre>

</div>

<div id=register>
  <h2>CSS.registerProperty()</h2>
  <div class=initialValue style="padding:1em; margin:1em 0">class=initialValue</div>
  <div class=parent style="padding:1em; margin:1em 0">
      class=parent<br>
      <div class=child style="padding:1em;">
        class=child<br>
        should not inherit dotted border
      </div>
  </div>

<script>
CSS.registerProperty({
  name:'--red-border',
  inherits:false,
  initialValue:'5px solid red',
})
  </script>
  <style>
.initialValue {
  border:var(--red-border);
}
.parent {
  --red-border:5px dashed red;
  border:var(--red-border);
}
.child {
  border:var(--red-border);
}
  </style>
</div>


<div id=dynamicStyle>
  <h2>dynamic added style-element</h2>
  <button onclick="addStyleElememt()">
      onclick="addStyleElememt()"
  </button>
  <script>
function addStyleElememt(){
  var el = document.createElement('style');
  var color = (0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6);
  el.innerHTML =
    '#dynamicStyle { '+
      '--theme-color: #'+color+';'+
    '}';
  dynamicStyle.appendChild(el);
}
  </script>
</div>

<div id="dynamicContent">
  <h2>Dynamic Content</h2>
  <button onclick="setContent()">onclick="setContent()"</button>
  <script>
function setContent(){
  var content = dynamicContent.innerHTML;
  dynamicContent.innerHTML = '';
  setTimeout(function(){
    dynamicContent.innerHTML = content;
  },500)
}
  </script>
</div>


<script hidden>
  !document.body.msMatchesSelector && alert("Visit this Page in IE11!");
  var styleElements = document.querySelectorAll('style:not([hidden]), script:not([hidden])');
  for (var i=0, styleElement; styleElement = styleElements[i++];) {
    const pre = document.createElement('pre');
    var contents = styleElement.innerHTML;
    contents = contents.replace(/-ie-/g, '--');
    contents = contents.replace(/-ieVar-[^;]+(;)?( )?/g, '');
    pre.innerHTML = htmlEntities(contents.trim());
    styleElement.parentNode.insertBefore(pre, styleElement);
  }
  function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
  }
</script>