LoginSignup
48
49

More than 1 year has passed since last update.

【Chakra-UI】STack / HStack / VStack を使用すると、子要素の「:not(style)~*:not(style)」に「margin-inline-start: 0.5rem」が付与されて、意図しない「margin-left: 8px」 がある

Posted at

個人的な備忘録です。

環境

  • react: 17.0.2
  • next: 11.1.3
  • @chakra-ui/react: 1.8.5

事象

  • HStack 内の 2つ目以降の子要素から 意図しない margin-left: 8px; が付与されて、デザインが崩れてしまう
<HStack className={styles.list}>
	<div>hoge</div>
	{/* 2つ目以降の要素から意図しない margin-left: 8px; が付与されてしまう */}
	<div>hoge</div>
	<div>hoge</div>
	<div>hoge</div>
</HStack>
.list {
    justify-content: space-between;
	flex-wrap: wrap;
}

Screen Shot 2022-08-16 at 16.43.41.png

Screen Shot 2022-08-16 at 16.43.46.png

原因

  • chakra-ui のコードを確認すると node_modules/@chakra-ui/layout/src/stack.tsx というファイルに spacing = "0.5rem" が記述されている
  • HStack / VStack は、STack をラップしているだけなので、HStack で囲んだ子要素に、デフォルト値の margin-left: 8px; が付与されていた

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3339393631302f34633439373332362d623434652d663834622d643362372d3266376631323136616637662e706e67.png
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3339393631302f61663133313433612d343062642d393332362d333636302d3337313966323464356630322e706e67.png

解決策

1. spacing="0" を明記する

<HStack className={styles.list} spacing="0">
	<div>hoge</div>
	<div>hoge</div>
	<div>hoge</div>
	<div>hoge</div>
</HStack>

2. STack / HStack / VStack をやめて Box などに変えてスタイルで調節する

<Box className={styles.list}>
	<div>hoge</div>
	<div>hoge</div>
	<div>hoge</div>
	<div>hoge</div>
</Box>
.list {
    display: flex;
    justify-content: space-between;
	flex-wrap: wrap;
}

参考文献

48
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
49