【问题标题】:Overflow hidden with border-radius still shows small border用边界半径隐藏的溢出仍然显示小边框
【发布时间】:2020-02-08 22:38:12
【问题描述】:

我试图在图像上创建一个文本叠加层,我想为它添加一个轻微的边框半径。但我注意到,当将border-radius: 5pxoverflow: hidden 添加到父级时,叠加层后面的图像仍然在底角显示其边框的一小部分,就好像它忘记在那里隐藏一条像素化线一样。

(图像右下角的小灰线仍然可见)

.main-info {
  box-shadow: 0px 0px 3px 2px #221b25c7;
  border-radius: 5px;
  font-size: 0.75rem;
  overflow: hidden;
}

.main-info > .img {
  position: relative;
}

.text {
  position: absolute;
  display: flex;
  width: 100%;
  bottom: 0;
  -webkit-box-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  justify-content: space-between;
  -webkit-transition: opacity 0.2s ease-out;
  transition: opacity 0.2s ease-out;
  opacity: 1;
  color: white;
  background-color: rgba(0, 0, 0, 0.65);
  backdrop-filter: blur(3px);
  z-index: 5;
  line-height: 25px;
}

.text > .limit {
  color: white;
  -webkit-box-flex: 1;
  -ms-flex: 1;
  flex: 1;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  position: relative;
  max-width: 100%;
  width: 0;
  padding: 0 0.5rem;
}

.text > .limit {
  text-align: center;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<div class="row m-5">
  <div class="col-8">
    <div class="main-info">
      <div class="img">
        <a href="#">
          <div class="text">
            <div class="limit">Hello World</div>
          </div>
          <img src="https://placehold.it/272x154" style="width: 100%">
        </a>
      </div>
    </div>
  </div>
</div>

我曾想过只为孩子添加边框半径,但结果相同。

【问题讨论】:

    标签: html css


    【解决方案1】:

    实际上我昨天发现了这个gist,这似乎是溢出项目边框问题的奇迹修复:

    -webkit-mask-image: -webkit-radial-gradient(white, black);
    

    【讨论】:

      【解决方案2】:

      您是否尝试添加:“!important”?

      overflow: hidden !important;
      

      还是清空缓存重新加载页面?:

      Crtl + F5
      

      【讨论】:

      • 我倾向于将!important 视为一种作弊模式,用于在开发过程中需要跳过级联和/或特异性。
      【解决方案3】:

      这与其说是一种解决方案,不如说是一种技巧,但如果您覆盖的 5px x 5px 角(大致)是单一颜色,它工作。

      诀窍是绝对定位::before::after 伪元素以覆盖角落边缘,否则会发光。

      工作示例:

      .main-info {
        position: relative;
        box-shadow: 0px 0px 3px 2px #221b25c7;
        border-radius: 5px;
        font-size: 0.75rem;
        overflow: hidden;
      }
      
      .main-info::before,
      .main-info::after {
        content: '';
        position: absolute;
        bottom: 0;
        z-index: 12;
        width: 5px;
        height: 5px;
        background-color: rgb(71, 71, 71);
      }
      
      .main-info::before {
        left: 0;
      }
      
      .main-info::after {
        right: 0;
      }
      
      .main-info > .img {
        position: relative;
      }
      
      .text {
        position: absolute;
        display: flex;
        width: 100%;
        bottom: 0;
        -webkit-box-align: center;
        align-items: center;
        -webkit-box-pack: justify;
        justify-content: space-between;
        -webkit-transition: opacity 0.2s ease-out;
        transition: opacity 0.2s ease-out;
        opacity: 1;
        color: white;
        background-color: rgba(0, 0, 0, 0.65);
        backdrop-filter: blur(3px);
        z-index: 5;
        line-height: 25px;
      }
      
      .text > .limit {
        color: white;
        -webkit-box-flex: 1;
        -ms-flex: 1;
        flex: 1;
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
        position: relative;
        max-width: 100%;
        width: 0;
        padding: 0 0.5rem;
      }
      
      .text > .limit {
        text-align: center;
      }
      <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
      <div class="row m-5">
        <div class="col-8">
          <div class="main-info">
            <div class="img">
              <a href="#">
                <div class="text">
                  <div class="limit">Hello World</div>
                </div>
                <img src="https://placehold.it/272x154" style="width: 100%">
              </a>
            </div>
          </div>
        </div>
      </div>

      【讨论】:

      • 我不能否认它“有效”,但它是一个非常具体的解决方案。文本叠加层的背景具有磨砂玻璃效果,因此当我将占位符替换为随机图像时,这些具有特定颜色的方块不会很有帮助。无论如何,你知道这个问题的真正原因是什么吗?
      • 是的,我认为这可能还不够,因为我们正在处理半透明覆盖。 (正如我所说:与其说是解决方案,不如说是一种技巧)。底线是,如果您的叠加层(或覆盖您的叠加层的任何东西)不是不透明的,那么您将能够看到从下面透出的边缘。
      猜你喜欢
      • 2011-10-06
      • 2021-12-29
      • 1970-01-01
      • 2012-03-24
      • 2012-05-06
      • 2017-02-03
      • 2016-04-20
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多