关于隐藏元素高度的问题 css visibility:hidden 与 display:none的区别
其实这是一个老问题了,s visibility:hidden 与 display:none 共同点就是都会似的元素不可见。但是 visibility:hidden 的DOM元素是占用空间的,会挤占其他元素的位置,宽度和高度边框边距等都不会发生变化,所以使用 offsetWidth等属性获取的值不会发生变化。 但是display:none 就完全不同了,在DOM树中完全不会渲染,就相当于不存在这个DOM一样,所以使用 offsetWidth 等获取到的结果都是0。 明白了这些,下面我们来看一个简单的应用。
在IE8中使用angular和bootstrap3的时候,发现引入 ui.bootstrap之后鼠标划过对应的tr(列表布局使用的table>tr)的时候会出现闪动的情况,查找bootstrap的源码就可以发现其实它是在 tr的后面添加了div,这样在IE8中就会导致整个布局错乱,那这里我们只能自己动手来写一个类似的功能了,这里就牵扯到计算隐藏元素高度的问题。
首先在body结束标签之前,我们新增一个 tootip的div,代码如下(其实就是 bootstrap 中 tooltip插件里面的一个参数 template):
<div id="tooltips" class="tooltip top">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner"></div>
</div>
增加如下代码后,bootstrap默认的css会直接渲染为tooltip的样式,这里为了方便,我们就不再更改默认的class,然后我们让这个提示框显示到对应元素的上方,中间位置,但是问题来了,tooltip-inner里面的内容是不固定的,也就是说这里面的内容高度是不确定的,因此我们根据元素位置获取的top值在这里需要经过计算,减去这里的tooltip的高度才能正确加载到文档的对应位置。所以在鼠标移开的事件中就必须使用visibility:hidden 如果使用display:none, 再次获取tooltip的高度会发现高度为0了,看代码吧。
如果使用display:none (jq中的 hide()方法)
$.fn.tips = function(content){
var $tt = $('#tooltips'),
$ttinner = $('.tooltip-inner'),
pos = $(this).offset(),
w = parseInt($(this).outerWidth(),10);
$ttinner.html(content);
var calcWidth = parseInt($tt.outerWidth(), 10);
var h = parseInt($tt.outerHeight(),10),
l = parseInt(pos.left)*1 + (w - calcWidth)*0.5;
$tt.css({left:l+'px',top:(pos.top-h)+'px'}).fadeIn(100);
}
$.fn.tipshide = function(){
$('#tooltips').hide();
}
上面代码只有第一次会正确显示提示框,第二次的时候将无法正确显示,下面是修复后的
$.fn.tips = function(content){
var $tt = $('#tooltips'),
$ttinner = $('.tooltip-inner'),
pos = $(this).offset(),
w = parseInt($(this).outerWidth(),10);
$ttinner.html(content);
var calcWidth = parseInt($tt.outerWidth(), 10);
var h = parseInt($tt.outerHeight(),10),
l = parseInt(pos.left)*1 + (w - calcWidth)*0.5;
$tt.css({left:l+'px',top:(pos.top-h)+'px', visibility:"visible"}).fadeIn(100);
}
$.fn.tipshide = function(){
$('#tooltips').css("visibility","hidden");
}
关于隐藏元素高度的问题 css visibility:hidden 与 display:none的区别的更多相关文章
- visibility:hidden和display:none的区别
大家知道,如果想让某一段代码在前台不显示,最简单的方法是用css的display:none即可,这样下边的内容就自动上移或右侧的左移来填补这个空隙. 但特殊情况下我们只需要隐藏这个元素,但它的位置不能 ...
- visibility: hidden 和 display: none的区别
相同点: 两者都可以将dom元素隐藏 不同点: 1.display: none 隐藏之后不占用文档流,而visibility: hidden却会占用文档流,如果要在隐藏元素的同时获取其尺寸信息,那就可 ...
- visibility: hidden和 display: none的区别
visibility: hidden----将元素隐藏,但是在网页中该占的位置还是占着. display: none----将元素的显示设为无,即在网页中不占任何的位置.
- display:none;visibility:hidden;opacity:0;之间的区别
什么是回流 当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建.这就称为回流(reflow).每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是 ...
- 再谈visibility:hidden和display:none
之前写过一篇有关visibility:hidden和display:none的文章:为什么要用用visibility:hidden;代替display:none;?主要是从浏览器性能方面入手,却没写两 ...
- 为什么要用visibility:hidden;代替display:none;?
为什么要用用visibility:hidden;代替display:none;?因为后者更加消耗浏览器: css绘制画面有两种形式:repaint 和reflow,当我们更改css属相如backgro ...
- What is the difference between visibility:hidden and display:none?
What is the difference between visibility:hidden and display:none? 答案1 display:none means that the t ...
- css 中visibility:hidden和display:none有什么区别呢
<div style="width:100px;height:100px;background:red;visibility:hidden"></div>/ ...
- display:none和visibility:hidden v-show和v-if的区别
隐藏元素display:none 和 visibility:hidden的区别visibility:hidden可以隐藏某个元素,但是隐藏的元素仍要占据空间,仍要影响布局display:none不会占 ...
随机推荐
- 1042 数字0-9的数量 1050 循环数组最大子段和 1062 序列中最大的数 1067 Bash游戏 V2 1092 回文字符串
1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次 ...
- Codeforces Round #309 (Div. 2)D
C. Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法
在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...
- JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...
- Python自学笔记-列表生成式(来自廖雪峰的官网Python3)
感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 列表生成式 列 ...
- MyBatis开发中解决返回字段不全的问题
场景重现: mybatis 在查询的时候,可以返回Map,但是一旦这个字段为空(null)的时候,map里就没有了.我用的是mysql数据库,除了在查询语句上做ifnull判断给它默认值外,有没的别的 ...
- (转)Python爬虫利器一之Requests库的用法
官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...
- Android基础知识06—活动的四大启动模式
------ 活动的启动模式 ------ 在实际项目中应该根据特定的需求为每个活动指定恰当的启动模式. 四种启动模式: standard . singleTop . singleTask . sin ...
- linux组网笔记
一直以为自己linux还说的过去,事实上已经跟不上日新月异的应用需要了. 现成文档都没法看,错太多.然而毕竟是多年积累,整理一个准确的文档还是能做到的. 本机ip设置: # static interf ...
- 【转】open参数O_DIRECT的学习
open参数O_DIRECT的学习 使用 O_DIRECT 需要注意的地方 posix_memalign详细解释 free:这里好几个方法我都没测试成功,最后还是用posix_memalign 对齐的 ...