meliorence / react-native-render-html

iOS/Android pure javascript react-native component that renders your HTML into 100% native views
https://meliorence.github.io/react-native-render-html/
BSD 2-Clause "Simplified" License
3.46k stars 586 forks source link

Migrating to v6 - absolute positioning not working #598

Open MicahDavid opened 1 year ago

MicahDavid commented 1 year ago

Decision Table

Good Faith Declaration

Description

Using div elements with absolute positioning is not working in v6.x, but works fine in v5.

React Native Information

System:
    OS: macOS 12.6
    CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
    Memory: 161.46 MB / 32.00 GB
    Shell: 3.2.57 - /bin/bash
  Binaries:
    Node: 14.18.1 - ~/.nvm/versions/node/v14.18.1/bin/node
    Yarn: 1.22.18 - ~/.nvm/versions/node/v14.18.1/bin/yarn
    npm: 6.14.15 - ~/.nvm/versions/node/v14.18.1/bin/npm
    Watchman: 2022.03.21.00 - /usr/local/bin/watchman
  Managers:
    CocoaPods: 1.11.3 - /Users/micahsklut/.rbenv/shims/pod
  SDKs:
    iOS SDK:
      Platforms: DriverKit 22.1, iOS 16.1, macOS 13.0, tvOS 16.1, watchOS 9.1
    Android SDK:
      API Levels: 29, 30
      Build Tools: 29.0.2, 30.0.2, 30.0.3
      System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom_64, android-30 | Google APIs Intel x86 Atom
      Android NDK: Not Found
  IDEs:
    Android Studio: 2021.1 AI-211.7628.21.2111.8193401
    Xcode: 14.1/14B47b - /usr/bin/xcodebuild
  Languages:
    Java: 1.8.0_292 - /usr/bin/javac
  npmPackages:
    @react-native-community/cli: Not Found
    react: 18.1.0 => 18.1.0 
    react-native: ^0.70.4 => 0.70.4 
    react-native-macos: Not Found
  npmGlobalPackages:
    *react-native*: Not Found

RNRH Version

6.3.4

Tested Platforms

Reproduction Platforms

Minimal, Reproducible Example

Here is what my html component looks like

<HTML
    contentWidth={screenWidth}
    source={{ html: data.timeline.baseGraph }}
    classesStyles={baseGraphStyles}
/>

Here's a simple example that is not working with absolute positioning. Note the div with absolute positioning also has a style attribute that contains the left positioning and width of the element. The left/width work fine, but the element is not being absolute positioned.

<div id="graph-bg">
  <div id="night" style="left:5.5%;width:6%">Jan</div>
</div>

style example

export const baseGraphStyles = StyleSheet.create({
    'graph-bg': {
        backgroundColor: '#fff',
        borderLeftColor: globalStyles.colors.gray100,
        borderLeftWidth: 1,
        borderRightColor: globalStyles.colors.gray100,
        borderRightWidth: 1,
        borderBottomColor: globalStyles.colors.gray100,
        borderBottomWidth: 1,
        height: 129,
        position: 'relative',
    },
    'night': {
        position: 'absolute',
        height: '100%',
        backgroundColor: globalStyles.colors.gray100
    },
})

Additional Notes

The Code works fine in 5.1.1.

The absolute positioning is not working the v6 versions that I've tested: 6.3.4 and 6.2.0.

jsamr commented 1 year ago

@MicahDavid can't guarantee it will fix it but classesStyles does not expects StyleSheet.create styles, but rather a plain object.

MicahDavid commented 1 year ago

@jsamr Thanks for the suggestion. I did try this, but I had the same result adding the style object inline.

The StyleSheet.create did work previously in v5. I used this approach, because I import the stylesheet in multiple components. But, I suppose, i could just create an object variable to import in multiple places.

anniewey commented 1 week ago

@MicahDavid did u found any solution? i'm having trouble rendering on absolute positioning. mine was all inline styles.

"react-native-render-html": "^6.3.4",