【问题标题】:Clip Path is always overflow:hidden剪辑路径总是溢出:隐藏
【发布时间】:2018-11-02 23:50:47
【问题描述】:

我做了这个例子:

div {
 -webkit-clip-path: polygon(0 0, 100% 0, 85% 100%, 0% 100%);
 clip-path: polygon(0 0, 100% 0, 85% 100%, 0% 100%);
 background-color: red;
 width: 150px;
 height: 150px;
 position: relative;
}
ul{
 position: absolute;
 background-color: green;
 left: 30px;
 top: 50px;
}
<div>
 <ul>
   <li>1</li>
   <li>2</li>
   <li>3</li>
   <li>4</li>
   <li>5</li>
   <li>6</li>
   <li>7</li>
   <li>8</li>
   <li>9</li>
   <li>10</li>
  </ul>
</div>

如您所见,有一个包含 10 个数字的列表,但由于剪辑路径属性,div 行为始终为 overflow: hidden

如何使所有&lt;ul&gt; 可见?

【问题讨论】:

    标签: css clip-path


    【解决方案1】:

    您可以使用:before:after 伪元素

    div {position: relative}
    div * {margin: 0; box-sizing: border-box}
    
    div:after {
      content: "";
      position: absolute;
      -webkit-clip-path: polygon(0 0, 100% 0, 85% 100%, 0% 100%);
      clip-path: polygon(0 0, 100% 0, 85% 100%, 0% 100%);
      background-color: red;
      width: 150px;
      height: 150px;
    }
    
    ul {
      position: absolute;
      background-color: green;
      left: 30px;
      top: 50px;
      z-index: 1;
    }
    <div>
      <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
      </ul>
    </div>

    【讨论】:

      【解决方案2】:

      一个想法是使用背景复制相同的形状并避免clip-path的影响:

      div {
        background:
           linear-gradient(to top left,transparent 49%,red 50%) right/15% 100%,
           linear-gradient(red,red) left/85% 100%;
        background-repeat:no-repeat;
        width: 150px;
        height: 150px;
        position: relative;
      }
      ul{
        position: absolute;
        background-color: green;
        left: 30px;
        top: 50px;
      }
      <div>
        <ul>
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
          <li>6</li>
          <li>7</li>
          <li>8</li>
          <li>9</li>
          <li>10</li>
        </ul>
      </div>

      更新

      如果你想要一张图片,你可以试试这个

      div {
        background:
          linear-gradient(to bottom right,transparent 50%,#fff 51%) right/15% 100%,
          url(https://picsum.photos/2000/1000?image=1069) center/cover;
        background-repeat:no-repeat;
        width: 150px;
        height: 150px;
        position: relative;
      }
      ul{
        position: absolute;
        background-color: green;
        left: 30px;
        top: 50px;
      }
      <div>
        <ul>
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
          <li>6</li>
          <li>7</li>
          <li>8</li>
          <li>9</li>
          <li>10</li>
        </ul>
      </div>

      您还可以更新clip-path 以使用比100% 更大的值

      div {
        background:url(https://picsum.photos/2000/1000?image=1069) center/cover no-repeat;
        clip-path: polygon(0 0, 100% 0, 85% 100%,85% 1000%,0% 1000%,0% 100%);
        width: 150px;
        height: 150px;
        position: relative;
      }
      ul{
        position: absolute;
        background-color: green;
        left: 30px;
        top: 50px;
      }
      <div>
        <ul>
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
          <li>6</li>
          <li>7</li>
          <li>8</li>
          <li>9</li>
          <li>10</li>
        </ul>
      </div>

      【讨论】:

      • nice.....如何用图像更改红色?这个兼容ie11吗?
      • @Michalis 更新了图像 ;) 是的,它是兼容的 .. 它比剪辑路径更受支持,因为它依赖于背景
      猜你喜欢
      • 2021-11-30
      • 2020-10-06
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多