阐述overflow:hidden属性

文字有点多,但认真看完并做测试后对该属性会有更进一步的理解:

overflow:hidden是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解。
一提到清除浮动,我们就会想到另外一个CSS样式:clear:both,我相信对于这个属性的理解大家都不成问题的。但是对于“浮动”这个词到底包含什么样的含义呢?

我们下面来详细的阐述一下。<div id="wai"><div id="nei"></div></div>这是一个常用的div写法,下面我们来书写样式。大家可以在DMX中自己做试验:
#wai{ width:500px;  background:#000; height:100px;}

#nei { float:left; width:500px; height:600px; background:red;}
可以看到,我给nei这个id加了一个浮动,我们常规的理解是,我们允许nei这个id的div的右边出现其他的内容,只要它的宽度不超过wai这个div和nei这个div的剩余值。如果div wai中还包含其他的div,我不允许它出现在nei的右侧,我们则用样式clear:both指定这个div,不允许它浮动在nei右侧。
这些在ie6里面是正确的。但是在火狐或者其他浏览器里面,我们发现问题并非如此简单。我们发现,当nei这个div的宽度和高度都大于wai这个div的时候,wai并没有被内撑开而是依旧显示为我们指定的宽高。在我的例子中,都是500。
这个时候我不理解了,我搜索了很多的资料,但是都没能理解这是为什么,直到看到别人在类似的情况下给wai这个div加了一个overflow:hidden这个属性解决了这个问题。
我们直到overflow:hidden这个属性的作用是隐藏溢出,给wai加上这个属性后,我们的nei的宽高自动的被隐藏掉了。另外,我们再做一个试验,将wai这个div的高度值删除后,我们发现,wai的高度自动的被nei这个div的高度值给撑开了。
说到这里,我们再来理解一下“浮动”这个词的含义。我们原先的理解是,在一个平面上的浮动,但是通过这个试验,我们发现,这不仅仅是一个平面上的浮动,而是一个立体的浮动!
也就是说,当nei这个div加上浮动这个属性的时候,在显示器的侧面,它已经脱离了wai这个div,也就是说,此时的nei的宽高是多少,对于已经脱离了的wai来说,都是不起作用的。
OK,当我们全面的理解了浮动这个词的含义的时候,我们就理解overflow:hidden这个属性中的解释,清除浮动是什么意思了。也就是说,当我们给wai这个div加上overflow:hidden这个属性的时候,其中的nei等等带浮动属性的div的在这个立体的浮动已经被清除了。这就是overflow:hidden这个属性清除浮动的准确含义。
当我们没有给wai这个div设置高度的时候,nei这个div的高度,就会撑开wai这个div,而在另一个方面,我们要注意到的是,当我们给wai这个div加上一个高度值,那么无论nei这个div的高度是多少,wai这个高度都是我们设定的值。而当nei的高度超过wai的高度的时候,超出的部分就会被隐藏。这就是隐藏溢出的含义!

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>手机版书籍收集者</title> <style> * { box-sizing: border-box; touch-action: manipulation; } body { margin: 0; padding: 10px; font-family: 'Arial', sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; color: white; overflow: hidden; } .game-container { background: rgba(0, 0, 0, 0.7); padding: 15px; border-radius: 12px; text-align: center; max-width: 500px; margin: 0 auto; } h1 { color: #ffd700; font-size: 24px; margin: 10px 0; } .game-stats { display: flex; justify-content: space-between; margin: 15px 0; font-size: 16px; } #gameCanvas { background: #2c3e50; border: 2px solid #34495e; border-radius: 8px; width: 100%; max-width: 100%; height: 300px; } .controls { margin: 15px 0; font-size: 14px; } .touch-controls { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 10px; margin-top: 15px; height: 120px; } .control-btn { background: rgba(255, 255, 255, 0.2); border: 2px solid white; border-radius: 10px; color: white; font-size: 24px; display: flex; align-items: center; justify-content: center; } .up-btn { grid-column: 2; grid-row: 1; } .left-btn { grid-column: 1; grid-row: 2; } .down-btn { grid-column: 2; grid-row: 2; } .right-btn { grid-column: 3; grid-row: 2; } .game-over, .game-win { background: rgba(0, 0, 0, 0.9); padding: 20px; border-radius: 12px; text-align: center; display: none; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; } .restart-btn { background: #e74c3c; color: white; border: none; padding: 10px 20px; font-size: 16px; border-radius: 6px; margin-top: 15px; } </style> </head> <body> <div class="game-container"> <h1>📚 书籍收集者 📚</h1> <div class="game-stats"> <div>已收集: <span id="booksCollected">0</span>/5</div> <div>时间: <span id="timer">0</span>秒</div> </div> <canvas id="gameCanvas"></canvas> <div class="controls"> 使用下方按钮或滑动屏幕移动 </div> <div class="touch-controls"> <button class="control-btn up-btn" ontouchstart="moveUp()" ontouchend="stopMove()">↑</button> <button class="control-btn left-btn" ontouchstart="moveLeft()" ontouchend="stopMove()">←</button> <button class="control-btn down-btn" ontouchstart="moveDown()" ontouchend="stopMove()">↓</button> <button class="control-btn right-btn" ontouchstart="moveRight()" ontouchend="stopMove()">→</button> </div> </div> <div class="game-over" id="gameOver"> <h2>😵 游戏结束</h2> <p>怪物抓到了你...</p> <button class="restart-btn" onclick="restartGame()">重新开始</button> </div> <div class="game-win" id="gameWin"> <h2>🎉 恭喜胜利!</h2> <p>用时: <span id="winTime">0</span>秒</p> <button class="restart-btn" onclick="restartGame()">再玩一次</button> </div> <script> // 简化版游戏代码 const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); // 设置画布尺寸 function resizeCanvas() { canvas.width = canvas.offsetWidth; canvas.height = 300; } resizeCanvas(); window.addEventListener('resize', resizeCanvas); // 游戏变量 let gameRunning = true; let booksCollected = 0; let totalBooks = 5; let gameTime = 0; let timerInterval; // 玩家 const player = { x: canvas.width / 2, y: canvas.height / 2, size: 15, speed: 3, color: '#3498db', moving: { up: false, down: false, left: false, right: false } }; // 书籍 const books = []; const bookColors = ['#e74c3c', '#2ecc71', '#f39c12', '#9b59b6', '#1a
最新发布
08-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值