Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

display、visibility、opacity、position隐藏元素的区别 #75

Open
TieMuZhen opened this issue Dec 22, 2021 · 0 comments
Open

display、visibility、opacity、position隐藏元素的区别 #75

TieMuZhen opened this issue Dec 22, 2021 · 0 comments
Labels

Comments

@TieMuZhen
Copy link
Owner

TieMuZhen commented Dec 22, 2021

一、display: none

.box {
    display: none;
}
  • 元素将从页面中消失,元素在页面上将彻底消失,元素本身占有的空间就会被其他元素占有,也就是说它会导致浏览器的重排和重绘
  • 元素上所有的事件将无法被正常触发
  • 子孙元素同时被隐藏
  • 该状态下为元素添加其他过渡效果都是无效的

二、visibility: hidden

.box {
    visibility: hidden;
}
  • 元素不会显示,但是依然占据原本该有的空间位置元素上的点击事件不能被触发,不会触发重排,但是会触发重绘
  • visibility属性可继承,子元素可以通过设置visibility:visible来实现可见
  • 如果子元素为visible,那么子元素的点击事件可被触发,此时visibilityhidden父级元素的事件会在事件冒泡阶段被触发

三、opacity: 0

.box {
    opacity: 0;
}
  • 元素依旧存在页面上,并且会占用页面空间位置,不会引发重排,一般情况下也会引发重绘,因为如果利用animation动画,对opacity做变化(animation会默认触发GPU加速),则只会触发GPU层面的composite,不会触发重绘
  • 元素上绑定的事件可以被正常触发
  • opacity可被继承,子元素可以通过设置opacity: 1来实现可见

四、position: relative

.box {
    position: relative;
    left: -10000px;
    top: -10000px;
}
  • 元素依然存在页面上,会影响页面的布局
  • 绑定事件可被正常触发
  • position属性可被继承(position: inherit),子元素可以通过设置relativepositionfixedinherit配合topbottomrightleft值重新进行定位。

五、position: absolute

.box {
    position: absolute;
    top: -9000px;
    left: -9000px;
}
  • 元素依然存在页面上,不会影响页面的布局
  • 绑定事件可被正常触发
  • position属性可被继承(position: inherit),子元素可以通过设置relativepositionfixedinherit配合topbottomrightleft值重新进行定位。

六、设置height、width属性为0

将元素的marginborderpaddingheightwidth等影响元素盒模型的属性设置成0,如果元素内有子元素或内容,还应该设置其overflow:hidden来隐藏其子元素

.hiddenBox {
    margin:0;     
    border:0;
    padding:0;
    height:0;
    width:0;
    overflow:hidden;
}

参考文献

@TieMuZhen TieMuZhen added the CSS label Dec 22, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant