微信小程序从后端获取的图片,展示的时候上下没有完全拼接,有缝隙【已解决】

文章目录

  • 1、index.wxml
  • 2、index.js
  • 3、detail.detail
      • 为什么 `.rich-text-style` 样式可以生效?
        • 1. `<rich-text>` 组件的特殊性
        • 2. 类选择器的作用范围
        • 3. 样式优先级
        • 4. `line-height: 0` 的作用
        • 5. 为什么直接使用 `rich-text` 选择器无效?
      • 总结

在这里插入图片描述

上下两张图片,中间有一条白色缝隙,但是客户想要完全拼接。于是就开始分析代码。

1、index.wxml

<view class="marketing-materials-pannel-wrap">
  <view class="marketing-materials-pannel-box">
    <view class="marketing-materials-title-box">
      <view class="marketing-materials-item-title-box {{ currentIndex === index ? 'active-class': '' }}" wx:for="{{ detail.detailList }}" wx:key="item" data-index="{{ index }}" catch:tap="handleTitleClick">
         {{ item.active }}
      </view>
    </view>
    <view class="marketing-materials-item-value-box">
      <!-- <rich-text nodes="{{ detail.detailList[currentIndex].value || '' }}" /> -->
      <rich-text nodes="{{ detail.detail }}" class="rich-text-style"/>
    </view>
  </view>
</view>

2、index.js

const properties = {
  detail: Object
}
const data = {
  currentIndex: 0
}
const observers = {}
const methodMap = {
  handleTitleClick(e) {
    const { index: currentIndex } = e?.currentTarget?.dataset
    this.setData({ currentIndex })
  }
}
const customMethodMap = {}
const methods = {
  ...customMethodMap,
  ...methodMap
}
const behaviors = {}
const relations = {}
const externalClasses = []
const pageLifetimes = {
  show() {},
  hide() {},
  resize() {}
}
const lifetimes = {
  created() {},
  attached() {
    // 组件挂载到页面时调用
    console.log("Component attached, detail =", this.properties.detail);
    console.log("Component attached, detail.detail =", this.properties.detail.detail);
  },
  ready() {},
  moved() {},
  detached() {}
}

Component({ properties, data, observers, methods, pageLifetimes, lifetimes, behaviors, relations, externalClasses })

3、detail.detail

<div>
  <img 
    src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_01_642681.jpg" 
    style="max-width:100%;" 
    contenteditable="false" 
  />
  <p>
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_02_311369.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_03_680880.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_04_504903.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_05_785733.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_06_138233.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_07_715648.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_08_281797.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_09_119610.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_10_517697.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
    <img 
      src="https://www.crossbiog.com/product-detail/旭包鲜保鲜膜_11_238141.jpg" 
      style="max-width:100%;" 
      contenteditable="false" 
    />
  </p>
</div>

为什么 .rich-text-style 样式可以生效?

你提到通过给 <rich-text> 组件添加一个自定义类名 class="rich-text-style",并且使用 .rich-text-style 选择器来设置样式后,图片之间的空隙问题得到了解决。这背后的原因涉及到微信小程序中样式的优先级和作用范围。

1. <rich-text> 组件的特殊性

<rich-text> 是微信小程序中的一个内置组件,用于渲染 HTML 字符串。它的内部内容是通过 Shadow DOM 渲染的,这意味着外部样式文件中的样式默认情况下不会直接影响到 <rich-text> 内部的内容。然而,微信小程序提供了一种机制,允许你通过为 <rich-text> 添加自定义类名来影响其内部内容的样式。

2. 类选择器的作用范围

当你为 <rich-text> 组件添加一个自定义类名(如 class="rich-text-style"),并使用该类选择器(如 .rich-text-style)来设置样式时,微信小程序会将这些样式应用到 <rich-text> 的内部内容中。这是因为微信小程序的样式系统会将带有自定义类名的 <rich-text> 视为一个特殊的容器,允许你通过类选择器来影响其内部元素的样式。

<!-- WXML -->
<rich-text nodes="{{ detail.detail }}" class="rich-text-style"></rich-text>
/* WXSS */
.rich-text-style {
  line-height: 0;
}

在这种情况下,.rich-text-style 样式不仅会应用到 <rich-text> 组件本身,还会传递给其内部的 HTML 元素(如 imgp 等),从而有效地解决了图片之间的空隙问题。

3. 样式优先级

使用类选择器(如 .rich-text-style)通常比标签选择器(如 rich-text)具有更高的优先级。因此,即使有其他全局样式或默认样式存在,.rich-text-style 中的样式也会优先应用,确保 line-height: 0 等样式能够生效。

