Макет:
<div style = {{ flex:1 }}>
<div className = "sideBarContainer">
<div className = "sideBar">
<div className = "sideBarExtra"> <--- conditional
</div>
<div className = "content"></div>
</div>
CSS:
.sideBarContainer {
display: flex;
flex-direction: row;
}
.sideBar {
height: 100vh;
min-width: 64px;
z-index: 99;
}
.content {
flex: 1;
transition: width .3s linear;
}
sideBarExtra условно выполняет рендеринг с использованием компонента CSSTransitionGroup группы реагирования.
SideBarExtra будет плавно скользить слева направо при рендеринге и скользить справа налево при удалении.
Div содержимого не переходит плавно при добавлении sideBarExtra, он перескакивает на свои места.
Ожидаемое поведение: для плавного перехода к новой ширине.
В инструментах разработки консоли я вижу изменение ширины содержимого, но анимация перехода не происходит.
Я просто переписал здесь код для удобочитаемости, я не хотел вставлять все компоненты, так как они представляют собой несколько файлов. Код использует className, но я его отредактирую
.sideBarContainer {
display: flex;
flex-direction: row;
width: 100%;
}
.sideBar {
background: red;
height: 100vh;
min-width: 64px;
z-index: 99;
}
.content {
width: 10%;
height: 100vh;
background: yellow;
transition: width .3s linear;
}
.content:hover {
width: 80%;
}
<div style = "display:flex;">
<div class = "sideBarContainer">
<div class = "sideBar">
<div class = "sideBarExtra"> </div>
</div>
<div class = "content">Hover me</div>
</div>
Вы можете изменить момент
.content {
flex: 1;
transition: width: .3s linear;
}
к
.content {
flex: 1;
transition: width .3s linear;
}
переход не принимает никакого двоеточия : здесь приведенный выше код
Ответ 2
Вы также можете установить анимацию для свойства flex здесь, например:
.sideBarContainer {
display: flex;
flex-direction: row;
width: 100%;
}
.sideBar {
background: red;
height: 100vh;
min-width: 64px;
z-index: 99;
flex: 2;
transition: flex .3s linear;
}
.content {
flex: 1;
height: 100vh;
background: yellow;
transition: flex .3s linear;
}
.sideBarContainer:hover .sideBar {
flex: 1;
}
.sideBarContainer:hover .content {
flex: 2 0 auto;
}
<div style = "display:flex;">
<div class = "sideBarContainer">
<div class = "sideBar">
<div class = "sideBarExtra"> </div>
</div>
<div class = "content">Hover me</div>
</div>
вы можете еще раз просмотреть мой ответ, пожалуйста
Мы как-то упускаем из виду, что React.js принимает className вместо class для приема стилей?