Created column schemd

This commit is contained in:
Maximus 2022-08-22 17:49:17 +03:00
parent 9376f9db09
commit fa308f11d1
2 changed files with 130 additions and 0 deletions

View File

@ -0,0 +1,35 @@
.left-bar {
grid-area: lb;
}
.main-bar {
grid-area: main;
}
.right-bar {
grid-area: rb;
}
.column-layout-grid {
display: grid;
grid-template-columns: 1fr;
grid-template-areas: "main" "rb";
}
@media (min-width: 768px) {
.column-layout-grid {
display: grid;
grid-template-columns: minmax(300px, 1fr);
grid-template-areas:
"lb main"
"lb rb";
}
}
@media (min-width: 1280px) {
.column-layout-grid {
display: grid;
grid-template-columns: 300px 1fr 300px;
grid-template-areas: "lb main rb";
}
}

View File

@ -0,0 +1,95 @@
import React, { Fragment, useState, useRef, useEffect } from "react";
import { Dialog, Transition } from "@headlessui/react";
import { BottomSheetModal } from "components/containers/modal/BottomSheetModal";
import { BottomBarAcceptCookies } from "components/containers/modal/BottomBarAcceptCookies";
import { Button } from "components/Button/Button";
import classNames from "classnames";
import "./ColumnLayout.css";
import { container } from "webpack";
/* -------------------------------------------------------------------------- */
/* Custom hook to track container width */
/* -------------------------------------------------------------------------- */
const useScreenWidth = () => {
const ref: any = useRef();
const [width, setWidth] = useState<null | number>(null);
const observer = useRef(
new ResizeObserver((entries) => {
const { width } = entries[0].contentRect;
setWidth(width);
})
);
useEffect(() => {
observer.current.observe(ref.current);
}, [ref, observer]);
return [ref, width];
};
/* -------------------------------------------------------------------------- */
/* Component properties */
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
/* Component function */
/* -------------------------------------------------------------------------- */
export function ColumnLayout() {
const mdScreen = 768;
//Hooks
const [ref, widthElement] = useScreenWidth(); // to track width of screen
const [openLeftBar, setOpenLeftBar] = useState(false); //to open or close left bar
function leftBar() {
return setOpenLeftBar(!openLeftBar);
}
// Change openLeftBar when width of screen > 768
useEffect(() => {
if (widthElement > mdScreen) {
setOpenLeftBar(false);
}
});
return (
<div ref={ref} className="w-full px-2 xl:px-12 column-layout-grid">
<Transition
appear
as={Fragment}
show={widthElement < mdScreen ? openLeftBar : true}
enter={classNames(
widthElement < mdScreen
? "ease-in-out duration-150"
: "transition-none"
)}
enterFrom="-translate-x-full"
enterTo="translate-x-0"
leave="ease-in-out duration-150"
leaveFrom="translate-x-0"
leaveTo="-translate-x-full"
>
<div
className={classNames("h-full bg-blue-600 left-bar", {
"fixed inset-0 w-80": widthElement < mdScreen,
})}
>
ffadfag
</div>
</Transition>
<div className="text-gray-900 bg-blue-200 h-full main-bar">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Accusamus ad,
autem quas hic architecto iusto maxime veritatis laborum. Quas ducimus
sequi impedit harum tempora est nesciunt porro assumenda animi
temporibus?
<div className="h-96 bg-blue-100"></div>
<div className="h-96 bg-blue-400"></div>
<div className="h-96 bg-blue-700"></div>
<div className="h-96 bg-blue-100"></div>
<div className="h-96 bg-blue-200"></div>
<div className="h-96 bg-blue-800"></div>
</div>
<div className="h-full bg-blue-400 right-bar">dflajdfjlj</div>
</div>
);
}