使用原生input模拟器样式正常,但是真机上 input框溢出

news2024/11/28 23:13:27

目录

一、问题

二、解决方法

三、总结


tiips:如嫌繁琐,直接移步总结即可!

一、问题

1.使用原生input写了一个搜索框,在模拟器和pc上一切正常。但是打包放到手机上,样式就有问题:这个搜索框的布局是正常的,但是聚焦到input上,就可以看到input明显溢出了!

二、解决方法

1.真是奇怪,我也没有写什么奇怪的东西呀。pc端和移动端的模拟器都是没有问题的。

布局就是简单的flex布局。input 框 flex:1,其余图标自适应。怎么到移动端就有问题呢?

 1)代码如下:

<template>
<!-- 搜索组件 -->
  <div :class="['search-wrap', { round: round }]">
    <template v-if="isCenterStart">
      <span class="center" @click.stop="clickCenter">
        <span class="icon left-icon" v-if="leftIcon">
          <svg-icon :iconClass="leftIcon"></svg-icon>
        </span>
        <span>{{ placeholder }}</span>
      </span>
    </template>
    <template v-else>
      <span class="icon left-icon" v-if="leftIcon">
        <svg-icon :iconClass="leftIcon"></svg-icon>
      </span>
      <input
        v-model="currentValue"
        class="input-area"
        :placeholder="placeholder"
        @input="handleInput"
        @focus="handleFocus"
        @blur="handleBlur"
      />
      <span v-if="currentValue" class="icon right-icon clear-icon" @click.stop="handleClear">
        <svg-icon :iconClass="'clearInput'"></svg-icon>
      </span>
      <span v-if="rightIcon" :class="['icon', { 'right-icon': rightIcon }]">
        <svg-icon :iconClass="rightIcon"></svg-icon>
      </span>
      <slot></slot>
    </template>
  </div>
</template>
<script>
import { nextTick } from 'process';
import { defineComponent, onMounted, ref, watch, getCurrentInstance } from 'vue';
//使用的时候需要用v-model
export default defineComponent({
  props: {
    //搜索框的值
    value: {
      type: String,
      default: ''
    },
    //提示
    placeholder: {
      type: String,
      default: '请输入'
    },
    //左图标
    leftIcon: {
      type: String,
      default: 'search'
    },
    //右图标
    rightIcon: {
      type: String,
      default: ''
    },
    //是否圆角
    round: {
      type: Boolean,
      default: false
    },
    //刚开始是否居中
    isCenter: {
      type: Boolean,
      default: false
    }
  },
  components: {},
  setup(props, { emit, slots }) {
    const { proxy } = getCurrentInstance();
    //当前输入的值
    const currentValue = ref('');
    onMounted(() => {
      currentValue.value = props.value;
    });
    //输入事件
    const handleInput = () => {
      //输入了字符再触发
      // if (currentValue.value?.trim()) {
        emit('input', currentValue.value);
      // }
    };
    //清除
    const handleClear = () => {
      currentValue.value = '';
      setCenter();
      emit('input', currentValue.value);
      emit('clear');
    };
    //聚焦
    const handleFocus = () => {
      emit('focus', currentValue.value);
    };
    //失焦
    const handleBlur = () => {
      setCenter();
      emit('blur', currentValue.value);
    };
    //初始时是否显示在中间
    const isCenterStart = ref(props.isCenter);
    const clickCenter = () => {
      isCenterStart.value = false;
      nextTick(() => {
        proxy.$el.querySelector('input')?.focus();
      });
    };
    const setCenter = () => {
      if (props.isCenter && !currentValue.value) {
        isCenterStart.value = true;
      }
    };
    watch(
      () => props.value,
      (newVal) => {
        currentValue.value = newVal;
      }
    );
    return {
      currentValue,
      handleInput,
      handleClear,
      handleFocus,
      handleBlur,
      clickCenter,
      isCenterStart
    };
  }
});
</script>
<style lang="scss" scoped>
.search-wrap {
  display: flex;
  justify-content: space-between;
  padding: 20px 40px;
  background: #f1f3f7;
  border-radius: 18px;
  align-items: center;
  .icon {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 48px;
  }
  .right-icon {
    margin-left: 20px;
  }
  .clear-icon {
    font-size: 60px;
  }
  .input-area {
    flex: 1;
    font-size: 51px;
    line-height: 69px;
    margin-left: 36px;
    border: none;
    background: none;
    &::placeholder {
      color: #acacac;
    }
    &:focus-visible {
      outline: none;
    }
  }
}
.round {
  background: rgba(255, 255, 255, 0.5);
  border-radius: 54px;
}
.center {
  width: 100%;
  display: flex;
  justify-content: center;
  color: #acacac;
  font-size: 51px;
  line-height: 75px;
  transition: ease-in-out;
  span {
    margin-left: 36px;
  }
}
</style>

