Для решения вышеизложенного необходимо немного изменить свою стратегию.Вместо того, чтобы иметь компонент ActiveTabBorder
, который принимает ref и отображает результат на основе позиции элементов, мы добавляем стиль для границы внутри самого TabTitleItem
с псевдоэлементом :after
и стилизуем его немного по-другому, используя display: flex
Ваши стилизованные компоненты будут выглядеть следующим образом
export const ListTabs = styled.ul`
padding-left: 0;
list-style: none;
margin: 0;
display: flex;
justify-content: center;
`;
export const TabTitleItem = styled.li`
position: relative;
transition: all 800ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
padding: 16px 30px;
cursor: pointer;
opacity: 0.4;
display: flex;
flex-direction: column;
align-items: center;
${props =>
props.isActiveTab &&
`
transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
cursor: default;
opacity: 1;
&:after {
content: '';
height: 5px;
background-color: blue;
position: absolute;
bottom: 0;
transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
width: 100%;
}
`}
`;
Рабочая демонстрация