如何制作鼠标悬浮后伸缩的搜索框

引言

许多博客都在使用的伸缩搜索框制作教程

成品展示(颜色自行搭配)

22222

初步布局

居中盒子&&初始化样式

<!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>
		/* 初步布局 */
    body {
      margin: 0;
      background: linear-gradient(200deg, #f1b2ff, #ff80c6);
      height: 100vh;
    }

    .search-box {
      position: absolute;
      top: 50%;
      left: 50%;
      background: #fff;
    }
  </style>
</head>

<body>
  <div class="search-box">
    box
  </div>
</body>

</html>
image-20240629173919921

1形态

盒子中间填入input和a标签作为按钮背景色为白色

<!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>
    body {
        /* 初步布局 */
      margin: 0;
      background: linear-gradient(200deg, #f1b2ff, #ff80c6);
      height: 100vh;
    }

       /* 居中设置背景色 */
    .search-box {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: #fff;
    }
  </style>
</head>

<body>
  <div class="search-box" class="search-input">
    <input type="text">
    <a href="" class="search-btn">按钮</a>
  </div>
</body>

</html>
image-20240629174703859

2形态

让外盒子box变得更胖更圆润

<!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>
    body {
      /* 初步布局 */
      margin: 0;
      background: linear-gradient(200deg, #f1b2ff, #ff80c6);
      height: 100vh;
    }

    .search-box {
      /* 居中设置背景色 */
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: #fff;

      /* 让他变胖变圆润一点 */
      height: 40px;
      padding: 10px;
      border-radius: 40px;
    }
  </style>
</head>

<body>
  <div class="search-box">
    <input type="text" class="search-input">
    <a href="" class="search-btn">按钮</a>
  </div>
</body>

</html>
image-20240629181256197

3形态

初始化输入框/按钮的样式和引入图标,将input一开始状态设置为width 0

文字标签换成图标

  1. 引入cdn

  2. 设置标签

输入框居中

设置input输入框自带的内边距为0,边框和轮廓为none

内部文字为16px 行高和父盒子一样40px

(从父盒子的Y起始点和结束点平均增加上下间距,也就是把文字往中间挤压,使得最后input输入框的整体高度和父盒子高度一致,实现输入框文字居中, 直接这样记,行高=盒高为文字居中,且一行的上下边距会将文字挤到中间)

image-20240629181030099

按钮样式

由于按钮是行内元素,想要设置宽高是无效的,让他往右漂浮,此时宽高生效

使用弹性布局将i标签水平横向居中

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <style>
    body {
      /* 初步布局 */
      margin: 0;
      background: linear-gradient(200deg, #f1b2ff, #ff80c6);
      height: 100vh;
    }

    .search-box {
      /* 居中设置背景色 */
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: #fff;

      /* 让他变胖变圆润一点 */
      height: 40px;
      padding: 10px;
      border-radius: 40px;
    }

    .search-input {
      padding: 0;
      border: none;
      outline: none;
      font-size: 16px;
      line-height: 40px;
      width: 0;
    }

    .search-btn {
      width: 40px;
      height: 40px;
      border-radius: 50%;
      float: right;
      display: flex;
      justify-content: center;
      align-items: center;
      cursor: pointer;
    }


  </style>
</head>

<body>
  <div class="search-box">
    <input type="text" class="search-input" placeholder="请输入内容">
    <a class="search-btn">
      <i class="fa fa-search"></i>
    </a>
  </div>
</body>

</html>

image-20240629184717610

4形态

悬浮或点击时box大盒子时 input宽度200px,按钮背景色变化,分别增加transition过渡0.4s

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <style>
    body {
      /* 初步布局 */
      margin: 0;
      background: linear-gradient(200deg, #f1b2ff, #ff80c6);
      height: 100vh;
    }

    .search-box {
      /* 居中设置背景色 */
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      background: #fff;

      /* 让他变胖变圆润一点 */
      height: 40px;
      padding: 10px;
      border-radius: 40px;
    }

    .search-input {
      padding: 0;
      border: none;
      outline: none;
      font-size: 16px;
      line-height: 40px;
      width: 0;
      transition: 0.4s;
    }

    .search-btn {
      width: 40px;
      height: 40px;
      border-radius: 50%;
      float: right;
      display: flex;
      justify-content: center;
      align-items: center;
      cursor: pointer;
      transition: 0.4s;
    }

    .search-box:hover .search-input {
      width: 200px;
    }

    .search-box:hover .search-btn {
      background: #b05824;
    }
  </style>
</head>

<body>
  <div class="search-box">
    <input type="text" class="search-input" placeholder="请输入内容">
    <a class="search-btn">
      <i class="fa fa-search"></i>
    </a>
  </div>
</body>

</html>

注意事项

a标签的跳转连接href 得去掉,否则图标会变成这样

image-20240629185308097

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在uniapp中,可以使用以下代码来实现伸缩搜索栏的效果: ```css overflow: hidden; word-break: break-all; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; ``` 这段代码使用了一系列的CSS属性来控制搜索框的显示效果。其中,`overflow: hidden`用于隐藏溢出的内容,`word-break: break-all`允许在单词内换行,`text-overflow: ellipsis`用于在溢出的部分显示省略号,`display: -webkit-box`将对象作为伸缩盒子模型显示,`-webkit-box-orient: vertical`设置子元素的排列方式为垂直方向,`-webkit-line-clamp: 1`指定显示的行数为1行。 另外,如果你想在动态设置导航栏搜索框的内容,可以使用以下代码: ```javascript const setNavSearchInput = (keyword) => { // #ifdef APP-PLUS let webView = this.$mp.page.$getAppWebview(); webView.setTitleNViewSearchInputText(keyword); // #endif // #ifdef H5 let inputSearch = document.querySelector('.uni-input-input\[type=search\]'); var evt = new InputEvent('input', { inputType: 'insertText', data: keyword, dataTransfer: null, isComposing: false }); if (inputSearch) { inputSearch.value = keyword; inputSearch.dispatchEvent(evt); } // #endif } ``` 这段代码中,`setNavSearchInput`函数用于动态设置导航栏搜索框的内容。在APP-PLUS平台下,通过`setTitleNViewSearchInputText`方法来设置导航栏搜索框的内容。在H5平台下,通过获取搜索框元素并触发`input`事件来设置搜索框的内容。 希望以上信息对你有帮助。 #### 引用[.reference_title] - *1* [溢出显示省略号、uni-app动态设置导航栏搜索框内容](https://blog.csdn.net/qq_42714690/article/details/105491119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值