2017-04-22 12 views
2

我想在不使用JS的情况下实现可调整大小的窗格,仅使用CSS Grid layout。这可能吗?可以使用CSS网格布局来实现编辑器窗格的大小调整(例如,在CodePen中)

例如, CodePen的编辑器为其HTML/CSS/JS编辑器提供了可调整大小的窗格。另外,看下面的例子,它以普通的JS实现它(我似乎无法在其中添加一个URL到CodePen示例中,所以添加属性有点困难,代码是http://codepen.io/gsound/)。

let isResizing = false; 
 

 
let $handler = document.getElementById('handler'); 
 
let $wrapper = document.getElementById('wrapper'); 
 
let $left = document.getElementById('left'); 
 

 
$handler.addEventListener('mousedown', function(e){ 
 
    isResizing = true; 
 
}); 
 

 
document.addEventListener('mousemove', function(e){ 
 
    if(!isResizing) return; 
 
    let newWidth = e.clientX - $wrapper.offsetLeft; 
 
    $left.style.width = newWidth + 'px'; 
 
}); 
 

 
document.addEventListener('mouseup', function(){ 
 
    isResizing = false; 
 
});
html,body{ 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0; 
 
} 
 

 
#app{ 
 
    height: 100%; 
 
/* max-width: 1400px; */ 
 
    margin: 0 auto; 
 
} 
 

 
header{ 
 
    background-color: #AAA; 
 
    height: 50px; 
 
} 
 

 
#wrapper{ 
 
    margin: 0 auto; 
 
    height: calc(100% - 50px); 
 
    width: 100%; 
 
    background-color: #EEE; 
 
    display: flex; 
 
} 
 

 
#handler{ 
 
    background-color: red; 
 
    width: 5px; 
 
    cursor: col-resize; 
 
} 
 

 
#left{ 
 
    width: 200px; 
 
} 
 

 
#content{ 
 
    width: 100%; 
 
    flex: 1; 
 
} 
 

 

 
/* ----------- */ 
 

 
#left{ 
 
    background-color: yellow; 
 
} 
 

 
#content{ 
 
    background-color: #232378; 
 
}
<div id="app"> 
 
    <header>head</header> 
 
    <div id="wrapper"> 
 
    <aside id="left"></aside> 
 
    <div id="handler"></div> 
 
    <article id="content"></article> 
 
    </div> 
 
</div>

P.S作为边注,我已经重新实现的例如上述通过添加和删除'mousemove''mouseup'事件,并想知道这是否是“更好”比使用一个布尔isResizing并保持事件监听器一直存在(更好的性能)...

回答

1

网格布局模块是纯CSS。

可调整大小的窗格通常需要JavaScript来运行。

了解CSS主要用于样式和演示文稿,因此Grid Layout spec中很可能没有内置属性或方法,它们可以提供可手动调整大小的窗格。

相关问题