我已经创建了这个响应式布局,但我对它的实现不满意,因为它使用了JavaScript。出于各种原因,我想要一个纯CSS解决方案,主要的一个是我想动画他们。
下面是我正在寻找的响应行为的JSX和屏幕截图。基本上我想知道哪个CSS应用于SplitContent
,SplitContentLeft
和SplitContentRight
来实现这个效果。
<SplitContent>
<SplitContentLeft>First</SplitContentLeft>
<SplitContentRight>Second</SplitContentRight>
<SplitContentRight>Third</SplitContentRight>
<SplitContentLeft>Fourth</SplitContentLeft>
<SplitContentLeft>Fifth</SplitContentLeft>
</SplitContent>
移动的布局
桌面布局
编辑:
既然有人问了,下面是使用TypeScript将元素排序到自己的数组中的实现。子组件只是没有样式的div。
import { twMerge } from "tailwind-merge";
import React from "react";
import { SplitContentLeft } from "./SplitContentLeft";
import { SplitContentRight } from "./SplitContentRight";
export type SplitContentProps = React.ComponentPropsWithoutRef<"div">;
export const SplitContent: React.FC<SplitContentProps> = ({
className,
children,
...props
}) => {
const leftChildren: React.ReactElement[] = [];
const rightChildren: React.ReactElement[] = [];
React.Children.forEach(children, (child) => {
if (React.isValidElement(child)) {
if (child.type === SplitContentLeft) {
leftChildren.push(child);
return;
}
if (child.type === SplitContentRight) {
rightChildren.push(child);
return;
}
}
});
return (
<div
className={twMerge("flex w-full gap-4 sm:gap-6", className)}
{...props}
>
<div className={"flex w-full flex-col gap-4 sm:hidden"}>{children}</div>
<div className={"hidden w-full flex-col gap-6 sm:flex sm:justify-center"}>
{leftChildren}
</div>
<div className={"hidden w-full flex-col gap-6 sm:flex sm:justify-center"}>
{rightChildren}
</div>
</div>
);
};
1条答案
按热度按时间ncecgwcz1#
使用CSS Grid:
试试看:
将其转换为JSX应该很简单。