css中的display、visibility、opacity

  • opacity:用来设置透明度(0-1)
  • display:用来定义建立布局时元素生成的显示框的类型(‘block’,‘inline’,‘inline-block’,‘table’,‘none’,‘list-item’)
  • visibility:用来设置元素是否可见(‘visible’,‘hidden’)

是否占据了空间

  • opacity、visibility 不显示仍占据空间
  • display 不显示不占据空间

对子元素的影响

  • 如果父元素和子元素的显隐性不同(父隐子显),opacity、display子元素的设置不起作用,显示效果和父元素一样
  • visibility 不受父元素影响,可以显示出来

是否影响其他元素的触发事件

  • visibility,display 不会影响其他元素触发事件
  • opacity 属性如果能遮住其他元素,其他元素则不能触发事件(用在一个遮罩覆盖底层页面,并且不触发底层事件,却能触发自身事件的情形)

是否产生了回流(reflow,页面中的一部门因为元素尺寸,布局,显隐等改变需要重新构建)

  • display 属性会产生回流
  • opacity,visibility 属性不会产生回流

是否产生重绘(repaint,页面一些元素需要更新,而这些属性只影响外观、风格,不影响布局)[回流必将引起重绘,而重绘不一定会引起回流]

  • display,opacity 属性会产生重绘
  • opacity 属性不一定会重绘(元素提升为合成层后,transform 和 opacity 不会触发 repaint,如果不是合成层,则其依然会触发 repaint)

是否支持transition

  • opacity 属性支持transition
  • visibility 属性也支持transition。visible-hidden的过渡有一个延时;hidden-visible的过渡没有延时。【注】触发自身事件时,元素不能完成从hidden-visible的过渡,但是触发其他元素的时候,可以完成该元素从visible-hidden-visible…的过渡效果
  • display 不仅不支持transition,还会使得transition失效(display:none;的元素不会渲染在页面上,而transition要起作用,元素必须已经循环在页面上)
  • 如果必须要使用display属性,可以加定时器来解决,代码如下:
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <style>
    .blue{
        width:200px;
        height:200px;
        background:blue;
    }
    .yellow{
        width:100px;
        height:100px;
        background:yellow;
        display:none;
        opacity:0;
        transition:1s;
    }
  </style>
 </head>
 <body>
    <div class='blue'>
        <div class='yellow'></div>
    </div>
    <script>    
        var blue = document.querySelector('.blue');
        blue.addEventListener('mouseenter',function(){
            var yellowDiv = document.querySelector('.yellow');
            yellowDiv.style.display = 'block';
            setTimeout(function(){
                yellowDiv.style.opacity = '1';
            },0);
        })
    </script>
 </body>
</html>

补充 list-item,项目列表

<style>
 .list_box{
    display: list-item;
    list-style-type: disc;
  }
</style>
<div class="list_box">
  <p>name:alice</p> 
  <p>age:18</p>
</div>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值