【问题标题】:Setting the text width on dynamically动态设置文本宽度
【发布时间】:2022-01-06 11:39:22
【问题描述】:

我创建了一个选项卡组件,我无法实现的一个部分是,我只需要设置文本宽度,而不是 TabIndicator 来完全占用选项卡容器的长度。

由于每个文本都有不同的宽度,所以我使用 js 来计算它,但不是获取宽度,而是获取容器宽度。

如何使活动的 TabIndicator 行仅从文本开头扩展到文本结尾。

我能够实现容器宽度。为其添加沙盒链接。

Sandbox

【问题讨论】:

    标签: javascript css reactjs


    【解决方案1】:

    这很简单。在计算指标的开始和宽度时,您需要减去额外的填充。
    .tab 有 6px 水平边距
    .tab-default-container 在桌面上有 1rem 填充,它是 16px
    。 所以更改代码如下:

    if (tabMeta && tabsMeta) {
     startValue = tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft + 22; //16+6=22
    }
    
    //22 from both sides = 44px tor remove.
    const newIndicatorStyle = {
       left: startValue,
       width: tabMeta ? tabMeta.width - 44 : 0
    };
    

    更新了sandbox
    注意:您使用了相对单位rem,它可能在不同的设置和设备上评估不同,它可能不是 1rem=16px。

    rem(代表“root em”)是文档根元素的字体大小。

    考虑到这一点,计算也是如此。

    【讨论】:

    • 谢谢,只是一个疑问,如果我需要动态计算,我应该怎么做?
    • 我认为应该这样做:stackoverflow.com/a/42769683/15273968
    • 不,我指的是额外的填充部分,截至目前我们正在减去 - 44,我如何在我尝试过的沙箱中使用 js 获得这个,我能够获得容器宽度不是确切的文本宽度
    • 对我来说,这些更改有效 startValue = tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft + 16; , 宽度: tabMeta ? tabMeta.width - 32 : 0,
    • window.getComputedStyle(tab.children[0]).paddingLeft 给出16px 字符串。解析为float/integer后就可以使用了。
    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 2020-10-29
    • 2012-08-21
    • 2012-03-18
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多