微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何防止这个子元素继承hover css?

如何解决如何防止这个子元素继承hover css?

我正在自定义 video.js,并且我已将子元素添加到 LoadProgressBar 以显示注释。 相关输出的HTML如下:

<div class="vjs-progress-control vjs-control">
    <div tabindex="0" class="vjs-progress-holder vjs-slider vjs-slider-horizontal" role="slider" aria-valueNow="0.00" aria-valuemin="0" aria-valuemax="100" aria-label="Progress Bar" aria-valuetext="0:00 of 0:30">
        <div class="vjs-load-progress" style="width: 100%;">
             <div class="vjs-fs-note vjs-control vjs-button" tabindex="0" role="button" aria-disabled="false" style="margin-left:49%">
                 <span aria-hidden="true" class="vjs-icon-placeholder"></span>
                 <span class="vjs-control-text" aria-live="polite"></span>
                 <div class="vjs-fs-note-text-container-above">        
                    <span>Adding a test note</span>
                 </div>
             </div>

我已经成功地使用以下 css 规则设置了 vjs-fs-note-text-container-above 的样式:

.vjs-matrix.video-js .vjs-progress-holder .vjs-load-progress div.vjs-fs-note > div.vjs-fs-note-text-container-above {
    background-color: white;
    z-index: 20;
    min-width: 100px;
    width: fit-content;
    border: 1px solid #aaa;
    border-radius: 5px;
    position: relative;
    top:-80px;
    height: fit-content;
    padding: 7px;
    color: black;
}

.vjs-matrix 是我的自定义 css 文件,这是自定义 video.js 的推荐方式。

问题是认视频 js 有一个样式定义,它增加了悬停进度控件的大小:

// This increases the size of the progress holder so there is an increased
// hit area for clicks/touches.
.video-js .vjs-progress-control:hover .vjs-progress-holder {
  font-size: 1.666666666666666666em;
}

https://github.com/videojs/video.js/blob/main/src/css/components/_progress.scss#L46

这最终增加了我添加 .vjs-fs-note-text-container-above 的子元素的大小。

Gif of actual issue

如何停止将样式应用到悬停时的笔记?

我尝试了以下方法

.vjs-matrix.video-js .vjs-progress-holder .vjs-load-progress div.vjs-fs-note > div.vjs-fs-note-text-container-above:hover { font-size:1em !important; }

然而这并没有改变任何东西。

更新:

1em 和 1rem 都不起作用.. 我也尝试过使用 !important 关键字。

我想我的问题是选择器应该是什么,以便我能够在悬停时覆盖规则..?

我也试过:

.vjs-matrix.video-js .vjs-progress-holder:hover .vjs-load-progress div.vjs-fs-note > div.vjs-fs-note-text-container-above { font-size:1em/rem !important; }

解决方法

对于大多数浏览器和 HTML 元素,font-size 值默认设置为 inherit。这意味着所有子元素的 font-size 值都将被其父元素继承,然后向下级联。如果您不希望它级联,则需要设置子元素的 font-size

如果您的子元素是 .vjs-fs-note-text-container-above,将 font-size 设置为 1rempx(或任何您想要的)将解决问题。

,

我建议您尝试使用 rem 单元来解决您的问题。

em 是一个相对单位...(阅读:百分比)。它是相对于继承的值(读取:从父级)。

所以它最终可能是所有父母的累计百分比......

此外,将 1em 设置为继承了某些父元素百分比的元素将无济于事。这就像在说“我希望字体大小是实际大小的 100%”。

rem 是相对于“根”值的单位。

见下文!

div{
  border: 1px solid black;
  margin: 20px;
}
p{
  margin: 0;
}
#grandparent{
  font-size:2em;
}
#parent{
  font-size:2em;
}
#element1{
  font-size: 1rem; /* Notice the effect of that one */
}
#element2{
  font-size: 1em; /* versus that one */
}
<p>Text</p>
<div id="grandparent">
  <p>Text</p>
  <div id="parent">
    <p>Text</p>
    <div id="element1">
      <p>Text</p>
    </div>
    <div id="element2">
      <p>Text</p>
    </div>
  </div>
</div>

所以...尝试使用 SAME 选择器作为您希望覆盖的选择器 + 添加元素的选择器:

.video-js .vjs-progress-control:hover .vjs-progress-holder .vjs-fs-note-text-container-above{
  font-size: 1rem;
}

这可能也够了……但是您需要在 :hover 之前的选择器部分,因为那是触发器。

.video-js .vjs-progress-control:hover .vjs-fs-note-text-container-above{
  font-size: 1rem;
}
,

以像素为单位指定字体大小解决了该问题。我尝试了 em 和 rem 单位,但问题仍然存在。

List<Record> records = XElement.Parse(xmlString)
    .Descendants("RECORD")
    .Select(x => new Record((int)x.Element("no"),(int)x.Element("Active")))
    .ToList();


public class Record
{
    public readonly int No;
    public readonly int Active;

    public Record(int no,int active)
    {
        this.No = no;
        this.Active = active;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。