html 使用绝对元素进入列表项并溢出

tct7dpnv  于 2024-01-04  发布在  其他
关注(0)|答案(3)|浏览(256)

我试图制作一张内部有徽章的卡片,徽章延伸到卡片之外,但是父级内部的所有卡片都应该水平滚动,然而我遇到了一个问题,我的徽章元素隐藏在溢出的后面,这对我来说是个问题
selector .c:abstract badge
选择器。B:抽象卡
selector .a:抽象列表卡
CSS

  1. .a {
  2. width: 150px;
  3. height: 200px;
  4. border: solid 1px silver;
  5. margin: 200px;
  6. /* important */
  7. display: flex;
  8. overflow-x: scroll;
  9. }
  10. .b {
  11. width: 100px;
  12. height: 100px;
  13. border: 1px solid blue;
  14. /* important */
  15. position: relative;
  16. }
  17. .c {
  18. width: 100px;
  19. height: 100px;
  20. border: solid 1px red;
  21. margin-top:-50px;
  22. /* important */
  23. position: absolute;
  24. }

字符串
HTML

  1. <div class="a">
  2. <div class="b">
  3. <div class="c"></div>
  4. </div>
  5. <div class="b">
  6. <div class="c"></div>
  7. </div>
  8. </div>


当我为一个有溢出的列表做填充时,我解决了这个问题,但是这在布局中产生了另一个问题,所以我不得不放弃这个解决方案
例如(这不是我的解决方案)

  1. .a {
  2. width: 150px;
  3. height: 200px;
  4. border: solid 1px silver;
  5. margin: 200px;
  6. /* important */
  7. display: flex;
  8. overflow-x: scroll;
  9. padding-top: 50px;
  10. }

  1. .a {
  2. width: 150px;
  3. height: 200px;
  4. border: solid 1px silver;
  5. margin: 200px;
  6. /* important */
  7. display: flex;
  8. overflow-x: scroll;
  9. }
  10. .b {
  11. width: 100px;
  12. height: 100px;
  13. border: 1px solid blue;
  14. /* important */
  15. position: relative;
  16. }
  17. .c {
  18. width: 100px;
  19. height: 100px;
  20. border: solid 1px red;
  21. margin-top: -50px;
  22. /* important */
  23. position: absolute;
  24. }
  1. <div class="a">
  2. <div class="b">
  3. card
  4. <div class="c">badge</div>
  5. </div>
  6. <div class="b">
  7. card
  8. <div class="c">badge</div>
  9. </div>
  10. </div>
ocebsuys

ocebsuys1#

也许这可以给你一个起点。我没有“直接”回答这个问题,但更多的是做了我认为你在追求的事情。
我将容器 Package 在一个div中,并给它一个浅绿色的边框,只是为了在窗口中“超级居中”。我还在主体中添加了一个100vh,并将我的新容器超级居中-所以不需要神奇的大边距,只需要让if在窗口的中心流动。
我为你的元素创建了一些网格,并使用你的大小来放置内容;我转换为em,因此基于常见的浏览器默认设置,我将字体大小设置为16 px,因此100px转换为100/16或6.25em,然后我给了卡片一些行/列-创建更多的行和列,因为你认为合适,以便在你想要的地方获得徽章和卡片标签;然后扩展行/列的数量,并将它们放置在其中以捕获您所需的布局。使用这种类型的技术,我发现我很少使用任何“位置”,如绝对等。这些天。

  1. * {
  2. font-size: 16px;
  3. box-sizing: border-box;
  4. margin: 0;
  5. padding: 0;
  6. }
  7. body {
  8. display: grid;
  9. place-items: center;
  10. height: 100vh;
  11. }
  12. .base-container {
  13. display: grid;
  14. place-items: center;
  15. border: solid #00ff0040 2px;
  16. padding: 0.25em;
  17. }
  18. .scroll-container {
  19. width: 10em;
  20. height: 12.5em;
  21. border: solid 1px silver;
  22. display: flex;
  23. column-gap: 0.5em;
  24. overflow-x: scroll;
  25. }
  26. .card-container {
  27. display: grid;
  28. grid-template-rows: 1fr;
  29. column-gap: 1em;
  30. grid-template-columns: 9.375em;
  31. grid-template-areas: "card";
  32. }
  33. .b-card {
  34. grid-area: card;
  35. display: grid;
  36. grid-template-rows: 3.125em 1fr;
  37. grid-template-columns: 3.125em 6.25em;
  38. grid-template-areas: ". cardlabel" "badge cardlabel";
  39. border: 1px solid blue;
  40. display: grid;
  41. grid-template-rows:
  42. }
  43. .card-badge {
  44. grid-area: badge;
  45. border: solid 1px red;
  46. }
  47. .card-label {
  48. grid-area: cardlabel;
  49. border: solid 1px #00ffff;
  50. }

个字符

展开查看全部
gjmwrych

gjmwrych2#

我设法想出了一个解决方案,它看起来不漂亮,但它适合我的需要。显然溢出:scroll对定位一点也不友好,并且不允许可视地显示超出根元素高度的元素(在这个例子中,它是一张卡片),但是如果你尝试使用负值来定位元素,那么一切都会正常,因为该元素没有绝对位置设置,并且具有其自身的高度,滚动容器被强制调整到该高度

  1. <style>
  2. .container {
  3. display: flex;
  4. width: 400px;
  5. border: 1px solid red;
  6. padding: 5px;
  7. overflow-x: scroll;
  8. }
  9. .card {
  10. width: 250px;
  11. height: 200px;
  12. border: 1px solid blue;
  13. }
  14. .badge {
  15. margin: auto;
  16. border: 1px solid green;
  17. width: 100px;
  18. height: 50px;
  19. margin-bottom: -25px;
  20. }
  21. </style>

个字符

展开查看全部
jhkqcmku

jhkqcmku3#

您可以使用z-index属性来控制元素的堆叠顺序。为badge(.c class)设置一个更高的z-index值,以便它显示在溢出的内容之上。此外,请确保父容器(.a class)具有position:relative属性,因为z-index仅对定位的元素有效。

  1. .a {
  2. width: 150px;
  3. height: 200px;
  4. border: solid 1px silver;
  5. margin: 200px;
  6. /* important */
  7. display: flex;
  8. overflow-x: scroll;
  9. position: relative; /* Make sure to add this line */
  10. }
  11. .b {
  12. width: 100px;
  13. height: 100px;
  14. border: 1px solid blue;
  15. /* important */
  16. position: relative;
  17. }
  18. .c {
  19. width: 100px;
  20. height: 100px;
  21. border: solid 1px red;
  22. margin-top: -50px;
  23. /* important */
  24. position: absolute;
  25. z-index: 1; /* Add this line to control the stacking order */
  26. }

字符串

展开查看全部

相关问题