效果图:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.select {
padding: 0 20px;
height: 0;
overflow: hidden;
width: 200px;
box-sizing: border-box;
border: 1px solid #000;
margin-top: -2px;
}
.text {
width: 200px;
}
span {
display: block;
width: auto;
}
/* 也可以用 transform: scaleY(0); 实现,css 效率高, 但是动画效果不好 */
</style>
</head>
<body>
<div class="text-select">
<input type="text" class="text">
<div class="select">
<span>123</span>
<span>123</span>
<span>123</span>
<span>123</span>
<span>123</span>
<span>123</span>
</div>
</div>
<script>
const inp = document.querySelector('.text');
const select = document.querySelector('.select');
inp.onfocus = function(){
select.style.transition = 'none'
select.style.height = 'auto';
const height = select.offsetHeight;
select.style.height = 0;
select.offsetHeight; // 触发强制渲染
select.style.transition = '1s';
select.style.height = height + 'px';
}
inp.onblur = function(){
select.style.transition = '1s'
select.style.height = 0
}
</script>
</body>
</html>