Reputation: 488
I have test the following code on firefox and work well, but when test it on chrome the outline did not include all of the elements on firefox on chrome
function ShowHideList(elem) {
var container = document.getElementById("container")
var islist = container.getAttribute("islist")
if (islist == "0") {
elem.value="Hide"
container.setAttribute("islist","1")
} else {
elem.value="Show"
container.setAttribute("islist","0")
}
}
.container{
outline:1px solid red;
position:relative;
}
.container ul{
position:absolute;
top:10px;
left:10px;
}
.container[islist='0'] ul{
display:none;
}
.container[islist='1'] ul{
display:block;
}
<div id="container" class="container" islist="0">
<input type="button" onclick="ShowHideList(this)" value="Show" />
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>
</div>
Upvotes: 0
Views: 175
Reputation: 35670
It's because the ul
is absolutely positioned. (It's actually surprising that it does work in Firefox.)
Besides that, you could simplify your code by toggling a classList
:
function ShowHideList(elem) {
var container = document.getElementById("container")
container.classList.toggle('shown');
elem.value = elem.value === 'Hide' ? 'Show' : 'Hide';
}
function ShowHideList(elem) {
var container = document.getElementById("container")
container.classList.toggle('shown');
elem.value = elem.value === 'Hide' ? 'Show' : 'Hide';
}
.container {
outline: 1px solid red;
position: relative;
}
.container ul {
top: 10px;
left: 10px;
}
.container ul {
display: none;
}
.container.shown ul {
display: block;
}
<div id="container" class="container" islist="0">
<input type="button" onclick="ShowHideList(this)" value="Show" />
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>
</div>
Since the ul
needs to be absolutely-positioned, you could add a div
as a child of the container, which is absolutely positioned. Move the outline to it, and hard-code a height on the container to show the button only.
function ShowHideList(elem) {
var container = document.getElementById('container'),
ul = container.querySelector('ul'),
height;
container.classList.toggle('shown');
elem.value = elem.value === 'Hide' ? 'Show' : 'Hide';
}
.container {
position: relative;
height: 24px;
}
.container div {
position: absolute;
outline: 1px solid red;
width: 100%;
background: white;
}
.container ul {
display: none;
}
.container.shown ul {
display: block;
}
<div id="container" class="container">
<div>
<input type="button" onclick="ShowHideList(this)" value="Show" />
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>
</div>
</div>
<span>Hiiiiiiiii!</span>
Upvotes: 1