防止在更改字体粗细时移动文本[重复]

Posted

技术标签:

【中文标题】防止在更改字体粗细时移动文本[重复]【英文标题】:Prevent to move text while changing its font-weight [duplicate] 【发布时间】:2017-04-13 14:19:47 【问题描述】:

我最近一直在研究很酷的设计。其中一项功能的工作方式是在选中复选框时,其字体变为粗体。问题在于,在改变字体粗细的同时,它会稍微移动其他元素。任何想法如何在不定位的情况下用绝对位置标记它。我创建了一个显示问题的片段。

li
  list-style:none;
  display:inline-block;
  margin-right:20px


input[type="checkbox"]:checked + label
font-weight:bold;
<ul>
  <li>
    <input type="checkbox" id="test">
    <label for="test"> My label 1
  </li>
   <li>
    <input type="checkbox" id="test2">
    <label for="test2"> My label 2
  </li>
  <li>
    <input type="checkbox" id="test3">
    <label for="test3"> My label 2
  </li>
</ul>

【问题讨论】:

可能很有帮助 - Inline elements shifting when made bold on hover,这个想法是在 :after 伪元素中为粗体(或任何 :hover 状态样式)内容保留空间,并使用标题标签作为内容源。跨度> 设置渲染文本的元素的宽度。 【参考方案1】:

也许你会尝试引导程序,用它你可以说:

<div class="col-md-4">
 <!--CHECKBOX HERE-->
</div>
<div class="col-md-4">
 <!--CHECKBOX HERE-->
</div>
<div class="col-md-4">
 <!--CHECKBOX HERE-->
</div>

或者你自己做,然后说: html:

    <div class="myClass">
<!--CHECKBOXES HERE-->
    </div>
    <div class="myClass">
<!--CHECKBOXES HERE-->
    </div>
    <div class="myClass">
<!--CHECKBOXES HERE-->
    </div>

css:

.myClass 
width:33.33333%;

希望我能帮到你:)

编辑 你也可以给一个 div 几个类:

<div class="myClass1 myClass2 myClass3">
</div>

因此您不必在每个 css 规则中添加宽度。

【讨论】:

对于这么小的问题,这有点矫枉过正。 是的,你是对的——但是当你习惯了这个过程时,你会发现容易得多【参考方案2】:

您可以为此使用一个小的 CSS Hack。

就像(这将是特定字体):

input[type="checkbox"]:checked + label
  font-weight: bold;
  display: inline-block;
  margin-right: -2.8px; /* cancel the margin on right that is produced */

看看下面的sn-p:

li
  list-style:none;
  display:inline-block;
  margin-right:20px


input[type="checkbox"]:checked + label
  font-weight: bold;
  display: inline-block;
  margin-right: -2.8px;
<ul>
  <li>
    <input type="checkbox" id="test">
    <label for="test"> My label 1</label>
  </li>
   <li>
    <input type="checkbox" id="test2">
    <label for="test2"> My label 2</label>
  </li>
  <li>
    <input type="checkbox" id="test3">
    <label for="test3"> My label 2</label>
  </li>
</ul>

希望这会有所帮助!

【讨论】:

当您希望为用户提供尽可能好的体验时,这可能是最好的解决方案,尽管在更改字体、大小等时很难维护。为努力而投票。 你是如何计算出 -2.8 的值的? @user2277916 这取决于您在模板中使用的字体。这是通过计算“普通文本”与“粗体文本”的宽度之间的差异来完成的。进入上述示例的差异约为。 2.8 像素。我希望这会有所帮助!【参考方案3】:

使用text-shadow 模拟效果:

li 
    list-style:none;
    display:inline-block;
    margin-right:20px


input[type="checkbox"]:checked + label
    text-shadow: 1px 0 0 currentColor;
<ul>
  <li>
    <input type="checkbox" id="test">
    <label for="test"> My label 1
  </li>
   <li>
    <input type="checkbox" id="test2">
    <label for="test2"> My label 2
  </li>
  <li>
    <input type="checkbox" id="test3">
    <label for="test3"> My label 2
  </li>
</ul>

【讨论】:

好主意 - 我喜欢!

以上是关于防止在更改字体粗细时移动文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何更改文本的笔画粗细?

Qt:更改字体粗细

在鼠标悬停时更改按钮字体粗细和/或字体样式[关闭]

约束对象以防止它们在对象更改大小时移动

将字体粗细更改为粗体会无意中改变元素的宽度[重复]

CSS防止较小的字体大小不居中