displaynone的原理-displaynone 隐藏原理
实际上说“隐藏”,就是直接让那个“东西”去睡个懒觉,别让它出目前文字流里。 想象你在写小说,突然认定主角想上茅房,你得让他下一句就变成“我撇脱一下”。
这时候 CSS 的 display:none 就用出来了,它就像是给那个元素贴了个睡衣,浏览器对他说:嘿,别跟我提了,把你藏到背景里去。
这时候,你的鼠标指针可能会飘那会儿,就连能点进去,但它就是个空的盒子,里面啥也没有,也不会占着地方,就像你突然从衣柜里把一件刚买的便宜 T 恤扔进了折叠箱,它就不在你视野的桌面上了。 这个机制最核心的点,就在那句"none"要么"none"。当这个属性生效的时候,元素会从“由此可见”的状态瞬间切换成“不由此可见”。它不是变成了透明,也不是缩小到看不见,而是彻底消亡了。就像你关掉一个扇形扇灯,灯盘还在原地,但光线就不如何刺眼了,要么你关掉了一个电视,屏幕依然在那儿亮着,但画面就被切走了。浏览器处理得挺干脆,不需求中间环节去算过程,直接二选一:要么全看到,要么就全看不见。 它最了得的地方在于,它不影响那个元素的位置。假设你有一段 HTML 代码,写的是 `
`。在浏览器里,这段代码存有,鼠标能选中它,点击它也不会崩,出于它只是个看不见的幽灵。但要是你再看一眼那个 `margin: 10px` 的样式,你会发现它彻底不管它自己。那个 10 像素的偏移量,那个红色的背景,就连那个 div 原本应当居中的位置,统统都消亡了。
这就仿佛是你在地上画一个框,然后突然把画布给折叠起来,框还在纸的背面,但下面啥也没有了。 大量人好办混淆 display:none 和 display:none; visibility:hidden。
这两者别看名字里都有"none",但功能截然不同。visibility:hidden 是告诉浏览器:“嘿,别跟它们打招呼,别在渲染队列里占着位置。”就像你不想让某人出目前聚光灯下,但你还得让他站在舞台上,只是不让观众看到。它不会转变元素的位置,但会把它从视觉上抹去。而 display:none 是更狠的一招,它直接把这个元素从 DOM 里“删掉”要么“折叠”。它绝对是视觉上的消亡,除了鼠标指针能点进去,它啥都没有。 这种场景在网页开发里忒多了。
比如你有个不起眼的小附件,一个珍贵的个人信息表格,要么一段代码片段,你不想一启动就把它扔进页面显眼位置,出于它忒隐私了,要么忒敏感了。
这时候,你能够直接给它加个 display:none。
这样,用户打开页面时,那些内容是一片空白,搜索框找不到它,加载速度也快了,出于浏览器不需求重新渲染那些看不见的东西。它就像是一个隐形门,平时关得严严实实,你推不开,直到用户需求时才打开。 不过,既然它看起来像不存有,那它还能算作“存有”吗?从技术实现的角度讲,它确实是存有的,就在你的 HTML 源代码里,只要浏览器能读取属性,它就在内存里存有。但它对当前页面的由此可见性来说,就是不存有。
这就好比你在心里关掉了那盏灯,房间里还是亮着,但没人能看到,那灯就是存有的,但没人看到它。浏览器最终的处理逻辑就是类似于“忍者”:它知道这些东西在,知道如何移动它们,知道如何计算它们的位置,但它绝对不会在屏幕上显形。 要是你需求把内容隐藏,但又希望它们能响应键盘操作,比如用户按了空格键想隐藏一个菜单,要么那个元素被用户选中了想要恢复,这时候就不能用 display:none。出于显示:block要么inline-block的元素,是能被元素的选中状态触发的。
这时候,经典的 trick 就是利用 display:inline要么display:block,加一个 tiny hint,比如字体变小要么颜色加深,让用户肉眼察觉到了“这里有个东西”,但视觉上它的表现已经变了,要么干脆让它保持默认的样式,只是通过其他 trick 实现功能。 再想想实际应用场景,比如一个电商网站,用户下单后,想查看订单详情,但只想在不跳转页面的情况下看到。
这时候你能够把详情局部设成 display:none,这样页面加载时,用户看到的只是一张干净利落的订单列表。等用户确认订单,要么页面刷新后的某个特定条件触发时,再瞬间把详情局部“吐”出来。
这个过程对用户来说是无缝衔接的,不会有任何卡顿要么闪烁的感觉。 还有一种情况,是在做 SEO 优化要么某些特殊展示需求。
比如你需求一段内容被搜索引擎忽略,但用户能看到。
这时候能够用 display:none,出于它不会被搜索引擎抓取,但要是你又希望用户刚好在某个页面看到它,那就得用其他的 tricks,比如利用 display: block 要么定位 trick 来强迫浏览器显示它。 总的来说,display:none 就像是一场魔术。它让你信任元素消亡了,但要是你伸手去摸那个 DOM 树,要么在管住台里打印一下 DOM 结构,你会发现它还在。它利用的是浏览器的渲染机制,直接切断了用户界面的显示通路。它不是元素去隐藏自己,而是浏览器告诉界面:“对,这里有个东西,但它目前是关着的。”这种“关着”的状态,既是状态,也是一种强烈的视觉欺骗。对于程序员来说,这是最轻量级的管住手段,简直没有任何副功能,只要得把它调出来,就意味着它原本就是个隐形人,只是目前的状态是:隐身。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
