#html #css #forms #radio-button #css-animations
Вопрос:
Я создаю форму, в которой пользователь может выбрать один из трех вариантов с помощью переключателей. Когда пользователь выбирает один из вариантов, мне нужно отобразить некоторый текст под параметром, который действует как описание для соответствующего параметра. Контейнер, в котором содержится опция, должен увеличиться по высоте, чтобы соответствовать описанию.
Я пытался сделать это с помощью комбинации JS и CSS, но просто не могу понять, как отображать текст и увеличивать родительский контейнер при выборе опции. Я приложил свой код, видео и скриншоты ожидаемого результата. Был бы способ оживить его? Спасибо, что нашли время прочитать это :).
.select {
display: grid;
border: 3px solid #385663;
padding: 10px 27px 10px 27px;
border-radius: 18px;
width: 500px;
margin: 25px;
}
.select-top {
display: flex;
align-items: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Radio Button Selects</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="select">
<div class="select-top">
<input type="radio" name="options" id="option-1">
<label for="option-1">
<p>Option 1</p>
</label>
</div>
<div>
<p class="radio-text">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Beatae voluptatem autem, recusandae nesciunt incidunt saepe ratione illum numquam quod animi optio excepturi harum hic blanditiis qui et. Cupiditate, repellat facere?</p>
</div>
</div>
<div class="select">
<div class="select-top">
<input type="radio" name="options" id="option-2">
<label for="option-2">
<p>Option 2</p>
</label>
</div>
<div>
<p class="radio-text">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Beatae voluptatem autem, recusandae nesciunt incidunt saepe ratione illum numquam quod animi optio excepturi harum hic blanditiis qui et. Cupiditate, repellat facere?</p>
</div>
</div>
<div class="select">
<div class="select-top">
<input type="radio" name="options" id="option-3">
<label for="option-3">
<p>Option 3</p>
</label>
</div>
<div>
<p class="radio-text">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Beatae voluptatem autem, recusandae nesciunt incidunt saepe ratione illum numquam quod animi optio excepturi harum hic blanditiis qui et. Cupiditate, repellat facere?</p>
</div>
</div>
</body>
</html>
Ожидаемое поведение при выбореОжидаемое поведение, если оно не выбраноВидео Макет
Ответ №1:
Я исправил некоторые проблемы с HTML (теги неправильно закрыты, p внутри метки).
Это всего лишь один из способов сделать это. Это может быть немного неудобно, если есть много кнопок, но это неплохо, если их всего 3.
// add a click function to each radio button, in one step.
$("input[type='radio']").on("click", function() {
// first hide all radio-text paragraphs.
$(".radio-text").css("display", "none");
// show only the one you want, based on the id.
switch ($(this).attr("id")) {
case "option-1":
$(".radio-text").eq(0).css("display", "block");
break;
case "option-2":
$(".radio-text").eq(1).css("display", "block");
break;
case "option-3":
$(".radio-text").eq(2).css("display", "block");
break;
default:
// nada.
}
});
.select {
display: grid;
border: 3px solid #385663;
padding: 10px 27px 10px 27px;
border-radius: 18px;
width: 500px;
margin: 25px;
}
.select-top {
display: flex;
align-items: center;
}
/* start with all text hidden (i presume). */
.radio-text {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="select">
<div class="select-top">
<input type="radio" name="options" id="option-1" />
<label for="option-1">Option 1</label>
</div>
<div>
<p class="radio-text">Lorem ipsum dolor, sit amet consectetur adipisicing elit.</p>
</div>
</div>
<div class="select">
<div class="select-top">
<input type="radio" name="options" id="option-2" />
<label for="option-2">Option 2</label>
</div>
<div>
<p class="radio-text">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Beatae voluptatem autem, recusandae nesciunt incidunt saepe ratione illum numquam quod animi optio excepturi harum hic blanditiis qui et. Cupiditate, repellat facere?</p>
</div>
</div>
<div class="select">
<div class="select-top">
<input type="radio" name="options" id="option-3" />
<label for="option-3">Option 3</label>
</div>
<div>
<p class="radio-text">Lorem ipsum dolor, sit amet consectetur adipisicing elit.</p>
</div>
</div>
Комментарии:
1. Привет, спасибо, что нашли время ответить. Как вы думаете, есть ли способ оживить расширение элемента, как у меня в моем видео-макете? Еще раз спасибо.
2. Я не могу этого сделать из-за моих очков репутации.
3. Не знал, какая репутация требуется. Исправил это для тебя.
4. Спасибо, не могли бы вы знать, как обойти анимацию?
5. Попробуй переодеться
.css("display", "block");
.slideToggle();
.