您如何允许用户手动调整 <div> 的大小?元素垂直? [英] How do you allow a user to manually resize a <div> element vertically?
问题描述
我在另一个 div 中有 2 个 div 元素,它们每个都显示为一个块.所以 div1 就在 div2 的正上方.
我想添加一个用户可以点击和拖动的条",最终会调整 div2 的大小,div1 将自动调整大小等量.
div1 和 div2 的父元素有样式:display:flex;flex-direction:column;
and div1em> 有 flex-grow:1
所以它会自动调整大小.
我希望调整大小栏是这样的:
我如何添加这样的东西?还有什么办法可以改变它在 CSS 中的外观?
在你的 column flexbox 中,你可以使用 resize
在其中一个 div 上,并使用 flex-grow 自动调整另一个
设置为 1 - 缺点 是 滑块 不是很可定制:
- 将
resize: vertical
添加到弹性项目之一 - 将
flex: 1
添加到另一个弹性项目(这样 这个 弹性项目将在调整大小时自动调整以响应另一个弹性项目的高度变化)
body {边距:0;}.外{显示:弹性;弹性方向:列;高度:100vh;}.堵塞 {高度:50%;}.block-1 {背景颜色:红色;调整大小:垂直;/* 调整垂直大小 */溢出:自动;/* 调整大小适用于除可见之外的溢出 */}.block-2 {背景颜色:绿色;弹性:1;/* 自动调整 */}
<div class="block block-1">第 1 座<div class="block block-2">第 2 座
解决方案
相反,您可以使用 mousedown
侦听器 注册 一个 mousemove
侦听器更新 block-1
高度(和重置 mouseup
事件) - 请参阅下面的演示:
let block = document.querySelector(".block-1"),滑块 = document.querySelector(".slider");//鼠标按下(拖动开始)滑块.onmousedown = 函数dragMouseDown(e) {//获取鼠标位置让dragX = e.clientY;//如果鼠标按下,注册一个鼠标移动监听器document.onmousemove = 函数 onMouseMove(e) {//e.clientY 将是鼠标的位置,因为它现在移动了一点//offsetHeight 是 block-1 的高度block.style.height = block.offsetHeight + e.clientY - dragX + "px";//更新变量 - 直到这个位置,鼠标移动已被处理dragX = e.clientY;}//在鼠标抬起时移除鼠标移动侦听器(现在拖动完成)document.onmouseup = () =>document.onmousemove = document.onmouseup = null;}
body {边距:0;}.外{显示:弹性;弹性方向:列;高度:100vh;}.堵塞 {高度:50%;}.block-1 {背景颜色:红色;调整大小:垂直;/* 调整垂直大小 */溢出:自动;/* 调整大小适用于除可见之外的溢出 */}.block-2 {背景颜色:绿色;弹性:1;/* 自动调整 */最小高度:0;溢出:隐藏;/* 在小宽度上隐藏溢出 */}.slider {文本对齐:居中;字母间距:10px;背景颜色:#dee2e6;游标:调整行大小;用户选择:无;/* 禁用选择 */}
<div class="block block-1">第 1 座<div class="slider">slider</div><div class="block block-2">第 2 座