2.只能一个个试试到底哪个样式有问题。

3.发现注释了 最外层父盒子的 display:flex,竟然不溢出了。

4.但是吧,我确实需要用flex布局,让子元素一行显示,这样的修改显然不科学。。。

5.最后的最后发现,只需要在 input上 加上样式 width:100%;就好了。甚至flex:1`都不需要!!!!!

6.问题是解决了,但是原因真不知道。。。。。

三、总结

1.移动端怎么会有这么多奇怪的问题呢?

2.移动端确实需要在真机上测试才靠谱!

3.移动端input溢出:尝试设置input width:100%;

4.猜测可能是手机上有内置的样式,所以我们不设置的时候,使用了默认的样式,导致了最终的样式和预期不一致。(有大佬知道原因,欢迎评论区告知,非常感谢!)

/*

希望对你有帮助!

如有错误,欢迎指正,非常感谢!

*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1392367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 布尔类型:了解真假之间的探索

Python 是一种备受欢迎的编程语言&#xff0c;以其简洁、灵活和易学易用而闻名。其中一个重要的数据类型就是布尔类型&#xff08;bool&#xff09;&#xff0c;它代表了逻辑上的真&#xff08;True&#xff09;和假&#xff08;False&#xff09;。在 Python 中&#xff0c;布…

macOS向ntfs格式的移动硬盘写数据

最近想把日常拍摄的照片从SD存储卡中转存到闲置的移动硬盘中&#xff0c;但是转存的时候发现&#xff0c;mac只能读我硬盘里的东西&#xff0c;无法将数据写入到移动硬盘中&#xff0c;也无法删除移动硬盘的数据。后来在网上查了许久资料&#xff0c;终于可实现mac对移动硬盘写…

大模型学习与实践笔记(六)

一、finetune 简介 两种微调模式&#xff1a;增量预训练 与指令跟随 1.增量预训练 2.指令微调 二、LoRA 与 QLoRA 介绍 三、XTuner 介绍 四、低显存玩转LLM的方法

SpringBoot教程(十七) | SpringBoot中ApplicationEvent用法

SpringBoot教程(十七) | SpringBoot中ApplicationEvent用法 对不起大家&#xff0c;昨天文章里的告别说早了&#xff0c;这个系列还不能就这么结束。 我们前面的文章中讲解过RabbitMQ的用法&#xff0c;所谓MQ就是一种发布订阅模式的消息模型。在Spring中其实本身也为我们提供…

寒假学习打字:提前实现弯道超车

寒假对于学生来说&#xff0c;通常是一个宝贵的时间段&#xff0c;可以用来放松、充实自己&#xff0c;或者提高一项重要的技能——打字。在这个数字时代&#xff0c;打字技能变得比以往任何时候都更加重要。无论是在学校的论文写作&#xff0c;还是在工作中处理电子邮件&#…

计算机网络-VLAN间通信

之前复习了VLAN的概念以及几个接口类型。VLAN在二层可以实现广播域的划分&#xff0c;VLAN间可以实现二层通信&#xff0c;但是不能实现三层通信&#xff0c;需要借助其它方式。 一、概述 实际网络部署中一般会将不同IP地址段划分到不同的VLAN。同VLAN且同网段的PC之间可直接进…

CentOs7.8安装原生Jenkins2.38教程

CentOs7.8安装Jenkins教程 前提&#xff1a;1、下载安装包2、安装&#xff1a;3、检验是否安装成功&#xff1a;4、查询java路径5、修改配置文件6、创建jenkins用户7、给jenkins用户授权8、开放防火墙端口9、运行和其他jenkins相关命令10、异常情况10.1 提示超时&#xff0c;查…

RabbitMQ常见问题之延迟消息

文章目录 一、死信交换机二、TTL1. Queue指定死信交换机并设置TTL2. 消息设置TTL 三、延迟队列1. SpringAMQP创建延迟队列2. 设置消息延迟3. 测试 一、死信交换机 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dead letter&#xff09;&#xff…

回馈科教,非凸科技助力第48届ICPC亚洲区决赛

1月12日-14日&#xff0c;“华为杯”第48届国际大学生程序设计竞赛&#xff08;ICPC&#xff09;亚洲区决赛在上海大学成功举办。非凸科技作为此次赛事的支持方之一&#xff0c;希望携手各方共同推动计算机科学和技术的发展。 这是一场智慧的巅峰对决&#xff0c;320支优秀队伍…

探索Java的神秘运行机制:揭秘整体运行流程

目录 1. 背景 2.整体流程 2.1 一看整体流程 2.1 再看运行流程 3. 类的加载过程 3.1 初探类的加载过程 4. 类加载机制 4.1 类加载器 4.2 双亲委派机制 5. 小结&#xff1a; 1. 背景 学习了这么多年的Java&#xff0c;把自己的理解写成JVM系列&#xff0c;以便于后面的…

openGauss学习笔记-200 openGauss 数据库运维-常见故障定位案例-表文件大小无变化

文章目录 openGauss学习笔记-200 openGauss 数据库运维-常见故障定位案例-表文件大小无变化200.1 VACUUM FULL一张表后&#xff0c;表文件大小无变化200.1.1 问题现象200.1.2 原因分析200.1.3 处理办法 openGauss学习笔记-200 openGauss 数据库运维-常见故障定位案例-表文件大小…

刷卡打印机,后台更换别人绑定的卡,无法生效,怎么解决?

环境&#xff1a; 柯美287打印机 问题描述&#xff1a; 刷卡打印机&#xff0c;后台更换别人绑定的卡&#xff0c;无法生效&#xff0c;怎么解决&#xff1f; 解决方案&#xff1a; 别人之前离职的卡刷了把他后面卡号复制好 2.搜索之前那个离职的用户&#xff0c;打开设置…

JavaScript 入门手册

准备好快速学习 JavaScript了吗&#xff1f; 如果是&#xff0c;那么你需要这份 JavaScript 小抄。它以清晰、简洁和初学者友好的方式介绍了 JavaScript 的基础知识。 将它作为提高 JavaScript 技能的参考或指南。 让我们深入学习。 什么是 JavaScript&#xff1f; JavaSc…

mPLUG-Owl2: 7B的多模态大模型

前言 语言模型&#xff1a;LLama2 - 7B视觉模型&#xff1a;Clip-L 0.3B 痛点 作者任务以往的方法&#xff08;Qformer&#xff0c;linear层&#xff09;直接将视觉编码器中的视觉特征映射到冻结的LLMs中&#xff0c;通过利用保留的语言能力执行多模态任务。这种策略限制了…

Springboot整合Canal 实践经验

文章目录 前言一、Canal 服务端&#xff1a;1.1 canal.properties&#xff1a;1.2 canal的监听实例&#xff1a; 二、canal客户端2.1 客户端配置要监听的实例&#xff1a;2.2 通过连接获取信息 总结 前言 本文是Springboot整合Canal 实践过程中经验记录&#xff1b; 一、Canal…

Linux/Networked

Enumeration nmap 网站更新之后有了一个引导模式&#xff0c;更利于学习了&#xff0c;之前看ippsec的视频&#xff0c;要不总是没有思路&#xff0c;现在出现的问题多了提示也更多了&#xff0c;还没有使用&#xff0c;一会用用再说 首先&#xff0c;第一个问题是“目标上正…

2 python快速上手

2 python快速上手 快速上手1.编码&#xff08;密码本&#xff09;2.编程初体验3.输出4. 初识数据类型4.1 整形&#xff08;int&#xff09;4.2 字符串&#xff08;str&#xff09;4.3 布尔类型&#xff08;bool&#xff09;4.4 类型转换 5. 变量5.1 变量名的规范5.2 变量内存指…

项目架构之Zabbix部署

1 项目架构 1.1 项目架构的组成 业务架构&#xff1a;客户端 → 防火墙 → 负载均衡&#xff08;四层、七层&#xff09; → web缓存/应用 → 业务逻辑&#xff08;动态应用&#xff09; → 数据缓存 → 数据持久层 运维架构&#xff1a;运维客户端 → 跳板机/堡垒机&#x…

探索Python数据结构与算法:解锁编程的无限可能

文章目录 一、引言1.1 数据结构与算法对于编程的重要性1.2 Python作为实现数据结构与算法的强大工具 二、列表和元组2.1 列表&#xff1a;创建列表、索引、切片和常用操作2.2 元组&#xff1a;不可变序列的特性和使用场景 三、字符串操作和正则表达式3.1 字符串的常见操作和方法…

本地运行LlaMA 2的简易指南

大家好&#xff0c;像LLaMA 2这样的新开源模型已经变得相当先进&#xff0c;并且可以免费使用。可以在商业上使用它们&#xff0c;也可以根据自己的数据进行微调&#xff0c;以开发专业版本。凭借其易用性&#xff0c;现在可以在自己的设备上本地运行它们。 本文将介绍如何下载…