gpt4 book ai didi

javascript - Overlay 比 React Native 中的父样式组件小

转载 作者:行者123 更新时间:2023-12-03 14:22:11 25 4
gpt4 key购买 nike

我的样式组件存在以下问题。我想用一个新圆圈隐藏背景,但前面的圆圈较小,即使我具有相同的大小值。这是我的代码示例:

import React from "react";
import { StyleSheet, View } from "react-native";

const SIZE = 50;

export default function App() {
return (
<View style={styles.container}>
<View style={styles.layer1} />
<View style={styles.layer2} />
</View>
);
}

const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "white",
alignItems: "center",
justifyContent: "center",
},
layer1: {
width: SIZE,
height: SIZE,
borderWidth: 3,
borderRadius: SIZE / 2,
borderColor: "black",
position: "absolute",
},
layer2: {
width: SIZE,
height: SIZE,
borderWidth: 3,
borderRadius: SIZE / 2,
borderColor: "white",
position: "absolute",
},
});

这里是屏幕截图:

有人知道为什么叠加层比背景层小吗?

致以诚挚的问候和感谢!!!

最佳答案

在我看来是因为 css box-sizing .
大多数浏览器的默认值是 box-sizing: content-box;,padding 和 border-width 会添加到高度和宽度中。
但使用 box-sizing: border-box; 时,padding 和 border-width 包含在设置的宽度和高度内。
所以..
您可能需要添加 box-sizing: border-box;

我通常使用

将其添加到我的整个文档中
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
<小时/>

编辑(添加屏幕截图后)

问题不在于一个圆圈变小了……而只是较暗的边框从下面露出来了。

下面是一个示例,您可以更改颜色和可见性以使错误显而易见。运行代码片段并选中第二个复选框以快速查看它。

function colourChange(e) {
var target = e.target.getAttribute('data-target');
var style = e.target.getAttribute('data-style');
var col = e.target.value;
document.getElementById(target).style[style] = col;
}

function visChange(e) {
var target = e.target.getAttribute('data-target');
document.getElementById(target).style.display = (e.target.checked) ? 'block' : 'none';
}

function toFront(e) {
var other = 'layer1';
if (e.target.value == 'layer1') {
var other = 'layer2';
}
var otherz = document.getElementById(other).style.zIndex;
var layer = document.getElementById(e.target.value);
layer.style.zIndex = parseInt(otherz) + 1;
}

document.getElementById('border-col1').addEventListener('change', colourChange);
document.getElementById('border-col2').addEventListener('change', colourChange);
document.getElementById('background-col1').addEventListener('change', colourChange);
document.getElementById('background-col2').addEventListener('change', colourChange);
document.getElementById('vis1').addEventListener('change', visChange);
document.getElementById('vis2').addEventListener('change', visChange);
document.getElementById('front1').addEventListener('change', toFront);
document.getElementById('front2').addEventListener('change', toFront);
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}

#container {
flex: 1;
background-color: white;
align-items: center;
justify-content: center;
}
#layer1 {
width: 50px;
height: 50px;
border-width: 3px;
border-radius: 25px;
border-color: black;
position: absolute;
border-style: solid;
}
#layer2 {
width: 50px;
height: 50px;
border-width: 3px;
border-radius: 25px;
border-color: white;
position: absolute;
border-style: solid;
}

#inputs {
position: absolute;
top: 0px;
right: 0px;
padding: 10px;
}
<div id="container">
<div id="layer1" style="z-index:1;"></div>
<div id="layer2" style="z-index:2;"></div>
</div>
<div id="inputs">
<div>
border colours
</div>
<input type="color" id="border-col1" data-target="layer1" data-style="borderColor" value="#000000">
<input type="color" id="border-col2" data-target="layer2" data-style="borderColor" value="#ffffff">
<div>
background colours
</div>
<input type="color" id="background-col1" data-target="layer1" data-style="backgroundColor" value="#ffffff">
<input type="color" id="background-col2" data-target="layer2" data-style="backgroundColor" value="#ffffff">
<div>
visibility<br/>(display block / none)
</div>
<input type="checkbox" id="vis1" data-target="layer1" checked>
<input type="checkbox" id="vis2" data-target="layer2" checked>
<div>
in front
</div>
<input type="radio" id="front1" name="front" value="layer1">
<input type="radio" id="front2" name="front" value="layer2">
</div>

关于javascript - Overlay 比 React Native 中的父样式组件小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61128790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com