在本地创建CSS圆


75

我在用react-native创建CSS圈子时遇到了一些麻烦。以下内容适用于iPhone 6 Plus,但在所有其他iPhone中,它们都是钻石。

circle: {
  height: 30,
  width: 30,
  borderRadius: 30,
}

现在,如果我在PixelRatio上使用它,borderRadius则可以在iPhone 6 plus以外的所有设备上使用。iPhone 6 plus将其渲染为带有圆角的盒子。

circle: {
  height: 30,
  width: 30,
  borderRadius: 30 / PixelRatio.get(),
}

Answers:


72

您的边界半径应为宽度和高度的一半。如下所示:

circle: {
   width: 44,
   height: 44,
   borderRadius: 44/2
}

10
borderRadius: '50%'在React16和RN 0.49中引发错误。我只是在谷歌搜索并找到此页面之前尝试过。
agm1984

3
在android中,它看起来不像圆形,它像圆角矩形
khalifathul

1
在Android像素比例3:(宽度= 64,边框半径= 32)=>圆角矩形; (宽度= 64,边界半径= 64)=>圆。在iOS像素比例2:(width = 64,border-radius = 32)=>圆圈;(宽度= 64,边界半径= 32)=>菱形。两者都难以调整
Darko Maksimovic

37

这些都不符合我的需要,如果您需要响应圈子,可以尝试使用我的解决方案:

第1步:从react native导入维度 (和其他使用的元素)(或添加到现有的导入列表中)

import { Dimensions, TouchableHighlight, Text } from 'react-native';

第2步:添加可触摸的元素(您可以计算设备的宽度或高度)

    <TouchableHighlight
      style = {{
        borderRadius: Math.round(Dimensions.get('window').width + Dimensions.get('window').height) / 2,
        width: Dimensions.get('window').width * 0.5,
        height: Dimensions.get('window').width * 0.5,
        backgroundColor:'#f00',
        justifyContent: 'center',
        alignItems: 'center'
      }}
      underlayColor = '#ccc'
      onPress = { () => alert('Yaay!') }
    >
      <Text> Mom, look, I am a circle! </Text>
    </TouchableHighlight>

第3步:享受响应式圆圈元素

反应本机圆圈按钮


仍然完全无法在S10手机上发出通知
Olli

36

borderRadius应该是正方形的一半。因此,无论您使用哪种像素比率,您的情况都是15。

30 / PixelRatio.get()仅适用于2倍的视网膜设备,导致结果为15。然后,对于iPhone 6 Plus,您确实得到了一个圆角框,因为结果为10(像素比率为3)。

令您惊讶的是,它在30英寸30x30的iPhone 6 Plus上也能正常工作。


1
感谢您解释为什么PixelRatio.get不起作用并强调我们只应使用50%的方形边。
Noitidart


9

如果您想制作一个可以在任何设备上使用的圆,那么您唯一要做的就是给出相同heightwidth相同的值,然后给出borderRadius一个非常高的值,我个人给它定为1000,因此对于大多数案件

circle :{
 height : 30 ,
 width :30,
 borderRadius: 1000,
}

嗨,欢迎来到stackoverflow。好的答案,您添加了示例。添加了解释。保持良好的工作。
DARK_A

我认为在react native上构建圆圈的一种更稳定的方法是确保borderRadius值恰好是宽度和高度的一半。在某些设备上,此圆圈可能看起来很奇怪或被裁剪。
Gabcvit

0

我一直在使用该styled-components包来设置我的React Native组件的样式,发现的最简单的解决方案是将border radiuspx的大小设置为大于圆形将具有的宽度的一半。然后,对于小于该值的任何大小,默认情况下将等于50%的边界半径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.