.item { display: inline-block; border-style: solid; border-width: 1px; float: right; max-width: 150px; max-height: 150px; } .box { width: 600px; height: 200px; display: inline-block; line-height: 0px; margin: 0px; position: relative; } .fixed { position: absolute; top: 0; left: 0; } .slider { width: 600px; height:20px; } .blue { border-width: 1px; border-style: dotted; border-color: blue; overflow: hidden; } .vertical { width: 200px; height:20px; transform-origin: bottom right; -webkit-transform-origin: bottom right; transform: rotate(90deg) translateY(200px); -webkit-transform: rotate(90deg) translateY(200px); vertical-align: bottom; } .container { width: 1000px; height: 250px; overflow: hidden; display: inline-block; } .flextainer { display: flex; flex-direction: column; flex-wrap: wrap; align-items: center; align-content: space-around; justify-content: space-around; display: -webkit-flex; -webkit-flex-direction: row; -webkit-flex-wrap: wrap; -webkit-align-items: center; -webkit-align-content: space-around; -webkit-justify-content: space-around; } .A { min-width: 40px; min-height: 40px; line-height: 12px; font-size: 12px; color: yellow; background-color: purple; border-color: cyan; -webkit-flex: 3 1 auto; flex: 3 1 auto; } .B { min-width: 55px; min-height: 55px; line-height: 24px; font-size: 24px; background-color: goldenrod; border-color: darkblue; -webkit-flex: 9 1 auto; flex: 9 1 auto; } select { width: 80px; } body{ overflow:hidden; }
Troy Whorten's Flexbox Demo: (click boxes to remove them)<br/> <div class="container"> <div class="box"> <div id="target" class="fixed blue box flextainer"> <div class="item A" onclick="this.parentNode.removeChild(this)">foo</div> <div class="item B" onclick="this.parentNode.removeChild(this)">bar</div> </div> </div> <input class="vertical slider" type="range" min="0" max="100" step="5" value="100" onchange="document.getElementById('target').style.height = this.value + '%';" /> <br/> <input class="slider" type="range" min="0" max="100" step="5" value="100" onchange="document.getElementById('target').style.width = this.value + '%';" /> </div> <br/> <button onclick="addBox()">Add Box</button> <select onchange="changeFlex('flexDirection',this)"> <optgroup label="flex-direction"> <option value="row">row</option> <option value="row-reverse">row-reverse</option> <option value="column">column</option> <option value="column-reverse">column-reverse</option> </optgroup> </select> <select onchange="changeFlex('flexWrap',this)"> <optgroup label="flex-wrap"> <option value="wrap">wrap</option> <option value="nowrap">nowrap</option> <option value="wrap-reverse">wrap-reverse</option> </optgroup> </select> <select onchange="changeFlex('alignItems',this)"> <optgroup label="align-items"> <option value="flex-start">flex-start</option> <option value="flex-end">flex-end</option> <option value="center">center</option> <option value="stretch">stretch</option> <option value="baseline">baseline</option> </optgroup> </select> <select onchange="changeFlex('alignContent',this)"> <optgroup label="align-content"> <option value="flex-start">flex-start</option> <option value="flex-end">flex-end</option> <option value="center">center</option> <option value="space-between">space-between</option> <option value="space-around">space-around</option> <option value="stretch">stretch</option> </optgroup> </select> <select onchange="changeFlex('justifyContent',this)"> <optgroup label="justify-content"> <option value="flex-start">flex-start</option> <option value="flex-end">flex-end</option> <option value="center">center</option> <option value="space-between">space-between</option> <option value="space-around">space-around</option> </optgroup> </select> <br/>Change Foo Size: <input type="range" min="10" max="150" onchange="sizeBox('A',this.value)" />Change Bar Size: <input type="range" min="10" max="150" onchange="sizeBox('B',this.value)" />
//written by Troy Whorten 3/25/2014 var currentBox = 'A'; function addBox() { var target = document.getElementById("target"); var box = document.createElement("div"); box.setAttribute("class", "item " + currentBox); box.setAttribute("onclick", "this.parentNode.removeChild(this)"); if (currentBox == 'A') { box.innerHTML = "foo"; currentBox = 'B'; } else { box.innerHTML = "bar"; currentBox = 'A'; } target.appendChild(box); } function changeFlex(prop, el) { var target = document.getElementById("target"); execstring = "target.style." + prop + "=el.value;"; eval(execstring); execstring = "target.style." + capitalize(prop) + "=el.value;"; eval(execstring); // eval("target.style.webkit"+ wk +"=el.value)"); //target.setAttribute("-webkit-"+prop,el.value); } function capitalize(string) { return string.charAt(0).toUpperCase() + string.slice(1); } function sizeBox(box, value) { var boxes = document.getElementsByClassName(box); //alert(boxes.length + ' ' + value); for (var i = 0; i < boxes.length; i++) { boxes[i].style.minWidth = value + "px"; boxes[i].style.minHeight = value + "px"; } }