css – “overflow:hidden”是否改变绝对子女的位置?

前端之家收集整理的这篇文章主要介绍了css – “overflow:hidden”是否改变绝对子女的位置?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个图像库,只能用css将图像滑出.
有关示例或所附代码,请参见 http://codepen.io/anon/pen/xmhzE?editors=110.

只要#images-div没有overflow:hidden set就可以正常工作.当溢出设置为隐藏时,单个图像的绝对定位不再有效.当我对图像的左边属性使用负值时,它也可以与溢出隐藏.

溢出:隐藏改变绝对孩子的布局方式?

有人有解决这个问题的办法吗?

来源

index.html的:

  1. <div id="images">
  2. <img id="image1" src="http://i.imgur.com/dL3io.jpg" />
  3. <img id="image2" src="http://i.imgur.com/qASVX.jpg" />
  4. <img id="image3" src="http://i.imgur.com/fLuHO.jpg" />
  5. <img id="image4" src="http://i.imgur.com/5Sd3Q.jpg" />
  6. </div>
  7. <div id="slider">
  8. <a href="#image1">1</a>
  9. <a href="#image2">2</a>
  10. <a href="#image3">3</a>
  11. <a href="#image4">4</a>
  12. </div>

base.css:

  1. body {
  2. text-align: center;
  3. }
  4. #images {
  5. width: 400px;
  6. height: 250px;
  7. /*overflow: hidden; if this is set absolute positioning of images breaks*/
  8. position: relative;
  9. background-color: red;
  10.  
  11. margin: 20px auto;
  12. }
  13. #images img {
  14. width: 400px;
  15. height: 250px;
  16. display: block;
  17.  
  18. position: absolute;
  19. top: 0px;
  20. left: 400px;
  21. z-index: 1;
  22. opacity: 0;
  23.  
  24. transition: all linear 500ms;
  25. -o-transition: all linear 500ms;
  26. -moz-transition: all linear 500ms;
  27. -webkit-transition: all linear 500ms;
  28. }
  29. #images img:target {
  30. top: 0px;
  31. left: 0px;
  32. z-index: 9;
  33. opacity: 1;
  34. }
  35. #slider a {
  36. text-decoration: none;
  37. background: #E3F1FA;
  38. border: 1px solid #C6E4F2;
  39. padding: 4px 6px;
  40. color: #222;
  41. }
  42. #slider a:hover {
  43. background: #C6E4F2;
  44. }

解决方法

这个难题让我走了我只是不能离开它.
所以昨天晚上,我正在玩弄它,但无法解决它(直到:) :).

测试箱1

虽然简化了我从图像元素中删除了不透明度,只留下了一个图像和一个链接.我最初将图像设置为390px,以便我可以确保它位于该位置(您可以看到左边的一点点).

http://codepen.io/anon/pen/tpCrc

结论:

那么重要的是要注意的是,图像最初是在那里应该是.
然后当点击按钮1时,您可以看到它只是跳过转换.
所以浏览器不会改变元素的位置,因为overflow:hidden(像这个帖子的标题).它进入CSS中提到的位置(在:目标部分),但没有过渡.

测试箱2

然后我想知道浏览器为什么会这样做,我一直在想,也许这个图像元素的重点与它有关.
如果您考虑:点击其中一个按钮时,您可以向页面和浏览器的URL添加#target,然后尝试“滚动”到该元素.为此,这个要素必须是可见的.

所以我想知道:也许CSS与它无关.咱们试试吧:
所以我完全删除了:目标部分和转换.

http://codepen.io/anon/pen/IvfBE

结论:

哇!我们在那里看到什么?当点击其中一个按钮时,图像仍然向左跳:0!
我想我们在那里领先.
尽管如此,我还不知道如何解决这个问题.仍然像我的浏览器错误.

修复

然后 – 在睡梦一夜之后,我醒来了一个全新的想法.
如果我们没有实际定位要转换的元素怎么办?

所以我添加了一个容器到每个图像元素,并以此为目标.

  1. <div id="images">
  2. <div id="img1container"><img id="image1" src="http://i.imgur.com/dL3io.jpg" /></div>
  3. <div id="img2container"><img id="image2" src="http://i.imgur.com/qASVX.jpg" /></div>
  4. <div id="img3container"><img id="image3" src="http://i.imgur.com/fLuHO.jpg" /></div>
  5. <div id="img4container"><img id="image4" src="http://i.imgur.com/5Sd3Q.jpg" /></div>
  6. </div>
  7. <div id="slider">
  8. <a href="#img1container">1</a>
  9. <a href="#img2container">2</a>
  10. <a href="#img3container">3</a>
  11. <a href="#img4container">4</a>
  12. </div>

在CSS中,图像的位置现在必须由“[parentElement]:target img”更改.

  1. body {
  2. text-align: center;
  3. }
  4. #images {
  5. width: 400px;
  6. height: 250px;
  7. overflow: hidden; /* this did break it in the past ;) */
  8. position: relative;
  9. background-color: red;
  10.  
  11. margin: 20px auto;
  12. }
  13. #images img {
  14. width: 400px;
  15. height: 250px;
  16. display: block;
  17.  
  18. position: absolute;
  19. top: 0px;
  20. left: 400px;
  21. z-index: 1;
  22. opacity: 0;
  23.  
  24. transition: all linear 500ms;
  25. -o-transition: all linear 500ms;
  26. -moz-transition: all linear 500ms;
  27. -webkit-transition: all linear 500ms;
  28. }
  29. #images div:target img {
  30. top: 0px;
  31. left: 0px;
  32. z-index: 9;
  33. opacity: 1;
  34. }
  35. #slider a {
  36. text-decoration: none;
  37. background: #E3F1FA;
  38. border: 1px solid #C6E4F2;
  39. padding: 4px 6px;
  40. color: #222;
  41. }
  42. #slider a:hover {
  43. background: #C6E4F2;
  44. }

和工作实例:
http://codepen.io/anon/pen/lyzhi

结论:

好极了!!实际上,不要把焦点放在你想要转换的元素上,它不会破坏.
所以,你已经在那里修复了,但它似乎仍然是一个浏览器/引擎错误.
所以我建议你在某个地方创建一个bug报告(如果你有时间).

BTW:我已经在Chrome和IE中测试了这两个最新版本.您可能需要在Firefox或其他浏览器中进行测试.

猜你在找的CSS相关文章