wx-open-launch-weapp 样式问题

配图源自 Freepik

一共两篇:

此前写过一篇文章:关于 React 中使用 wx-open-launch-weapp 唤起微信小程序。但针对该标签设置样式非常地蛋疼。

这篇文章主要介绍,如何在 <wx-open-launch-weapp> 写样式的踩坑过程(以 React 为例)。

由于在 <wx-open-launch-weapp> 添加样式会非常多的问题,可能各种不生效。

因此,我会这样去设计:container 为点击唤起小程序的区域(相对定位),而 content 则是该区域的展示内容,wx-open-launch-weapp 则是占满唤起区域(绝对定位)。

<div class="container">
  <div class="content">页面内容</div>
  <wx-open-launch-weapp>省略了一部分代码</wx-open-launch-weapp>
</div>
.container {
  position: relative;
  margin: 30px;
  height: 182px;
}

.content {
  width: 100%;
  height: 100%;
}

为什么要这样设计?后面的方案会给出答案。

以上为简化版,完整示例请看文章末尾。

1. 方案一

当前这个需求,由于我的 content 只是一张图片,所以我的第一个想法是这样的。

为了方便对比效果,分别设置了背景色。其中紫色部分为 <wx-open-launch-weapp> 区域,粉红部分为 <script type="text/wxtag-template"> 区域。

<div class="container">
  <wx-open-launch-weapp
    username="gh_xxxxxxxx"
    path="pages/index/index.html"
    style={{ width: '100%', height: '100%', opacity: 0.3, background: 'blue' }}
  >
    <script type="text/wxtag-template">
      <div style={{ opacity: 0.3, background: 'red' }} />
    </script>
  </wx-open-launch-weapp>
</div>
.container {
  margin: 30px;
  height: 182px;
  background-image: url(../../../images/banner-movecar.png);
  background-repeat: no-repeat;
  background-position: center center;
  background-size: 100% 100%;
}

<wx-open-launch-weapp> 宽高设为 100%,我们先看下效果:

这时候只出现了紫色部分,且紫色部分点击也没有任何效果,不能唤起小程序。然后,我想是不是 <script type="text/wxtag-template"> 未设置宽高的问题,将其设置为 100% 之后,效果一样均无效。

2. 方案二

由于上一个方案流产之后,马上想到会不会是 100% 不生效,于是想着将宽高设置为具体值。如下:

<div class="container">
  <wx-open-launch-weapp
    username="gh_xxxxxxxx"
    path="pages/index/index.html"
    style={{ width: '6.9rem', height: '1.82rem', opacity: 0.3, background: 'blue' }}
  >
    <script type="text/wxtag-template">
      <div style={{ width: '100%', height: '100%', opacity: 0.3, background: 'red' }} />
    </script>
  </wx-open-launch-weapp>
</div>

效果如上,尽管 <wx-open-launch-weapp> 占满 container 的宽度。可高度。。。接着我尝试设为 {{ width: '6.9rem', height: '100%' }},效果完全一致,高度仍无法占满 container 的高度。

PS:由于我拿到的是最为常见的 750px 的视觉设计稿,因此 100px 对应的是 1rem。在打包过程,会采用相应的 loader 去进行单位的转换。由于 loader 只能处理 csslessscss 等文件,而无法处理内联的样式,所以我这里会写成 rem 为单位。

我又想是不是 rem 单位问题,然后我又改为 {{ width: '690px', height: '182px' }} 看看有什么不一样,但高度仍然如上图一样,可宽度倒是有变化。

多次调整宽高及其单位后发现:宽度可控,可高度始终如一

无奈.jpg

3. 方案三

到这里想吐了,我想着先解决 <wx-open-launch-weapp> 占满 container 的问题,暂时忽略 <script type="text/wxtag-template"> 的问题。

既然方案二尝试了各种可能性,无论怎么设置宽高仍不尽人意。于是采用绝对布局看看:

由于此前设置了 background 来区分,于是将 <script type="text/wxtag-template"> 区域宽度暂时设为 90%,方便对比结果。

<div class="container">
  <wx-open-launch-weapp
    username="gh_xxxxxxxx"
    path="pages/index/index.html"
    style={{ position: 'absolute', width: '100%', height: '100%', opacity: 0.3, background: 'blue' }}
  >
    <script type="text/wxtag-template">
      <div style={{ width: '90%', height: '100%', opacity: 0.3, background: 'red' }} />
    </script>
  </wx-open-launch-weapp>
</div>
.container {
  position: relative
  /* 其他无变化 */
}

好像看到希望了,<wx-open-launch-weapp> 已经占满 container 了。

但是这时候 <script type="text/wxtag-template"> 的区域仍然没有展示出来,那我是不也要设为绝对布局呢,试试看:

<div class="container">
  <wx-open-launch-weapp
    username="gh_xxxxxxxx"
    path="pages/index/index.html"
    style={{ position: 'absolute', width: '100%', height: '100%', opacity: 0.3, background: 'blue' }}
  >
    <script type="text/wxtag-template">
      <div style={{ position: 'absolute', width: '90%', height: '100%', opacity: 0.3, background: 'red' }} />
    </script>
  </wx-open-launch-weapp>
</div>

效果如下:

PS:注意这里宽度其实是没问题的,写成 100% 就能横向占满。

好像快成功了,高度还是不对。其中紫色部分属于 <wx-open-launch-weapp>,而粉红部分属于 <script type="text/wxtag-template">。所以点击粉红区域可以正常唤起小程序了。

细心的同学可能发现了,缺的那部分高度跟未设置布局时的高度是一样的,为什么会这样,我也没找到原因。有知道的同学可以告诉我哦,谢谢。

若将 <script type="text/wxtag-template"> 设为 relative 布局,我试了,发现是不行的。

然后,又想到将 top 设为 0,发现可以了。

为了兼容性,于是我谨慎地将 topleft 均设为 0

到这里,感觉可以收尾了。

4. 最终解决方案

回到文章开头的设计:

container 为点击唤起小程序的区域(相对定位),而 content 则是该区域的展示内容,wx-open-launch-weapp 则是占满唤起区域(绝对定位)。

考虑到上面就一个宽高的问题,就那么难搞了。所以我想把页面元素与唤起小程序的区域分开来,是不是省心很多。

完整示例:

import React, { useState } from 'react'
import style from './index.scss'

export default function Demo() {
  return (
    <div className={style.container}>
      <div className={style.content}>
        {/* 这里写页面内容 */}
      </div>
      <wx-open-launch-weapp
        username="gh_xxxxxxxx"
        path="pages/index/index.html"
        style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%' }}
      >
        <script type="text/wxtag-template">
          {/* 这里唤起小程序的点按区域 */}
          <div style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', opacity: 0 }} />
        </script>
      </wx-open-launch-weapp>
    </div>
  )
}
// index.scss
.container {
  position: relative;
  margin: 30px;
  height: 182px;
}

.content {
  width: 100%;
  height: 100%;
  background-image: url(../../../images/banner-movecar.png);
  background-repeat: no-repeat;
  background-position: center center;
  background-size: 100% 100%;
}

这个过程差点吐血,可喜的是可以愉快地唤起小程序了。

The end.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容