【问题标题】:CSS - position relative/absolute to a text inline elementCSS - 相对于/绝对定位到文本内联元素
【发布时间】:2021-01-26 08:47:18
【问题描述】:

我有一个带有下拉选项卡的导航栏菜单。文本是动态填充的。我需要以任何给定的视口大小将插入符号图标定位在文本旁边。这也是我所指的(见绿色插入符号)

下面是代码

* {
  box-sizing: border-box;
}
body {
  margin-top: 70px;
  font-family: Arial;
  font-size: 30px;
}
.nav-wrapper {
  width: 100%;
  background-color: pink;
  height: 150px;
  display: flex;
}
.filler-left {
  // margin-right: auto;
  flex: 2;
  background-color: brown;
}
.filler-right {
  background-color: black;
  width: 600px;
}
.menu-wrapper {
  background-color: lightblue;
  display: flex;
  justify-content: flex-end;
}
.menu-btn {
  text-align:center;
  background-color: orange;
  border: 1px solid red;
  display: flex;
  align-items: center;
}
.text {
  border: 1px solid blue;
}

.caret {
  min-width: 25px;
}
<div class="nav-wrapper">
  <div class="filler-left">
    <img src="https://via.placeholder.com/150"/>
  </div>
  <div class="menu-wrapper">
    <div class="menu-btn">
      <span class="text">lo netrunner</span>
      <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
    </div>
     <div class="menu-btn">
       <span class="text">Planes of Salads & Greatness</span>
      <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
    </div>
     <div class="menu-btn">
       <span class="text">Formulas & Computations</span>
      <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
    </div>
  </div>
  <div class="filler-right">
  </div>
</div>

Codepen 参考,如果这使它更容易调试,但它与上面的代码 sn-p 相同: https://codepen.io/vincentntang/pen/f44a23aa2b2de633e3d2dffa1e83c0b9

文本的宽度不是基于任何填充,而是作为 HTML 文本标准的一部分的第二行第一个单词的长度

我尝试过的事情:

  • 我尝试在内联文本上使用position: relative,在插入符号图像上使用position:absolute,但这没有成功
  • 我已经尝试使用width: fit-content 对抗text 类元素,但是对于所有视口大小,将“Planes of Salads & Greatness”的文本放在 3 行而不是 2 行。在较大的视口中,我只需要一条线

【问题讨论】:

    标签: javascript html css flexbox


    【解决方案1】:

    你可以

    • .text 应用display: inline-block; 和侧边距,为.caret 创建空间
    • position: relative; 应用于.menu-btn,使其成为.caret 元素的位置参考,
    • position: absolute 应用到.caret,添加right 设置以设置到右边框的距离,并添加top: 50%transform: translateY(-50%) 以正确定位它

    根据需要更改 rightpadding 和 - 如果需要)margin 设置...

    * {
      box-sizing: border-box;
    }
    body {
      margin-top: 70px;
      font-family: Arial;
      font-size: 30px;
    }
    .nav-wrapper {
      width: 100%;
      background-color: pink;
      height: 150px;
      display: flex;
    }
    .filler-left {
      // margin-right: auto;
      flex: 2;
      background-color: brown;
    }
    .filler-right {
      background-color: black;
      width: 600px;
    }
    .menu-wrapper {
      background-color: lightblue;
      display: flex;
      justify-content: flex-end;
    }
    .menu-btn {
      text-align:center;
      background-color: orange;
      border: 1px solid red;
      display: flex;
      align-items: center;
      position: relative;
      
    }
    .text {
      border: 1px solid blue;
      display: inline-block;
      padding: 0 1em;
      margin: 0 10px;
    }
    
    .caret {
      min-width: 25px;
      position: absolute;
      right: 15px;
      top: 50%;
      transform: translateY(-50%);
    }
    <div class="nav-wrapper">
      <div class="filler-left">
        <img src="https://via.placeholder.com/150"/>
      </div>
      <div class="menu-wrapper">
        <div class="menu-btn">
          <span class="text">lo netrunner</span>
          <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
        </div>
         <div class="menu-btn">
           <span class="text">Planes of Salads & Greatness</span>
          <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
        </div>
         <div class="menu-btn">
           <span class="text">Formulas & Computations</span>
          <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
        </div>
      </div>
      <div class="filler-right">
      </div>
    </div>

    【讨论】:

      【解决方案2】:

      caret 图像放入其相关的span 元素中,并赋予span 元素与上述父元素相同的弹性属性。

      * {
        box-sizing: border-box;
      }
      body {
        margin-top: 70px;
        font-family: Arial;
        font-size: 30px;
      }
      .nav-wrapper {
        width: 100%;
        background-color: pink;
        height: 150px;
        display: flex;
      }
      .filler-left {
        // margin-right: auto;
        flex: 2;
        background-color: brown;
      }
      .filler-right {
        background-color: black;
        width: 600px;
      }
      .menu-wrapper {
        background-color: lightblue;
        display: flex;
        justify-content: flex-end;
      }
      .menu-btn {
        text-align:center;
        background-color: orange;
        border: 1px solid red;
        display: flex;
        align-items: center;
      }
      .text {
        border: 1px solid blue;
        display: inherit;
        align-items: inherit;
      }
      
      .caret {
        min-width: 25px;
      }
      <div class="nav-wrapper">
        <div class="filler-left">
          <img src="https://via.placeholder.com/150"/>
        </div>
        <div class="menu-wrapper">
          <div class="menu-btn">
            <span class="text">
              lo netrunner
              <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
            </span>
          </div>
           <div class="menu-btn">
             <span class="text">
               Planes of Salads & Greatness
               <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
             </span>
          </div>
           <div class="menu-btn">
             <span class="text">
               Formulas & Computations 
               <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
             </span>
          </div>
        </div>
        <div class="filler-right">
        </div>
      </div>

      【讨论】:

        【解决方案3】:

        尝试将插入符号放在 span 中。让我知道这是否有效

        HTML:

        <div class="menu-btn">
              <span class="text">Formulas & Computations</span>
              <span>
                   <img class="caret" src="https://assets.codepen.io/867725/Icon_Caret.svg" />
              </span>
        </div>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-09
          • 2012-07-21
          • 1970-01-01
          • 2019-06-22
          • 1970-01-01
          • 2018-07-09
          • 1970-01-01
          • 2020-07-01
          相关资源
          最近更新 更多