переход не работает с непрозрачностью

Итак, у меня есть заголовок с двумя кнопками, логином и присоединением, и у меня он есть, чтобы, когда пользователь наводит курсор на одну из кнопок, отбрасывает контейнер с несколькими входами и кнопкой. Я хочу, чтобы раскрывающийся список исчезал с помощью css opacity, но я не могу заставить его работать. Может быть, есть другой способ лучше. Спасибо, а вот и скрипка.

HTML:

<div id="membership_container">
    <div id="login_button">
        <span id="login_text">Login</span>
        <div class="form_containers" id="login_box">
            <div class="form_inner_containers">
                <form action="/login" method="POST">
                    <input class="inputs" placeholder="Email" type="text" name="login_email"/>
                    <input class="inputs" placeholder="Password" type="password" name="login_password"/>
                    <input class="buttons" type="submit" value="Login"/>
                </form>
            </div>
        </div>
    </div><!--
    --><div id="join_button">
        <span id="join_text">Join</span>
        <div class="form_containers" id="join_box">
            <div class="form_inner_containers">
                <form action="/join" method="POST">
                    <input class="inputs" placeholder="Your Name" type="text" name="name"/>
                    <input class="inputs" placeholder="Email" type="text" name="email"/>
                    <input class="inputs" placeholder="Password" type="password" name="password"/>
                    <input class="buttons" type="submit" value="Join"/>
                </form>
            </div>
        </div>
    </div>
</div>

CSS:

#membership_container {
    float: right;
    position: relative;
    vertical-align: top;
    display: inline-block;
    height: 100%;
    margin: 0px;
    padding: 0px;
    background-color: #444444;
    text-align: center;
}
#login_button {
    position: relative;
    vertical-align: top;
    display: inline-block;
    float: left;
    height: 100%;
    margin: 0px;
    padding: 0px 10px;
    background-color: #444444;
    border-left: 2px solid #7B7B7B;
    border-right: 2px solid #7B7B7B;
    cursor: pointer;
    cursor: hand;
}
#login_button:hover {
background-color: #696969;
}
#login_button #login_box {
display: none;
opacity: 0.0;
}
#login_button:hover #login_box {
display: block;
opacity: 1;
}
#login_text {
    position: relative;
    margin: 9px 0px 0px;
    text-align: center;
    color: white;
    display: inline-block;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 13px;
}
#join_button {
    position: relative;
    vertical-align: top;
    display: inline-block;
    float: left;
    height: 100%;
    margin: 0px;
    background-color: #444444;
    padding: 0px 10px;
    border-right: 2px solid #7B7B7B;
    cursor: pointer;
    cursor: hand;
}
#join_button:hover {
background-color: #696969;
}
#join_button:hover #join_box {
display: block;
opacity: 1.0;
}
#join_text {
    position: relative;
    margin: 9px 0px 0px;
    text-align: center;
    color: white;
    display: inline-block;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 13px;
}

.button_blur {
    background-color: #444444;
}
.button_blur:hover {
    background-color: #696969;
}
.button_focus {
    background-color: #696969;
}
.form_containers {
    z-index: 10;
    position: absolute;
    display: none;
    opacity: 0.0;
    border: 5px solid #888888;
    border-radius: 10px 0px 10px 10px;
    background-color: #F1F1F1;
    -o-transition: opacity .8s linear;
    -ms-transition: opacity .8s linear;
    -moz-transition: opacity .8s linear;
    -webkit-transition: opacity .8s linear;
    transition: opacity .8s linear;
}
#login_box {
    top: 35px;
    right: -2px;
    /*left: -115px;*/
}
#join_box {
    top: 35px;
    right: -2px;
    /*left: -73px;*/
}
.form_inner_containers {
    position: relative;
    margin: auto auto;
    display: block;
    background-color: #F1F1F1;
    border-radius: 10px;
    border: 0px;
}
.form_hidden {
    display: none;
}
.form_shown {
    display: block;
}
.inputs {
    border-radius: 8px;
    background-color: white !important;
    outline: none;
    border: 0px;
    font-size: 22px;
    padding: 10px;
    margin: 10px;
    box-shadow: 0px 0px 0px grey;
}
.inputs:focus {
    box-shadow: 3px 3px 3px grey;
}
.buttons {
    position: relative: 
    display: block;
    background-color: #00ADEF;
    margin: 10px;
    border-radius: 8px;
    padding: 10px 15px 8px;
    width: 269px;
    outline: none;
    font-size: 22px;
    border: 0px;
    cursor: pointer;
    cursor: hand;
    color: #F1F1F1;
}
.buttons:hover {
    background-color: #18B4EF;
}
.buttons:active {
    background-color: #91D6F0;
    color: #F1F1F1;
    outline: none;
}

person BestAnswer    schedule 06.06.2014    source источник


Ответы (4)


