material-ui [系统][盒子] 添加一个内嵌属性以实现绝对定位

1tuwyuhd  于 4个月前  发布在  其他
关注(0)|答案(5)|浏览(39)

重复问题

  • 我搜索了现有的问题

最新版本

  • 我测试了最新版本

总结 💡

由于盒子提供了特定页面部分的包含,它主要支持直接使用布局属性,而无需使用“sx”。不幸的是,由于简洁的编码风格,我建议为组件的根添加“inset”作为属性,以避免开发人员处理单个属性“sx”,从而使代码看起来干净且快速。

示例 🌈

这个外部形状CSS在大约96.28%的用户客户端中得到了广泛支持,与Can I Use有关。

动机 🔦

这是一个简短的建议,用于将盒子放置在全屏背景或其他用途中。

<Box position="absolute" inset={0} />

实现这一点的一种方法是使用backdrop或使用带有方向侧属性的位置。

<Box position="absolute" top={0} bottom={0} left={0} right={0} />

另一种方法是将inset作为单独的属性“sx”中的属性,并将position absolute作为直接属性使用。

<Box position="absolute" sx={{ inset: 0 }} />
ohtdti5x

ohtdti5x1#

感谢@muhamadzolfaghari的建议。我不确定这是否是一个足够强的理由来为此目的创建一个独立的 prop ,但我会把它留给其他维护者考虑。

vq8itlhq

vq8itlhq2#

当我在其他框架/库(如Tailwind)中寻找类似的功能时,我发现在<= version 2.*中有inset-0类处理四个方向的位置。由于当时Safari支持的inset零范围为零(2018年),因此将其转换为多个属性。
top: 0; right: 0; bottom: 0; left: 0;
现在,在version 3.*中,inset-0类被转换为精确属性,正如新文档中提到的那样。因为96.28%的浏览器支持inset。
inset: 0

5lhxktic

5lhxktic3#

你好,muhamadzolfaghari。感谢你打开这个问题——对于这个inset={0}属性,你期望它生成什么样的CSS?

a64a0gku

a64a0gku4#

我希望有一个盒子,只支持内嵌(这里只包含两个,固定和绝对定位)。

// proporal component
type AllowedPosition =
  | { position: "absolute"; inset: number }
  | { position: "fixed"; inset: number }
  | { inset?: number }; // just in case of ignore error;

const ProposalBox = ({ inset, ...rest }: BoxProps & AllowedPosition) => (
  <Box {...rest} sx={{ ...rest.sx, inset }} />
);

// render
<ProposalBox position={"absolute"} inset={0} />

因此,确切的CSS类应该是这样的:

.mui-16m8k9i {
    position: absolute;
    inset: 0;
}

或者正式定义

.mui-16m8k9i {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
}
iq3niunx

iq3niunx5#

我将把这个标签为"等待点赞",但我认为这似乎是一个更适合用户界面的简单定制,因为我们没有抽象太多CSS来真正证明添加一个属性是合理的。

相关问题