使用flex布局实现3个div并排,两侧的div宽度固定,中间的div自适应面试官问过,当时不知道,今天工作中遇到了。

设置一个父div,添加样式display:flex。中间div设置flex-grow:1,(等同代码中设置flex:1。flex是grow、shrink、basis的简写)但是盒模型默认紧紧挨着,可以使用margin控制外边距。middle一定在中间,否则需要order属性来调整。

通过项目属性flex-grow设置middle的放大比例,将空余的空间用middle来填充,使三个项目排满一整行;默认为0,也就是对剩余空间不做处理。通过项目属性flex-basis 设置left和right的固定宽度。

<style>
.main{
      width:100%;
      height:300px;
      display: flex;
      /* 主轴方向,起点在左端 */
      flex-direction: row;
      /* 项目在主轴的对齐方式 */
      justify-content: flex-start;
    }
    .left{
      /* flex属性是flex-grow, flex-shrink 和 flex-basis的简写,
      默认值为0 1 auto。后两个属性可选。 */
      flex:0 1 200px;
      height: 100%;
      background-color:red;
    }
    .right{
      flex:0 1 200px;
      height:100%;
      background-color:pink;
    }
    .middle{
      flex:1;
      height: 100%;
      background-color:greenyellow;
    }
  </style>
</head>
<body>
  <div class="main">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
  </div>
</body>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Vue3 + TypeScript + CSS3 实现水平放置3个子 div,其一个 div 可以拖拽改变宽度的效果。下面是一个简单的实现示例,供你参考: ```html <template> <div class="container"> <div class="left" ref="left" :style="{ width: leftWidth + 'px' }"> <!-- 左侧 div宽度可变 --> </div> <div class="middle"></div><!-- 中间 div固定宽度 --> <div class="right"></div><!-- 右侧 div固定宽度 --> <div class="separator" ref="separator" @mousedown="startDrag"></div><!-- 分隔符,用于拖拽 --> </div> </template> <script lang="ts"> import { ref } from 'vue'; export default { setup() { const leftWidth = ref(200); // 左侧 div 的初始宽度 const startDrag = (e: MouseEvent) => { const separator = e.target as HTMLElement; // 获取分隔符元素 const container = separator.parentElement as HTMLElement; // 获取容器元素 const left = container.querySelector('.left') as HTMLElement; // 获取左侧 div 元素 const startX = e.clientX; // 记录鼠标初始位置 const startWidth = left.offsetWidth; // 记录左侧 div 初始宽度 const onMouseMove = (e: MouseEvent) => { const diff = e.clientX - startX; // 计算鼠标移动距离 leftWidth.value = startWidth + diff; // 更新左侧 div 宽度 }; const onMouseUp = () => { document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('mouseup', onMouseUp); }; document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp); }; return { leftWidth, startDrag, }; }, }; </script> <style> .container { display: flex; height: 300px; } .left { height: 100%; background-color: #f0f0f0; flex-grow: 0; flex-shrink: 0; } .middle { width: 400px; height: 100%; background-color: #e0e0e0; flex-grow: 0; flex-shrink: 0; } .right { width: 200px; height: 100%; background-color: #d0d0d0; flex-grow: 0; flex-shrink: 0; } .separator { width: 10px; height: 100%; background-color: #c0c0c0; flex-grow: 0; flex-shrink: 0; cursor: col-resize; } </style> ``` 在上面的代码,我们使用了 Vue3 的 `ref` 函数来创建了两个引用类型变量 `leftWidth` 和 `separator`,分别用于记录左侧 div宽度和分隔符元素。 在 `startDrag` 函数,我们首先获取了分隔符、容器和左侧 div 的元素,并记录了鼠标初始位置和左侧 div 初始宽度。然后,我们使用 `addEventListener` 函数添加了 `mousemove` 和 `mouseup` 事件的监听器,分别用于实现拖拽效果。在 `mousemove` 事件,我们计算了鼠标移动距离,并根据移动距离更新了左侧 div宽度。在 `mouseup` 事件,我们移除了事件监听器,完成了拖拽效果的实现。 最后,我们使用 CSS3 的 flex 布局和一些基本样式,实现了水平放置3个子 div,并在第一个子 div 添加了拖拽效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值