而像是这样 , 是一个更为复杂的布局内容展示(当然下面展示的也比较简单,实际中可以想象成任意复杂结构内容):

文章插图
如果将这个结构,扔到上面的 g-resize 中:
<div class="g-resize"> <div class="g-content"></div></div>那么就会因为设置了 overflow: scroll 的原因,将完全看不到,只剩下一小块:

文章插图
为了解决这个问题,我们得修改原本的 DOM 结构,另辟蹊径 。
方法有很多,譬如可以利用 Grid 布局的一些特性 。当然,这里我们只需要巧妙的加多一层 , 就可以完全解决这个问题 。
我们来实现这样一个布局:
<div class="g-container"> <div class="g-resize"></div> <div class="g-content"></div></div>解释一下上述代码,其中:
- g-container 设置为绝对定位加上 display: inline-block,这样其盒子大小就可以由内部正常流式布局盒子的大小撑开
- g-resize 设置为 position: relative 并且设置 resize,负责提供一个可拖动大小元素,在这个元素的变化过程中,就能动态改变父容器的高宽
- g-content 实际内容盒子,通过 position: absolute 定位到容器的右下角即可
.g-container { position: absolute; display: inline-block;}.g-resize { content: ""; position: relative; width: 20px; height: 20px; border-radius: 50%; resize: both; overflow: scroll; z-index: 1;}.g-content { position: absolute; bottom: -80px; right: -80px; width: 100px; height: 100px; background: black; pointer-event: none; &::before { content: ""; position: absolute; width: 20px; height: 20px; background: yellow; border-radius: 50%; transition: .3s; }}.g-container:hover .g-content::before { transform: scale(1.1); box-shadow: -2px 2px 4px -4px #333, -4px 4px 8px -4px #333;}.g-resize::-webkit-resizer { background-color: transparent;}下图中,你看到的所有元素 , 都只是 g-content 呈现出来的元素,整个效果就是这样:

文章插图
是的,可能你会有所疑惑 , 下面我用简单不同颜色,标识不同不同的 DOM 结构,方便你去理解 。
- 红色边框表示整个 g-container 的大小
- 【超强的纯 CSS 鼠标点击拖拽效果】用蓝色矩形表示设置了 g-resize 元素的大小
- 关掉 ::-webkit-resizer 的透明设置,展示出 resize 框的可拖拽 ICON

文章插图
完整的原理代码,你可以戳这里:CodePen Demo -- Pure CSS Auto Drag Demo
实际应用OK , 用了比较大篇幅对原理进行了描述 。下面我们举一个实际的应用场景 。使用上述技巧制作的可拖动便签贴 。灵感来自 -- scottkellum 。
推荐阅读
- 【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结
- TDengine的数据建模?库、表、超级表是什么?怎么用?
- 超详细 R及R Studio下载安装教程
- Springboot 之 Filter 实现 Gzip 压缩超大 json 对象
- 微信怎么发文字和图片朋友圈(微信朋友圈发纯文字)
- 咋发朋友圈纯文字(简短干净文字控)
- 华为手机自由截屏怎么截(华为怎么滚动截超长图)
- 努力一周,开源一个超好用的接口Mock工具——Msw-Tools
- 如何发微信朋友圈(微信怎么发纯文字)
- 两道超有意思的 CSS 面试题,试试你的基础