文本没有与父元素一起转换,它只是立即弹出

时间:2018-06-11 17:22:39

标签: css reactjs reactstrap

如果服务器响应错误消息,我会弹出一个栏。

例如,如果他们输入了错误的登录凭据,该栏将transition: height 0.5s ease-in,并显示来自服务器的错误消息,说明凭据不正确。

在一些帮助下,我确实让酒吧过渡到了工作。我现在的问题是在转换完成之前的文本渲染,所以它看起来很奇怪。以为它会从父级继承样式,但不会。不识别过渡/动画。

这是我的组件:

renderMessage() {
    const { errors } = this.props;

    if (errors) {
        return (
            <div 
                className={
                    errors
                    ?
                    'hide-error-message show-error-message'
                    :
                    'hide-error-message'
                }
            >
                <i 
                    onClick={ this.closeMessage } 
                    className='float-right fas fa-times'>
                </i>
                <div
                    dangerouslySetInnerHTML={{ __html: errors.non_field_errors[0] }}>
                </div>
            </div>
        );
    }
}

render() {
    const { errors } = this.props;

    return (
        <div id='error-messages'>
            <div 
                className={ 
                    errors 
                    ? 
                    'hide-error-messages-bar show-error-messages-bar' 
                    : 
                    'hide-error-messages-bar' 
                }>
                <Container>{ this.renderMessage() }</Container>
            </div>
        </div>
    )
}

这是Sass的最新版本。尝试了大约20件事:

#error-messages {
    position: relative; 
    top: 105px;
    background-color: $croner-red;        
    color: #FFF;

    .hide-error-messages-bar {
        visibility: hidden;
        height: 0;
        transition: height 0.5s ease-out;        
    }

    .hide-error-messages-bar.show-error-messages-bar {
        visibility: visible;
        transition: height 0.5s ease-in;
        height: 65px;
        width: 100%;

        .hide-error-message {
            opacity: 0;
            height: 0;
            padding: 8px 0;
            transition: opacity 2s ease-in;                        
        }

        .hide-error-message.show-error-message {
            opacity: 1;

            i {
                cursor: pointer;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

切换transform: translateY()的高度转换。由于您的通知栏不在流程中且不会影响任何其他元素,只需在Y访问中上下移动它。你可以保持你的div的高度,这样文本就不会发生变化而且会变得疯狂。

这是一个codepen,使用按钮https://codepen.io/anon/pen/oyZPJQ

切换类
   .hide-error-messages-bar {
        transform: translateY(-100vh);
        transition: transform 0.5s ease-out;        
    }

    .hide-error-messages-bar.show-error-messages-bar {
        transform: translateY(5vh);
        width: 100%;
   }