搜尋

首頁  >  問答  >  主體

如何使用具有圓角背景的文字覆蓋圖像

<p>我需要在 HTML 中複製您在此圖片中看到的內容:</p> <p>問題是文字覆蓋了 div 和背景圖像。如果外部 div 中沒有圖像並且沒有純色,我可以想像我可以相當輕鬆地使用一些帶有圓角的小 html 元素放置在正確的位置來完成此操作,但是背景圖像是什麼增加了複雜性。 </p> <p>到目前為止,我有這個...如你所見,我被困在兩個圓角上。誰能提出解決方案?請注意,它必須在<strong>所有現代瀏覽器</strong>中工作:</p> <p> <pre class="brush:css;toolbar:false;">#outer { width:100%; height:400px; border-radius:20px; background-image:url(https://media.istockphoto.com/id/1323032473/es/vector/panal-abstracto-de-vector-azul-moderno-con-fondo-de-monitor-de-corazón-con- para-la.jpg?s=2048x2048&w=is&k=20&c=mXe4wSHc8kAcOXastbN9jhinrWGQX3vvJQUhDgvOcqA=); position:relative; } #innertext { display:inline; border-top-right-radius:20px; background-color:#fff; padding:5px 25px 0px 5px; font-size:40px; color:#000; position:absolute; bottom:0px; }</pre> <pre class="brush:html;toolbar:false;"><div id="outer"> <div id="innertext">A test title<br>that is on two lines</div> </div></pre> </p>
P粉328911308P粉328911308484 天前504

全部回覆(1)我來回復

  • P粉391677921

    P粉3916779212023-08-31 11:49:14

    您需要將 :before:after 新增到 .innertext 元素

    更新:

    要有多行,只需添加一個flex-direction: column 容器,每行都會有:after (右)角,並且只有第一個子元素將有:before (頂部)角

    #outer {
      width: 100%;
      height: 400px;
      border-radius: 20px;
      background-image: url(https://media.istockphoto.com/id/1323032473/es/vector/panal-abstracto-de-vector-azul-moderno-con-fondo-de-monitor-de-coraz%C3%B3n-con-para-la.jpg?s=2048x2048&w=is&k=20&c=mXe4wSHc8kAcOXastbN9jhinrWGQX3vvJQUhDgvOcqA=);
      position: relative;
    }
    #inner-container {
      display: flex;
      flex-direction: column;
      align-items: flex-start;
      position: absolute;
      bottom: 0px;
    }
    .innertext {
      display: inline;
      position: relative;
      border-top-right-radius: 20px;
      background-color: #fff;
      padding: 5px 25px 0px 5px;
      font-size: 40px;
      color: #000;
    }
    .innertext:first-child::before,
    .innertext::after {
      content: "";
      display: block;
      width: 40px;    /* double the radius */
      height: 40px;   /* double the radius */
      background-color: transparent;
      position: absolute;
      border-bottom-left-radius: 20px;
      box-shadow: 0 20px 0 0 #fff;  /* this to create the inverted corner border radius area, if you desire to change the positon you can control it via the first two values 0 20px which represents the x & y */
    }
    .innertext::before {
      top: -40px;
      left: 0;
    }
    .innertext::after {
      right: -40px;
      bottom: 0;
    }
    .innertext span {
      position: relative;
      z-index: 1;   /* to overcome the overlapping with the text */
    }
    <div id="outer">
      <div id="inner-container">
        <div class="innertext"><span>A test</span></div>
        <div class="innertext"><span>A test with a second line</span></div>
      </div>
    </div>

    回覆
    0
  • 取消回覆