灵活的div布局

时间:2013-01-03 09:30:35

标签: javascript html css

我正在尝试编写一个布局,其中有一个工具栏和一个主div。当窗口Y轴小于窗口X轴时,工具栏位于左侧。当窗口X轴小于窗口Y轴时,工具栏位于顶部。 我将工具栏绝对定位在顶部:0和左:0并尝试在调整大小时更改宽度和高度属性。但我的代码不起作用。

使用Javascript:

window.onresize = function(event) {
winW = window.innerWidth;
winH = window.innerHeight;   
console.debug("x axis:" + winW  + "y axis:" + winH);

if(winW < winH){
   var elem = document.getElementById('div1');

    console.debug("test" + elem.style.width);

   var a = elem.style.height;
   elem.style.height = elem.style.width;
   elem.style.width = a;

}
else{
   var elem = document.getElementById('div1');

    elem.style.height = elem.style.height;
    elem.style.width = elem.style.width;
}
}

CSS:

#div1{
  background: red;
  position:absolute;
  height:100%;
  width:20px;
  top:0;
  left:0;
}
#div2{
  width:100%;
  height:500px;
  background-color:green;
  margin-left: 20px;
}

jsFiddle Example Here

2 个答案:

答案 0 :(得分:6)

您可以使用@media screen and (min-aspect-ratio: 1/1) { ... }执行此操作。此查询中的任何样式仅在窗口宽或宽时才激活。

DEMO

我添加了此代码,并删除了所有JavaScript:

@media screen and (min-aspect-ratio: 1/1) { 
    #div1 {
        width: 100%;
        height: 20px;
    }

    #div2 {
        width: 100%;
        margin: 0;
     }                
}

可以找到信息here on the MDN

可以找到对媒体查询的支持here,但由于您可以使用JavaScript,我建议您使用Respond.js使其适用于所有用户。

答案 1 :(得分:2)

支持媒体比率;)

更多浏览器兼容:

window.onresize = function(event) {
    winW = window.innerWidth;
    winH = window.innerHeight;

    console.debug("x axis:" + winW  + "y axis:" + winH);

    document.getElementById("div1").className = ( winW < winH ? "verticalMenu" : "horizontalMenu" );
}

// optionally invoke window.resize() once manually for setting it default. Or set a defaultClass on the div itself in HTML

.horizontalMenu {
    height:20px;
    width:100%;
}
.verticalMenu {
    height:100%;
    width:20px;
}

请参阅this CodePen