Содержимое установлено на "display: none;" чтобы скрыть их. При наведении для них устанавливается значение «display: block», которое немедленно отображает их и игнорирует переход непрозрачности. Лично меня эта "ошибка" очень раздражает (это не ошибка ... но раздражает).

Двумя обходными путями являются Javascript (беспорядочный) и использование анимации ключевых кадров CSS. http://hschwarz77.wordpress.com/2013/10/16/css-transition-from-display-none-to-display-block-on-hover/

Насколько мне известно, это единственные решения, в которых div полностью скрыт (и непригоден для использования ... видимость: скрытый занимает пространство) и исчезает.

person Jason    schedule 06.06.2014
comment
Привет, @Pauli_D, тебе нужно отправить ответ по этой ссылке! Именно то, что я искал! - person BestAnswer; 06.06.2014

display: none; на всех этих элементах портят ваши переходы. Вы не можете отобразить переход css none, потому что он либо true, либо false, и между ними нет.

Вот JSFiddle

person Mathias Rechtzigel    schedule 06.06.2014
comment
проблема в том, что он исчезает, когда я нахожусь под кнопкой, где находится раскрывающийся список. - person BestAnswer; 06.06.2014

Хорошо, благодаря этой ссылке, которую кто-то прокомментировал, я придумал следующий CSS, который работает отлично. Я решил, что мне больше нравится, если нет постепенного появления и исчезновения, а просто задержка, но я все еще использую для этого css transition:

#membership_container {
    float: right;
    position: relative;
    vertical-align: top;
    display: inline-block;
    height: 100%;
    margin: 0px;
    padding: 0px;
    background-color: #444444;
    text-align: center;

}
#login_button {
    position: relative;
    vertical-align: top;
    display: inline-block;
    float: left;
    height: 100%;
    margin: 0px;
    padding: 0px 10px;
    background-color: #444444;
    border-left: 2px solid #7B7B7B;
    border-right: 2px solid #7B7B7B;
    cursor: pointer;
    cursor: hand;
}
#login_button:hover {
    background-color: #696969;
}
#login_button:hover #login_box {
    visibility: visible;
    opacity: 1;
    transition-delay: .5s;
}
#login_text {
    position: relative;
    margin: 9px 0px 0px;
    text-align: center;
    color: white;
    display: inline-block;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 13px;
}
#join_button {
    position: relative;
    vertical-align: top;
    display: inline-block;
    float: left;
    height: 100%;
    margin: 0px;
    background-color: #444444;
    padding: 0px 10px;
    border-right: 2px solid #7B7B7B;
    cursor: pointer;
    cursor: hand;
}
#join_button:hover {
    background-color: #696969;
}
#join_button:hover #join_box {
    visibility: visible;
    opacity: 1.0;
    transition-delay: .5s;
}
#join_text {
    position: relative;
    margin: 9px 0px 0px;
    text-align: center;
    color: white;
    display: inline-block;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 13px;
}

.button_blur {
    background-color: #444444;
}
.button_blur:hover {
    background-color: #696969;
}
.button_focus {
    background-color: #696969;
}
.form_containers {
    z-index: 10;
    position: absolute;
    opacity: 0;
    visibility: hidden;
    border: 5px solid #888888;
    border-radius: 10px 0px 10px 10px;
    background-color: #F1F1F1;
    -o-transition: visibility 0s linear .5s, opacity 0s linear .5s;
    -ms-transition: visibility 0s linear .5s, opacity 0s linear .5s;
    -moz-transition: visibility 0s linear .5s, opacity 0s linear .5s;
    -webkit-transition: visibility 0s linear .5s, opacity 0s linear .5s;
    transition: visibility 0s linear .5s, opacity 0s linear .5s;
}
#login_box {
    top: 35px;
    right: -2px;
    /*left: -115px;*/
}
#join_box {
    top: 35px;
    right: -2px;
    /*left: -73px;*/
}
.form_inner_containers {
    position: relative;
    margin: auto auto;
    display: block;
    background-color: #F1F1F1;
    border-radius: 10px;
    border: 0px;
}
.form_hidden {
    display: none;
}
.form_shown {
    display: block;
}
person BestAnswer    schedule 06.06.2014

Если вы установите max-height на 0 пикселей со скрытым переполнением, это будет так, как если бы оно не отображалось и не отображалось.

Затем, когда состояние изменяется, установите max-height на что-то большое (достаточно большое, чтобы вместить область), например, 400 пикселей. Затем он будет выглядеть так, как если бы он не был скрыт в скрытом блоке.

.form_before_state_change {
max-height:0px;
overflow:hidden;
opacity: 0;
-o-transition: opacity .8s linear;
-ms-transition: opacity .8s linear;
-moz-transition: opacity .8s linear;
-webkit-transition: opacity .8s linear;
transition: opacity .8s linear;
}

.form_after_state_change {
    max-height:400px;
    opacity: 1;
}
person Sprose    schedule 24.09.2015