【问题标题】:Why is there a border around modal box header?为什么模态框标题周围有边框?
【发布时间】:2021-04-29 03:25:13
【问题描述】:

出现在最新版本的 chrome 中 - 我错过了什么吗?我看不出这个边界的原因;它出现在元素的上方、左侧和最突出的右侧:

Fiddle

.header {
  width: 100%;
  background-color: #FFBF76;
  text-align: center;
  outline: none;
}

.modal {
  position: absolute;
  left: 50%;
  top: 50%;
  transform-style: preserve-3d;
  transform: translate(-50%, -50%) translate3d(0, 0, 0);
  border: 3px solid #FFBF76;
  background: #FFF1BD;
  overflow: auto;
  border-radius: 0px;
  outline: none;
}

.modalBackground {
  position: fixed;
  inset: 0px;
  background-color: #00000066;
}
<div class="modalBackground">
  <div class="modal">
    <div class="header">
      My Header
    </div>
    <div>
      some content
    </div>
  </div>
</div>

编辑

尝试应用这两个建议,但效果有限。即使使用基于 flex 的新方法 (fiddle),结果也是一样的。

【问题讨论】:

  • 我没有在小提琴中看到这个问题..?
  • 浏览器/版本?也许是 Chrome 特定问题

标签: css


【解决方案1】:

您设置了一些无效/不必要的属性,让浏览器对其进行解释,这些属性可能会相应地呈现不同,例如 border-radius 将是 0 而不是 pxinset 不适用于固定位置元素,十六进制 color 只有 6 位数字(如果你想要一个不透明度的 alpha 通道,请改用 rgba)等。

无论如何,对您的示例进行了一些编辑,您应该不会再看到该问题,希望对您有所帮助。干杯!

.header {
  background-color: #FFBF76;
  text-align: center;
  margin: -1px; /* ensure no resize space */
}
.modal {
  border: 3px solid #FFBF76;
  background: #FFF1BD;
}
.modalBackground {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #000066;
}
<div class="modalBackground">
  <div class="modal">
    <div class="header">
      My Header
    </div>
    <div>
    some content
    </div>
  </div>
</div>
<!-- <asd></asd> = not a valid element -->

【讨论】:

  • 是的,它主要是从我使用的内容中复制/粘贴的;这没有回答“为什么有边界”而是“我怎么能没有边界”,但我认为前者只是“与 chrome 中的变换相关的错误”。
  • 我试过这个,但没有成功 - 我认为这是由于转换,但使用您的代码版本(编辑为原始问题)似乎仍然是一个问题。即使在 SO 中执行你的 sn-p 也可以重现问题,尽管它需要放大。我注意到调整窗口大小也会导致问题来来去去......
  • @Rollie 我没有测试调整大小,请参阅更新 sn-p,添加了一个简单的负 1px 边距,以确保调整大小不会分阶段。干杯
  • 可悲的是,它似乎只是向左移动 - 仍然在右侧留下背景颜色
  • @Rollie 只是增加负边距。当使用浏览器缩放来放大你的元素时,你会经常注意到渲染缺陷。尽管¯_(ツ)_/¯
【解决方案2】:

问题是模态类上的transform: translate(-50%,-50%) translate3d(0,0,0);。为什么不为您的模态使用弹性显示?您不必依靠定位和变换技巧来使元素居中。

body {
  margin: auto;
}

.header {
  width: 100%; /* <-- removed, already a block level element */
  background-color: #FFBF76;
  text-align: center;
  outline: none;
}
.modal {
  /* position: absolute; <-- removed */
  /* left: 50%; <-- removed */
  /* top: 50%; <-- removed */
  /* transform-style: preserve-3d; <-- removed */
  /* transform: translate(-50%,-50%) translate3d(0,0,0); <-- removed */
  border: 3px solid #FFBF76;
  background: #FFF1BD;
  overflow: auto;
  /* border-radius: 0px; <-- no need to specify 0px, is by default */
  outline: none;
}
.modalBackground {
  /* position: fixed; <-- removed */
  display: flex; /* <-- added */
  justify-content: center; /* <-- added */
  align-items: center; /* <-- added */
  width: 100vw; /* <-- added */
  height: 100vh; /* <-- added */
  /* inset: 0px; <-- removed */
  background-color: rgba(0, 0, 0, 0.4) /* typo? #00000066*/ 
}
<div class="modalBackground">
  <div class="modal">
    <div class="header">
      My Header
    </div>
    <div>
    some content
    </div>
  </div>
</div>

【讨论】:

  • 为什么要在固定位置的元素上设置视口关系高度/宽度?​​
  • 刚刚使用了许多与“如何在 css 中执行此操作”相关的答案之一,看起来很干净/简单。与其他答案一样,这并没有解释“为什么有边界......”,但提供了一个合理的替代方案。
  • 与您的回答有关 - 'type' 评论是关于什么的?我认为这个值是正确的,不是吗?
  • 由于 CSS 中设置的转换规则,Chrome 中存在“边框”,使用 OP 初始代码将其删除,并亲自查看,至于为什么会导致它,我不是当然。
  • @ChrisW。我最初从 CSS 中删除了它,编辑了我的答案...
猜你喜欢
  • 2014-01-30
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2016-04-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多