css – 可见性之间有什么区别:隐藏和可见性:在flexbox中崩溃?

前端之家收集整理的这篇文章主要介绍了css – 可见性之间有什么区别:隐藏和可见性:在flexbox中崩溃?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
CSS flexible box layout module,它说:

the collapsed flex item is removed from rendering entirely,but leaves behind a “strut”

这表现得像是可见性:隐藏吗?如果答案是肯定的,那么为什么能见度:崩溃引入?

解决方法

关于浏览器支持的注意事项:Chrome 59似乎不支持可见性:2017年7月12日崩溃.下面的代码示例崩溃在Chrome中失败(它们的行为就像隐藏一样),但在Firefox和Edge中工作.

Flex项目按行或列排列,具体取决于flex-direction.

每行/每列被视为flex line.

在下面的示例中,flex容器在行方向上具有四个flex项.第四项包装,创建第二个弹性线:

  1. .container {
  2. display: flex;
  3. flex-wrap: wrap;
  4. width: 200px;
  5. border: 1px dashed black;
  6. }
  7. .Box {
  8. height: 50px;
  9. flex: 0 0 50px;
  10. margin: 5px;
  11. background-color: lightgreen;
  12. display: flex;
  13. justify-content: center;
  14. align-items: center;
  15. }
  1. <div class="container">
  2. <div class="Box Box1">1</div>
  3. <div class="Box Box2">2</div>
  4. <div class="Box Box3">3</div>
  5. <div class="Box Box4">4</div>
  6. </div>

显示:无

使用display:none,浏览器不会呈现弹性项目.

如果弹性线上的所有项目都显示为:none,则该线条也会折叠,这会影响布局的其余部分.柔性线折叠时,周围元素可能会发生偏移.

如果display:none应用于第三个项目,则第四个项目位于上面一行,下面一行折叠:

  1. .container {
  2. display: flex;
  3. flex-wrap: wrap;
  4. width: 200px;
  5. border: 1px dashed black;
  6. }
  7. .Box {
  8. height: 50px;
  9. flex: 0 0 50px;
  10. margin: 5px;
  11. background-color: lightgreen;
  12. display: flex;
  13. justify-content: center;
  14. align-items: center;
  15. }
  16. .Box3 { display: none; }
  1. <code>display: none</code>
  2. <div class="container">
  3. <div class="Box Box1">1</div>
  4. <div class="Box Box2">2</div>
  5. <div class="Box Box3">3</div>
  6. <div class="Box Box4">4</div>
  7. </div>

能见度:隐藏

使用visibility:hidden时,浏览器会呈现一个flex项,但它是完全透明的.它隐藏在视图之外,但占用了它在布局中通常使用的空间.因此,周围的元素看到这个项目完整无缺.

在此示例中,当最后两个框具有可见性:隐藏时,布局的其余部分(包括第二个柔性线)保持不变.

  1. .container {
  2. display: flex;
  3. flex-wrap: wrap;
  4. width: 200px;
  5. border: 1px dashed black;
  6. }
  7. .Box {
  8. height: 50px;
  9. flex: 0 0 50px;
  10. margin: 5px;
  11. background-color: lightgreen;
  12. display: flex;
  13. justify-content: center;
  14. align-items: center;
  15. }
  16. .Box3 { visibility: hidden; }
  17. .Box4 { visibility: hidden; }
  1. <code>visibility: hidden</code>
  2. <div class="container">
  3. <div class="Box Box1">1</div>
  4. <div class="Box Box2">2</div>
  5. <div class="Box Box3">3</div>
  6. <div class="Box Box4">4</div>
  7. </div>

能见度:崩溃

随着可见性:折叠,不渲染弹性项目(与display:none相同),但flex算法检查项目的交叉大小,然后使用该数据保持弹性线稳定(即,交叉大小的大小)如果弹性项目可见,则为line).

与display:none的区别在于,折叠允许保留项目的一个部分 – 其交叉大小.这在规范中称为支柱.

因此,如果线上的所有弹性项都具有可见性:折叠,则线的交叉大小(无论是宽度还是高度)不会折叠,并且布局的其余部分不会受到影响.

请注意,尽管折叠可确保线的交叉尺寸的稳定性,但它不能确保线的主要尺寸.这是崩溃和隐藏之间的关键区别.

以下是一些例子. (如上所述,这些在Chrome中不起作用.在FF或Edge中测试.)

在此示例中,前两个项目具有可见性:折叠.

  1. .container {
  2. display: flex;
  3. flex-wrap: wrap;
  4. width: 200px;
  5. border: 1px dashed black;
  6. }
  7. .Box {
  8. height: 50px;
  9. flex: 0 0 50px;
  10. margin: 5px;
  11. background-color: lightgreen;
  12. display: flex;
  13. justify-content: center;
  14. align-items: center;
  15. }
  16. .Box1,.Box2 {
  17. visibility: collapse;
  18. }
  1. <code>visibility: collapse</code>
  2. <div class="container">
  3. <div class="Box Box1">1</div>
  4. <div class="Box Box2">2</div>
  5. <div class="Box Box3">3</div>
  6. <div class="Box Box4">4</div>
  7. </div>

布局呈现如display:none.第二行折叠,因为项目的主要大小消失,允许最后一项自然向上移动.

在以下示例中,所有项目都可见:崩溃.因此,第二行折叠是因为项目的主要大小消失了,但第一行的交叉大小仍然存在.

  1. .container {
  2. display: flex;
  3. flex-wrap: wrap;
  4. width: 200px;
  5. border: 1px dashed black;
  6. }
  7. .Box {
  8. height: 50px;
  9. flex: 0 0 50px;
  10. margin: 5px;
  11. background-color: lightgreen;
  12. display: flex;
  13. justify-content: center;
  14. align-items: center;
  15. }
  16. .Box {
  17. visibility: collapse;
  18. }
  1. <code>visibility: collapse</code>
  2. <div class="container">
  3. <div class="Box Box1">1</div>
  4. <div class="Box Box2">2</div>
  5. <div class="Box Box3">3</div>
  6. <div class="Box Box4">4</div>
  7. </div>

jsFiddle

猜你在找的CSS相关文章