如何覆盖 React 本机 web 预定义的 css

Posted

技术标签:

【中文标题】如何覆盖 React 本机 web 预定义的 css【英文标题】:How to override React native web pre defined css 【发布时间】:2020-09-02 04:08:56 【问题描述】:

我正在将我的 expo 应用程序转换为 react-native-web,我在显示 Image 时遇到了问题。默认情况下 react-native-web 使用 position:absolute 向 Image 添加一个类。我想重写那个类,这是我的代码。

反应原生代码

<View>
    <Image
                style=width: '80%', height: '35%',position: 'relative'
                source=require('../../assets/images/stn_logo.png')
                 title="Logo" border="0"
              />
  </View>

从 chrome 元素转换的代码

<div class="css-view-1dbjc4n r-flexBasis-1mlwlqe r-overflow-1udh08x r-zIndex-417010" style="height: 35%; position: relative; width: 80%;">
    <div class="css-view-1dbjc4n r-backgroundColor-1niwhzg r-backgroundPosition-vvn4in r-backgroundRepeat-u6sd8q r-backgroundSize-4gszlv r-bottom-1p0dtai r-height-1pi2tsx r-left-1d2f490 r-position-u8s1d r-right-zchlnj r-top-ipm5af r-width-13qz1uu r-zIndex-1wyyakw" style="background-image: url(&quot;/static/media/stn_logo.153bbaf1.png&quot;);"></div>
    <img  draggable="false" src="/static/media/stn_logo.153bbaf1.png" class="css-accessibilityImage-9pa8cd">
</div>

在这里你可以看到 My React css 添加到 Parent div 但在 img 标签上 react-native-web 添加了一个类 css-accessibilityImage-9pa8cd,下面的 CSS 来自 chrome

    .css-accessibilityImage-9pa8cd 
    bottom: 0px;
    height: 100%;
    left: 0px;
    opacity: 0;
    position: absolute;
    right: 0px;
    top: 0px;
    width: 100%;
    z-index: -1;

我想将 position 覆盖为 relative。我已经将 position:relative 设置为 React-Native Image 元素。 谁能帮我更改 React-native-web 的预定义 CSS

【问题讨论】:

在 index.html 中覆盖 CSS 你找到这个了吗?这发生在我的 Ignite Bowser 反应原生样板与 expo 中。 @Sigex 覆盖 index.html 中的 css 类 是什么让您认为存在 index.html?这是一个 react native 项目,使用 react native web 来生成移动应用的 web 版本。 @Sigex 当然是react native web生成index.html,先了解它是怎么工作的。由我使用弹出的 expo 应用程序。 【参考方案1】:

我在这个问题上遇到了麻烦,就像您使用的是非弹出的 expo react native 一样,并且没有 index.html 文件。解决此问题的一种方法是为丢失的图像定义高度和宽度像素。

我刚刚想到的另一种方法是创建@zulqarnain 提到的 index.html 文件——要创建它,您需要运行 expo customize:web 并选择 web/index.html,点击空格键,然后然后按回车。 -- 有关文档,请参阅 https://docs.expo.io/guides/customizing-webpack/#editing-static-files。

您可以从那里访问该文件并覆盖表单的 CSS。我在 index.html 的样式部分添加了这个

.css-accessibilityImage-9pa8cd
      inset: 0px;
    height: 100%;
    opacity: 0;
    position: relative;
    width: 100%;
    z-index: -1;
  

【讨论】:

【参考方案2】:

我想补充一点,&lt;img&gt; 标签并不是用来显示图像的。它似乎只是为了增加可访问性而存在,并且在设计上是不可见的。

图像实际上是使用&lt;img&gt; 元素正上方的&lt;div&gt; 元素显示的,并使用background-image 属性和background-size:cover。它的高度和宽度为 100%,因此它的大小来自父级 &lt;div&gt;

“真正的”问题是父级没有尺寸,因此应该显示图像的子级&lt;div&gt; 没有尺寸。这是与此处的其他答案相同的两个修复程序,但对它们的工作原理进行了一些补充说明:

    第一个修复是在 React Native 中为 Image 组件添加高度和宽度。这会为父 &lt;div&gt; 添加高度和宽度,从而为显示图像的子 &lt;div&gt; 提供尺寸。 另一个对我来说似乎有点问题的修复方法是将隐藏的&lt;img&gt; 标记更改为position:absoluteposition:relative。这与第一个修复方法类似,通过为父 &lt;div&gt; 提供尺寸,然后显示图像的子 &lt;div&gt; 继承该尺寸。

【讨论】:

以上是关于如何覆盖 React 本机 web 预定义的 css的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自定义 css 文件覆盖 react-bootstrap

如何为 react-native 本机 ui 组件创建打字稿类型定义?

如何添加您自己的自定义 css 以覆盖 react-confirm-alert 默认值

需要一个测试框架来测试IOS Native + React本机App

带有用于 IPC 的 WndProc 覆盖的本机 SendMessage 不起作用

如何覆盖现有的 react-native 原生组件