4. line-height: 0 的作用

line-height: 0 是一种常见的技巧,用于消除行内元素(如 img)之间的空隙。默认情况下,img 标签是行内元素,浏览器会在每个行内元素之间插入一个空白字符(类似空格),这会导致图片之间出现空隙。通过将 line-height 设置为 0,你可以有效地消除这些空白字符,从而使图片完全拼接在一起。

5. 为什么直接使用 rich-text 选择器无效?

如果你尝试直接使用 rich-text 选择器来设置样式,可能会遇到样式不生效的问题。原因如下:

  • Shadow DOM 的隔离性<rich-text> 组件的内部内容是通过 Shadow DOM 渲染的,默认情况下外部样式文件中的样式无法直接影响到其内部元素。
  • 样式优先级:如果没有使用类选择器,可能某些默认样式或全局样式会覆盖你设置的样式,导致 line-height: 0 等样式无法生效。

因此,使用自定义类名(如 class="rich-text-style")并通过类选择器(如 .rich-text-style)来设置样式是一种更可靠的方式,可以确保样式能够正确应用到 <rich-text> 的内部内容中。

总结

  • <rich-text> 组件的内部内容是通过 Shadow DOM 渲染的,默认情况下外部样式无法直接影响其内部元素。
  • 通过为 <rich-text> 添加自定义类名(如 class="rich-text-style",并使用类选择器(如 .rich-text-style)来设置样式,可以有效地将样式应用到 <rich-text> 的内部内容中。
  • line-height: 0 是一种常见的技巧,用于消除行内元素之间的空隙,从而使图片完全拼接在一起。
  • 类选择器通常比标签选择器具有更高的优先级,因此使用类选择器可以确保样式优先应用。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【达梦数据库】存储过程调用实践案例-select

目录 前言创建表插入数据查询表中数据创建存储过程打开dbms_output包输出开关调用存储过程 前言 如果要在存储过程中执行一个SELECT语句并处理其结果&#xff0c;你不能直接使用EXECUTE IMMEDIATE&#xff0c;因为EXECUTE IMMEDIATE主要用于执行那些不返回行的语句&#xff08;…

C语言:指针(第一天)

C语言&#xff1a;指针&#xff08;第一天&#xff09; 预备知识 内存地址 字节&#xff1a;字节是内存的容量单位&#xff0c;英文名byte&#xff0c;一个字节有8位&#xff0c;即1byte8bits地址&#xff1a;系统为了便于区分每一个字节而对他们逐一进行的编号&#xff0c;…

vue3如何实现点击回车,自动登录?

vue3如何实现点击回车&#xff0c;自动登录&#xff1f; 场景&#xff1a;登录账号的时候&#xff0c;可能有的人不习惯直接点击登录&#xff0c;而是通过顺手敲个回车键实现登录 解决办法&#xff1a;上代码 //监听回车 function onKeyUp(e) {//console.log(e)if (e.key En…

LNMP和Discuz论坛

文章目录 LNMP和Discuz论坛1 LNMP搭建1.1 编译安装nginx服务1.1.1 编译安装1.1.2 添加到系统服务 1.2 编译安装MySQL服务1.2.1 准备工作1.2.2 编辑配置文件1.2.3 设置路径环境变量1.2.4 数据库初始化1.2.5 添加mysqld系统服务1.2.6 修改mysql的登录密码 1.3 编译安装PHP服务1.3…

目标跟踪算法:SORT、卡尔曼滤波、匈牙利算法

目录 1 目标检测 2 卡尔曼滤波 3《从放弃到精通&#xff01;卡尔曼滤波从理论到实践》视频简单学习笔记 3.1 入门 3.2 进阶 3.2.1 状态空间表达式 3.2.2 高斯分布 3.3 放弃 3.4 精通 4 匈牙利算法 5 《【运筹学】-指派问题&#xff08;匈牙利算法&#xff09;》视…

Linux DNS之进阶篇bind-chroot企业级部署方式

BIND-chroot 服务是利用 chroot 机制为 BIND 服务创建伪根目录以限制其访问范围&#xff0c;增强安全性&#xff0c;但配置与维护相对较为复杂的一种服务机制。 本章我们将部署chroot模式的DNS服务&#xff0c;以增加安全性 案例要求&#xff1a; 此案例域名为xjh.com www 解析…

241206学习日志——[CSDIY] [InternStudio] 大模型训练营 [21].md

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

YOLOv5白皮书-第Y2周:训练自己的数据集

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** 本人往期文章可查阅&#xff1a; 深度学习总结 接着上一篇文章 YOLOv5白皮书-第Y1周&#xff1a;调用官方权重进行检测 &#xff0c;…

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…

共筑数字安全防线,2024开源和软件安全沙龙即将启幕

随着数字化转型进程的加快以及开源代码的广泛应用&#xff0c;开源凭借平等、开放、协作、共享的优秀创作模式&#xff0c;逐渐成为推动数字技术创新、加速传统行业转型升级的重要模式。但随着软件供应链日趋复杂多元&#xff0c;使得其安全风险不断加剧&#xff0c;针对软件供…

SAP导出表结构并保存到Excel 源码程序

SAP导出表结构并保存到Excel,方便写代码时复制粘贴 经常做接口,需要copy表结构,找到了这样一个程程,特别有用。 01. 先看结果

LDR6500:音频双C支持,数字与模拟的完美结合

在当今数字化快速发展的时代&#xff0c;音频设备的兼容性和性能成为了用户关注的重点。LDR6500&#xff0c;作为乐得瑞科技精心研发的USB Power Delivery&#xff08;PD&#xff09;协议芯片&#xff0c;凭借其卓越的性能和广泛的应用兼容性&#xff0c;为音频设备领域带来了新…

Linux下mysql环境的搭建

1.mysql的下载 去MySQL官网下载mysql的linux压缩包 MySQL :: Download MySQL Community Server 如果下载慢请到网盘中自行下载 通过网盘分享的文件&#xff1a;mysql-8.0.40-1.el7.x86_64.rpm-bundle.tar 链接: https://pan.baidu.com/s/1vUJ-VuTwer1nLPT-haQCqw?pwd6342 提…

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章&#xff0c;如你们所见&#xff0c;比较详细&#xff0c;全长两万字。我不建议你们一次性看完&#xff0c;直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国&#xff01; 一、UML图 总共有如下几种&#xff1a; 用例图&#xff08;Use Ca…

jenkins邮件的配置详解

Jenkins邮件的配置涉及多个步骤和细节,以下是详细的配置指南: 一、前期准备 确定邮件服务:明确Jenkins将要使用的邮件服务,如QQ邮箱、163邮箱、公司邮箱(基于Microsoft 365或Exchange Server)等。获取SMTP配置信息:根据邮件服务类型,获取相应的SMTP服务器地址、端口号…

JaveEE初阶--网络编程套接字

目录 一、引言 二、网络编程基本概念 2.1 什么是网络编程&#xff1f; 2.2 基本知识 三、Socket套接字 3.1 概念 3.2 分类 1.流套接字&#xff1a;使用传输层TCP协议 2. 数据报套接字&#xff1a;使用传输层UDP协议 3.原始套接字&#xff1a;用于自定义传输层协议 四、…

Python爬虫——HTML中Xpath定位

Xpath是一种路径查询语言。利用一个路径表达式从html文档中找到我们需要的数据位置&#xff0c;进而将其写入到本地或者数据库中。 学习Xpath爬虫&#xff0c;我们首先学习一下python中lxml库 关于库 lxml 终端下载Xpath需要用到的模块 pip install lxml 关于HTML 超文本标…

Spring Cloud Alibaba 之 “Sentinel”

从网上下载好sentinel-dashboard-1.6.3.jar&#xff0c;然后执行 java -jar sentinel-dashboard-1.6.3.jar,执行成功之后在浏览器输入localhost:8080&#xff0c;Sentinel的登录名和密码都是sentinel,登陆成功之后看到只有一个首页。 接下来开始整合Spring Cloud Alibaba Sen…

伟测科技再融资11.75亿:增收不增利,毛利率近年来持续下滑

《港湾商业观察》施子夫 王璐 12月9日&#xff0c;上海证券交易所上市审核委员会召开2024年第34次上市审核委员会审议会议&#xff0c;审议上海伟测半导体科技股份有限公司(再融资)&#xff08;以下简称&#xff0c;伟测科技&#xff1b;688372.SH&#xff09;事项。 今年8月…

Postman cURL命令导入导出

你是否曾为在Postman和终端之间切换、整理请求而抓狂&#xff1f;其实&#xff0c;Postman支持与cURL命令的无缝互通&#xff0c;通过导入导出&#xff0c;极大提升效率。用好这个功能&#xff0c;分分钟让接口测试更高效&#xff01; Postman如何快速导入cURL命令&#xff1f;…