CSS만으로 React에서 수평 미디어 스크롤러 구성 요소를 구현하는 방법
이를 위해
styled-components
및 styled-breakpoints
을 사용했지만 이를 다른 CSS-in-JS 접근 방식으로 쉽게 변환할 수 있습니다.import { Container } from 'components/Container';
import { useEffect, useRef } from 'react';
import { down } from 'styled-breakpoints';
import styled from 'styled-components';
const GridContainer = styled(Container)`
${down('sm')} {
max-width: 100%;
margin: unset;
padding: 0;
}
`;
const Grid = styled.div<{ desktopMinWidth: string; mobileMinWidth: string }>`
display: grid;
grid-template-columns: ${({ desktopMinWidth }) => `repeat(auto-fill, minmax(${desktopMinWidth}, 1fr))`};
grid-gap: 18px;
${down('sm')} {
padding: 0 20px;
position: relative;
cursor: grab;
scrollbar-width: none;
-ms-overflow-style: none;
::-webkit-scrollbar {
width: 0px;
background: transparent;
}
display: flex;
overflow-x: auto;
scroll-snap-type: x mandatory;
-webkit-overflow-scrolling: touch;
& > * {
min-width: ${({ mobileMinWidth }) => mobileMinWidth};
max-width: ${({ mobileMinWidth }) => mobileMinWidth};
scroll-snap-align: center;
}
}
`;
interface SwipeableGridProps {
mobileMinWidth: string;
desktopMinWidth: string;
children: React.ReactNode;
className?: string;
}
export const SwipeableGrid = ({
mobileMinWidth,
desktopMinWidth,
children,
className,
}: SwipeableGridProps) => {
const swipeableGridRef = useRef<HTMLDivElement | null>(null);
useEffect(() => {
const currentEl = swipeableGridRef.current;
if (currentEl) {
currentEl.scrollLeft = currentEl.clientWidth / 2;
}
}, []);
return (
<GridContainer>
<Grid
desktopMinWidth={desktopMinWidth}
mobileMinWidth={mobileMinWidth}
ref={swipeableGridRef}
className={className}
>
{children}
</Grid>
</GridContainer>
);
};
Reference
이 문제에 관하여(CSS만으로 React에서 수평 미디어 스크롤러 구성 요소를 구현하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bmstefanski/how-to-implement-horizontal-media-scroller-component-in-react-with-css-only-5d0k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)