【问题标题】:Setting the thickness of an underline (text decoration) in JavaScript在 JavaScript 中设置下划线(文本装饰)的粗细
【发布时间】:2016-01-17 05:46:42
【问题描述】:

我正在尝试找出如何在 JavaScript 中设置下划线的粗细(当光标悬停时发生的文本装饰)。目前文本变成了这样的下划线:

x.style.textDecoration = "underline";

以及“onmouseout”,如下所示:

x.style.textDecoration = "none";

到目前为止,我在网上看到的所有建议都与格式化标签的底部边框有关。我不是试图格式化菜单栏或任何其他元素,而是普通的超链接。我已经在各种浏览器中尝试过,默认下划线在 Firefox 中看起来不错,但在 Chrome 中,这条线很细,与它下划线的粗体文本形成对比。

非常感谢任何有关如何解决此问题的建议。

【问题讨论】:

  • 这可以使用 CSS 轻松完成吗?
  • 我必须在这里添加一个注释——移动设备不会GET悬停事件或鼠标悬停。移动用户需要知道某些东西是可触摸/可点击的。去吧,继续做你的下划线美学,让它一直在那里。

标签: javascript underline text-decorations


【解决方案1】:

CSS :hover 应该用于此类任务

.x{
    /* default styles here */
}

.x:hover {
    /* HOVER default styles here */
}

如果您希望能够控制“下划线”的粗细
请改用border-bottombox-shadow inset.

整个填充锚的边框

.x{
  display:         inline-block;
  color:           magenta;
  background:      #ddd;
  padding:         15px 15px 10px;
  text-decoration: none;
  border-bottom:   5px solid transparent;
  transition:      border-bottom 0.3s;
}

.x:hover{
  border-bottom-color: magenta;
}
<a class="x" href="#">Link 1</a>
<a class="x" href="#">Link 1</a>
<a class="x" href="#">Link 1</a>

仅使用内部 &lt;span&gt;inset box-shadow 在 Anchor 的文本上

.x{
  display:         inline-block;
  color:           magenta;
  background:      #ddd;
  padding:         15px 15px 10px;
  text-decoration: none;
}

.x span{
  transition:      0.3s;
  box-shadow: inset 0 -2px 0 0 trasparent;
}

.x:hover span{
  box-shadow: inset 0 -2px 0 0 magenta;
}
<a class="x" href="#"><span>Link 1</span></a>
<a class="x" href="#"><span>Link 1</span></a>
<a class="x" href="#"><span>Link 1</span></a>

使用:after 伪进行更多控制

.x{
  position:        relative;
  color:           magenta;
  text-decoration: none;
}

.x:hover:after{
  content:    "";
  position:   absolute;
  left:       0;
  bottom:     -3px;      /* Control bottom position */
  width:      100%;
  height:     5px;       /* Set your desired thickness */
  background: magenta;
}
<a class="x" href="#">Link 1</a>
<a class="x" href="#">Link 1</a>
<a class="x" href="#">Link 1</a>

【讨论】:

  • 但边框底部没有下划线:不在同一个偏移量
  • @Kaiido same offset 到底是什么设计?
  • underline 将在文本的基线上画一条线。 border-bottom 将在框的底部画一条线。保持默认的text-decoration,你会明白我的意思
  • @Kaiido 如果您的设计暗示使用填充的a 标签,那么从逻辑上讲,您会将文本包装在内联&lt;span&gt; 中 - 并操纵该跨度的边框。
  • 我不确定我得到了你,我也不确定你得到了我。我不是在谈论填充,而是关于默认偏移量。如果您有解决方案将边框底部设置为与下划线相同的行高,请将其添加到您的答案中,我很乐意为您的答案投票。
【解决方案2】:

尝试使用css:after伪元素,:hoverfont-family设置为block;调整font-size改变线条粗细,调整top改变元素文本对应的线条位置

div {
  width:24px;
}

div:after {
  position:absolute;
  top:-24px;
  content:"_";
  width:0px;
  color:#000;
  display:none;
  font-weight:bold;
  font-family:block;
  font-size:48px;
}

div:hover:after  {
   cursor:pointer;
   display:block;
}
&lt;div&gt;abc&lt;/div&gt;

【讨论】:

    【解决方案3】:

    如果要使用 JavaScript 来更新border-bottom 样式属性,可以使用:

    someTag.style.borderBottom="3px solid blue";
    

    注意 CSS border-bottom 在 JavaScript 中是 borderBottom

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 2011-10-23
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多