#html #css #css-animations #css-transitions
Вопрос:
Я использую CSS-переходы для изменения высоты входного элемента с 40 пикселей на 0 пикселей в надежде заставить его исчезнуть.
Этот эффект работает для изображений и выглядит прилично, но, похоже, не работает для входных элементов.
Однако для ввода он не достигает 0 пикселей и исчезает.
Я хотел бы использовать CSS-переходы, чтобы входные данные медленно исчезали. Возможно ли это?
Вот пример того, как выглядит вход с высотой: 0 пикселей.
https://jsfiddle.net/01geLwh7/
.search_bar_input {
box-sizing: border-box;
border-radius: 4px;
border-style: solid;
border-width: 1px;
border-color: #dddddd;
width: 140px;
background-color: rgba(255, 255, 255, 0);
margin: 0 auto;
position: relative;
top: 6px;
}
#search_bar_input_show {
height: 40px;
}
#search_bar_input_hide {
height: 0px;
}
<input class="search_bar_input" id="search_bar_input_hide" name="search" type="text" placeholder=" Search" />
Комментарии:
1.
#search_bar_input_show
нигде не используется2. @Shahriar, что не имеет значения для вопроса.
Ответ №1:
Вам также придется уменьшить отступ и границу ввода:
.search_bar_input {
box-sizing: border-box;
border-radius: 4px;
border-style: solid;
border-width: 1px;
border-color: #dddddd;
width: 140px;
background-color: rgba(255, 255, 255, 0);
margin: 0 auto;
position: relative;
top: 6px;
}
#search_bar_input_show {
height: 40px;
}
#search_bar_input_hide {
height: 0px;
padding: 0px;
border: 0px;
}
<input class="search_bar_input" id="search_bar_input_hide" name="search" type="text" placeholder=" Search" />
Комментарии:
1. спасибо, это очень помогает, однако я не могу перенести свою границу, потому что она слишком мала, она идет от 1 пикселей до 0 пикселей. Как ни странно, изменение размеров коробки не помогло.
2. @howard вы можете перейти
border-color
к тому, чтобы стать прозрачным.
Ответ №2:
Я предпочитаю transform: scale()
в этих случаях, в основном потому, что это действительно работает. Во-вторых, scale
умножает размер, чтобы вам не нужно было менять height
его несколько раз, если это необходимо.
Кроме того, у вас [была] опечатка в вашем HTML: (Если вы используете React, то все в порядке; спасибо, такоши). className
должно быть class
.
var input = document.querySelector(".search_bar_input");
setInterval(() => {
if (input.id === "search_bar_input_show") {
input.id = "search_bar_input_hide";
} else {
input.id = "search_bar_input_show";
}
}, 1000);
.search_bar_input{
box-sizing: border-box;
border-radius: 4px;
border-style: solid;
border-width: 1px;
border-color: #dddddd;
width: 140px;
background-color: rgba(255, 255, 255, 0);
margin: 0 auto;
position: relative;
top: 6px;
height: 40px;
transition: transform 0.5s;
}
#search_bar_input_show{
transform: scale(1, 1);
}
#search_bar_input_hide{
transform: scale(1, 0);
}
<input
class="search_bar_input"
id="search_bar_input_show"
name="search"
type="text"
placeholder=" Search"
/>
Кроме того, используя transform
, вы также можете измениться transform-origin
.
Комментарии:
1.
className
это не обязательно неправильно.React
в качестве примера использует его. Это было просто исправлено мной, чтобы сделать код воспроизводимым.2. Я не уверен в актуальности масштаба(). Я обнаружил, что у меня были дополнительные размеры, добавленные с помощью отступа по умолчанию и границы, которую я установил на 1 пиксель. Как ни странно, изменение свойства размера коробки не помогло. В чем заключается актуальность масштаба(). Я не понял вашего объяснения.
3. @howard Scale буквально масштабирует все свойства размеров, как вы учили на алгебре. Он масштабирует элемент, умножая его на любой коэффициент. Вы можете прочитать больше на MDN
4. @tacoshy Я вырезал эту часть в своем редактировании; должен ли я просто удалить эту часть вообще?
5. Лично я бы удалил. Однако, поскольку ОП конкретно не упоминал о реакции или не отмечал ее как таковую, это может быть законная информация. Кроме того, я не являюсь модератором, и в руководящих принципах конкретно не рассматривается такая ситуация.