Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<!--
Any copyright is dedicated to the Public Domain.
-->
<html lang="en-US" class="reftest-wait">
<head>
<meta charset="UTF-8">
<title>CSS Test: CSS display:contents; generated content</title>
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=907396">
<link rel="help" href="http://dev.w3.org/csswg/css-display">
<style type="text/css">
body,html { color:black; background-color:white; }
div { display:inline; }
.test {
display: contents;
content: "content";
color: lime;
}
.contents {
display: contents;
color: green;
}
.s1 {display: none;}
.s2 {display: none;}
.s3 {display: contents;}
.s5 {display: contents;}
.s7 {display: none;}
.s8 {display: none;}
.s9 {display: contents;}
.s11 {display: contents;}
.before::before {
display: contents;
content:"before";
}
.after::after {
display: contents;
content:"after";
}
</style>
<script>
function setup() {
document.body.offsetHeight;
document.querySelector('.t1').className = 'contents';
document.body.offsetHeight;
document.querySelector('.t2').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.t3').className = 'contents';
document.body.offsetHeight;
document.querySelector('.t4').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.t5').className = 'contents';
document.body.offsetHeight;
document.querySelector('.t6').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.t7').className = 'contents';
document.body.offsetHeight;
document.querySelector('.t8').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.t9').className = 'contents';
document.body.offsetHeight;
document.querySelector('.t10').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.t11').className = 'contents';
document.body.offsetHeight;
document.querySelector('.t12').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.t13').className = 'contents';
document.body.offsetHeight;
document.querySelector('.s1').className = 'contents';
document.body.offsetHeight;
document.querySelector('.s2').style.display = 'inline';
document.body.offsetHeight;
document.querySelector('.s3').style.display = 'normal';
document.body.offsetHeight;
document.querySelector('.s4').className = 'contents';
document.body.offsetHeight;
document.querySelector('.s5').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.s6').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.s7').className = 'contents';
document.body.offsetHeight;
document.querySelector('.s8').style.display = 'inline';
document.body.offsetHeight;
document.querySelector('.s9').style.display = 'normal';
document.body.offsetHeight;
document.querySelector('.s10').className = 'contents';
document.body.offsetHeight;
document.querySelector('.s11').style.display = 'none';
document.body.offsetHeight;
document.querySelector('.s12').style.display = 'none';
document.body.offsetHeight;
}
function runTest() {
var doc = document;
var win = window;
setup();
var e = doc.querySelectorAll('*');
for (i=0; i < e.length; ++i) {
var elm = e[i];
if (win.getComputedStyle(elm).display == 'contents') {
var c = elm.childNodes[0];
if (c) {
var next = c.nextSibling;
elm.removeChild(c);
elm.insertBefore(c,next);
}
var c = elm.childNodes[1];
if (c) {
var next = c.nextSibling;
elm.removeChild(c);
elm.insertBefore(c,next);
}
var c = elm.childNodes.length ? elm.childNodes[elm.childNodes.length-1] : null;
if (c) {
elm.removeChild(c);
elm.appendChild(c);
}
}
}
document.documentElement.className = '';
}
</script>
</head>
<body onload="runTest()">
<div class="test"><span>A a</span></div>
<div class="test"><span class="t1">t1</span></div>
<div class="test"><span class="t2">t2</span></div>
<div class="contents before">1<span>B b</span>2</div>
<div class="contents after">1<span>C c</span>2</div>
<div class="contents before after">1<span>D d</span>2</div>
<div class="contents before">1<span class="t5">B b</span>2</div>
<div class="contents after">1<span class="t6">C c</span>2</div>
<div class="contents before after">1<span class="t7">D d</span>2</div>
<div class="contents">
<div class="test"><span>span</span></div>
<div class="test"><span class="t3">t3</span></div>
<div class="test"><span class="t4">t4</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
<div class="contents before">1<span class="t8">span</span>2</div>
<div class="contents after">1<span class="t9">span</span>2</div>
<div class="contents before after">1<span class="t10">span</span>2</div>
<div class="contents before">1<span class="t11">span</span>2</div>
<div class="contents after">1<span class="t12">span</span>2</div>
<div class="contents before after">1<span class="t13">span</span>2</div>
</div>
<div class="contents"><span class="s1">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents"><span class="s2">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents"><span class="s3">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents"><span class="s4">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents"><span class="s5">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents"><span class="s6">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents before"><span class="s7">
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents after"><span class="s8">
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents"><span class="s9">
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents before after"><span class="s10">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents before"><span class="s11">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
<div class="contents after"><span class="s12">
<div class="test"><span>span</span></div>
<div class="contents before">1<span>span</span>2</div>
<div class="contents after">1<span>span</span>2</div>
<div class="contents before after">1<span>span</span>2</div>
</span></div>
</body>
</html>