css进阶

1. css中的rgba()和opcity的区别

  • rgba()中a指的是透明度,不会被子元素继承<=>opcity的透明度会被子元素继承。因此有时使用rgba()比opcity效果好。
  • rgba()可以设置在border-color,color,background-color,text-shadow,box-shadow

2.display:none 和 visibility:hidden 的区别

display:none 和 visibility:hidden 都是隐藏元素的属性
普通版

  • display:none 隐藏的元素不占据任何空间。

  • visibility:hidden 隐藏的元素空间依旧保留。
    进阶版

  • display与元素的显隐

    • display:none:该元素及其后代元素全部都被隐藏,可以认为当前元素从dom文档中‘消失’了,当然不是真正的消失,这个节点依旧存在于文档流中。

      • 扩展:Vue中的 v-show 对应的是css的display值。而v-if则是彻底删除节点。
    • 一般情况下,当一个元素被设置为display:none时,该元素无法被点击,同时占据的空间消失。

      • 特例
      <form>
          <input id="hide" type="submit" style="display:none"/>
          <label for="hide">点击触发提交</label>
      </form>
      

      表单元素确实无法被点击,但由于label绑定了id为“hide”的元素,因此点击label标签依旧可以触发click事件,也就是说表单元素的点击事件依旧被保留,并且可以通过其他手段触发。

    • display显隐控制并不影响CSS3 animation动画的实现。

    • 影响transition的过渡动画效果,因此如果要用到transition的话,建议使用visibility。

    • 影响CSS的计数队列。举个例子,10个列表从1开始计数,当第二个列表的display置为none,就会导致计数器忽略当前元素,原来的第三个列表则计数为2。

  • visibility与元素的显隐

    • 父元素设置了visibility:hidden后,子元素也隐藏的深层原因是子元素会继承父元素的visibility:hidden。因此,当我们需要隐藏父元素而又要显示部分子元素的时候,只需要把子元素继承的visibility改成默认的visible属性即可,这一点在被设置了display:none的元素上,根本不可能实现。
    • visibility的元素的子元素只是单纯的继承了父元素的visibility,因此在CSS计数方面不会有任何影响,这点和display:none也有所不同。同时transition过渡是支持visibility属性的,因此在使用过渡动画的时候,想让元素实现淡入淡出效果来控制显隐的可以使用visibility:hidden。

参考 : [https://blog.csdn.net/dkr380205984/article/details/86222101]

上一篇:透明度属性


下一篇:css透明度属性简介