为什么在带有 checked 的类上设置转换完全没有效果?

Why does setting a transition on a class with checked have absolutely no effect?

提问人:Stefan Steiger 提问时间:10/24/2023 更新时间:10/24/2023 访问量:26

问:

我尝试创建无 JavaScript 的选项卡。
这奏效了,但现在我想像在 https://web.dev/articles/building/a-tabs-component 上一样进行 CSS 过渡

在那里,它做到了

scroll-behavior: smooth;

我只想以不透明的方式淡入和淡出选项卡。
但这行不通,我不知道为什么。
怎么了?
我不太明白为什么这不起作用,因此,我无法修复它。

我尝试在不透明度、显示、有或没有易进/不移出时设置过渡,它根本没有改变......

我也试过了,但也没有效果。scroll-behavior: smooth;

有关完整示例,请参阅我的 codepen 代码段:https://codepen.io/u155077/pen/oNmgLgM

注意:
这是关于CSS样式的。
请保持它 100% 没有 JavaScript。

    .rbTab
    {
        display: none;
        opacity: 0;
        transition: opacity 5s, display 1s;
    }




   .ContentTab
    {
        display: none;
        width: 630px;
        height: 180px;
        background-color: #FFFFFF;
    }
    
    
    .TitleTab
    {
        width: 630px;
        overflow-x: auto;
        display: block;
        white-space: nowrap;
        /*background-color: #E5E5E5;*/
    }


    .rbTab
    {
        display: none;
        opacity: 0;

    }
    
    
    .rbTab1:checked ~ .ContentTab1
    {
        display: block;
        opacity: 1;


        -webkit-transition: display 2s ease-in;
        -moz-transition: display 2s ease-in;
        -o-transition: display 2s ease-in;
        transition: display 2s ease-in;
    }
    
    .rbTab2:checked ~ .ContentTab2
    {
        display: block;
        opacity: 1;


        -webkit-transition: display 2s ease-in;
        -moz-transition: display 2s ease-in;
        -o-transition: display 2s ease-in;
        transition: display 2s ease-in;
    }


    .rbTab3:checked ~ .ContentTab3
    {
        display: block;
        opacity: 1;
    }


    .rbTab4:checked ~ .ContentTab4
    {
        display: block;
        opacity: 1;
    }


    .rbTab5:checked ~ .ContentTab5
    {
        display: block;
        opacity: 1;
    }


    .rbTab6:checked ~ .ContentTab6
    {
        display: block;
        opacity: 1;
    }
CSS 选项卡 CSS 过渡

评论


答:

1赞 untbu 10/24/2023 #1

当元素的位置不同时,您无法按照所需的方式对元素的不透明度进行动画处理。您正在做的就像删除旧元素并添加新元素一样。

您可以将所有 Tab 放在一个 div 容器中,设置容器的大小,将选项卡更改为 ,从类中删除并将过渡添加到类中。position: absolute;display: none;ContentTabContentTab

我修改了你的例子:https://codepen.io/untbu/pen/zYexoGv