Компоненты реакции перекрывают друг друга

#css #reactjs #flexbox

Вопрос:

Компонент «Боковая панель» и другой компонент, такой как «Тема», перекрываются, и я не знаю, как это остановить.
Я искал другие вопросы в StackOverflow и обнаружил, что использование flexbox полезно, но это не сработало для меня, как показано на рисунке.
Перекрывающиеся Компоненты Вот мой код.
Приложение.js:

 import React, { Component } from 'react'; import { BrowserRouter, Route } from 'react-router-dom'; import { connect } from 'react-redux'; import * as actions from '../actions';  import SideBar from './sideBar/SideBar'; import Landing from './landing/Landing'; import Home from './home/Home' import Subjects from './subjects/Subject' import "./app.css";  const App = () =gt; {  return (  lt;divgt;  lt;BrowserRoutergt;  lt;div className="app"gt;  lt;Route path="/app" component={SideBar} /gt;  lt;Route exact path="/" component={Landing} /gt;  lt;Route exact path="/app" component={Home} /gt;  lt;Route exact path="/app/subjects" component={Subjects} /gt;  lt;/divgt;  lt;/BrowserRoutergt;  lt;/divgt;  ); };  export default connect(null, actions)(App);  

приложение.css:

 .app {  display: flex;  flex-direction: row; }  

Subject.js:

 import React from "react"; import { Card, Button } from 'react-bootstrap';  const Subjects = () =gt; {  return (  lt;Card style={{ width: '18rem' }}gt;  lt;Card.Img variant="top" src="holder.js/100px180" /gt;  lt;Card.Bodygt;  lt;Card.Titlegt;Card Titlelt;/Card.Titlegt;  lt;Card.Textgt;  Some quick example text to build on the card title and make up the bulk of  the card's content.  lt;/Card.Textgt;  lt;Button variant="primary"gt;Go somewherelt;/Buttongt;  lt;/Card.Bodygt;  lt;/Cardgt;  ) };  export default Subjects;  

SideBar.js:

 import React, { useState } from 'react'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import { ProSidebar, Menu, MenuItem, SubMenu, SidebarContent, SidebarFooter, SidebarHeader } from 'react-pro-sidebar'; import 'react-pro-sidebar/dist/css/styles.css'; import { FiHome, FiLogOut, FiArrowLeftCircle, FiArrowRightCircle } from "react-icons/fi"; import { BiCog } from "react-icons/bi"; import { RiFilePaper2Fill } from "react-icons/ri"; import { AiFillTrophy } from "react-icons/ai"; import "./SideBar.css";  const Header = () =gt; {  const [menuCollapse, setMenuCollapse] = useState(false);   const menuIconClick = () =gt; {  menuCollapse ? setMenuCollapse(false) : setMenuCollapse(true);  };   return (  lt;gt;  lt;div id="header"gt;  {/* collapsed props to change menu size using menucollapse state */}  lt;ProSidebar collapsed={menuCollapse}gt;  lt;SidebarHeadergt;  lt;div className="logotext"gt;  {/* small and big change using menucollapse state */}  lt;pgt;{menuCollapse ? "Logo" : "Big Logo"}lt;/pgt;  lt;/divgt;  lt;div className="closemenu" onClick={menuIconClick}gt;  {/* changing menu collapse icon on click */}  {menuCollapse ? (  lt;FiArrowRightCircle/gt;  ) : (  lt;FiArrowLeftCircle/gt;  )}  lt;/divgt;  lt;/SidebarHeadergt;  lt;SidebarContentgt;  lt;Menu iconShape="square"gt;  lt;MenuItem icon={lt;FiHome /gt;}gt;  Home  lt;Link to="/app" /gt;  lt;/MenuItemgt;  lt;MenuItem icon={lt;RiFilePaper2Fill /gt;}gt;  Subjects  lt;Link to="/app/subjects" /gt;  lt;/MenuItemgt;  lt;MenuItem icon={lt;AiFillTrophy /gt;}gt;Rankinglt;/MenuItemgt;  lt;MenuItem icon={lt;BiCog /gt;}gt;Settingslt;/MenuItemgt;  lt;/Menugt;  lt;/SidebarContentgt;  lt;SidebarFootergt;  lt;Menu iconShape="square"gt;  lt;MenuItem icon={lt;FiLogOut /gt;}gt;  Logout  lt;Link to="/api/logout" /gt;  lt;/MenuItemgt;  lt;/Menugt;  lt;/SidebarFootergt;  lt;/ProSidebargt;  lt;/divgt;  lt;/gt;  ); };  function mapStateToProps({ auth }) {  return { auth };// === { auth: state.auth } }  export default connect(mapStateToProps)(Header);  

Боковая панель.css:

 #header {  position: absolute;  width: 220px;  display: flex; } #header .pro-sidebar {  height: 100vh; } #header .closemenu {  color: #000;  position: absolute;  right: 0;  z-index: 9999;  line-height: 20px;  border-radius: 50%;  font-weight: bold;  font-size: 22px;  top: 55px;  cursor: pointer; } #header .pro-sidebar {  width: 100%;  min-width: 100%; } #header .pro-sidebar.collapsed {  width: 80px;  min-width: 80px; } #header .pro-sidebar.collapsed ul .pro-inner-item {  font-size: 0px; }  #header .pro-sidebar-inner {  background-color: white;  box-shadow: 0.5px 0.866px 2px 0px rgba(0, 0, 0, 0.15);  /*  周りの枠線  */ } #header .pro-sidebar-inner .pro-sidebar-layout {  overflow-y: hidden; } #header .pro-sidebar-inner .pro-sidebar-layout .logotext p {  /*  Logo and Big Logo above  */  font-size: 20px;  padding: 0 20px;  color: rgb(202, 15, 15);  font-weight: bold; } #header .pro-sidebar-inner .pro-sidebar-layout ul {  padding: 0 0px; } #header .pro-sidebar-inner .pro-sidebar-layout ul .pro-inner-item {  /*  color of the list(Home, Subjects, etc...)  */  color: rgb(0, 0, 0);  margin: 10px 0px;  font-weight: bold; } #header .pro-sidebar-inner .pro-sidebar-layout ul .pro-inner-item .pro-icon-wrapper {  /*  Each Icon's properties  */  background-color: #fbf4cd;  color: rgb(0, 0, 0);  border-radius: 3px; } #header .pro-sidebar-inner .pro-sidebar-layout ul .pro-inner-item .pro-icon-wrapper .pro-item-content {  color: #000; }  #header .logo {  padding: 20px; }  @media only screen and (max-width: 720px) {  html {  overflow: hidden;  } }  

Ответ №1:

Во-первых, вам нужно поделиться стилем боковой панели

Боковая панель не действует как элемент flex родительского контейнера flex, она принимает какой-то другой стиль.

lt;Subjects /gt; Компонент действует как первый элемент вашего контейнера flex

Если вы не собираетесь изменять стиль lt;Sidebar /gt; компонента, то все, что вы можете сделать, это предоставить margin-left либо контейнеру Flex, либо первому элементу flex

Комментарии:

1. Извините, что не добавил SideBar.js, так как это было довольно долго, и возился. Я добавил сейчас.

2. Вы указали позицию: абсолютная на боковой панели. Это выводит элемент из потока, и он будет расположен абсолютно относительно ближайшего родителя, у которого есть позиция: относительная, Если у вас нет родителя с позицией: относительная, что является вашим случаем, то элемент с позицией: абсолютная расположен относительно окна браузера, которое является вашим случаем. Поэтому вам нужно изменить этот стиль.