关于隐藏元素高度的问题 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不会占 ...
随机推荐
- css3换行的三方式的对比(整理)
CSS3 文本换行 (转载..) 作者 张歆琳 关注 2016.06.20 10:49* 字数 1101 阅读 676评论 1喜欢 6 文本换行其实是个非常常用但并不起眼的特性.你什么都不用设,浏览器 ...
- VC维含义的个人理解
有关于VC维可以在很多机器学习的理论中见到,它是一个重要的概念.在读<神经网络原理>的时候对一个实例不是很明白,通过这段时间观看斯坦福的机器学习公开课及相关补充材料,又参考了一些网络上的资 ...
- python邮件SMTP的GUI编程
写的是python中smtp的gui编程,用的163邮箱给qq邮箱发送邮件做测试,如果你发现你的发送失败,试着用以下方法解决: 1.网页登陆你的邮箱,设置中查看smtp是否开启,比如163邮箱的smt ...
- hadoop(一)之初识大数据与Hadoop
前言 从今天起,我将一步一步的分享大数据相关的知识,其实很多程序员感觉大数据很难学,其实并不是你想象的这样,只要自己想学,还有什么难得呢? 学习Hadoop有一个8020原则,80%都是在不断的配置配 ...
- 关于python中的pickle函数
8-7参考阅读 - 读文件.写文件.异常处理.文件保存游戏.pickle数据转成文本的过程又被称为"序列化",即将对象状态转换为可保持或传输的格式的过程.对应的,从序列化的格式中解 ...
- Android UI 笔记
EditText中添加小图标 <TextView android:layout_width="wrap_content" android:layout_height=&quo ...
- jquery控制div随滚动条滚动效果
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jquery div随滚动条 ...
- 开发人员的福音:微软、谷歌、Mozilla将他们所有的web API文档放在同一个地方
Tips 原文作者:Liam Tung 原文地址:Developers rejoice: Microsoft, Google, Mozilla are putting all their web A ...
- 墨卡托投影坐标系(Mercator Projection)原理及实现C代码
墨卡托投影是一种"等角正切圆柱投影",荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面 ...
- Java 多线程的一些问题
1.volatile关键字的作用 一个非常重要的问题,是每个学习.应用多线程的Java程序员都必须掌握的.理解volatile关键字的作用的前提是要理解Java内存模型,volatile关键字的作用主 ...