Запретить перемещение компонентов при открытии бокового меню

Я новичок в веб-разработке и немного борюсь с моим компонентом бокового меню из Ant design.

Это сворачиваемое меню, которое перемещает многие другие компоненты, если щелкнуть, чтобы открыть его.

Я хочу, чтобы все остальные элементы на странице оставались в той же позиции, не привязанной к действиям меню.

Это компонент бокового меню:

    import React from 'react'
    import { Layout, Menu, Breadcrumb, Icon, Button } from 'antd';

    const { Header, Content, Footer, Sider } = Layout;
    const SubMenu = Menu.SubMenu;

    export class SideMenu extends React.Component {

      render() {
        return (
            <Menu
              mode="vertical"
              theme="dark"
              className="side-menu"
            >
              ...
            </Menu>
        )
      }
    }

 Thats my layout component:

import React from 'react'
...
import { Layout, Menu, Icon, Row, Col } from 'antd'

const { Header, Footer, Sider, Content } = Layout

export class App extends React.Component {

  constructor(props) {
    super(props)
    this.state = { collapsed: true }
  }

  toggle() {
    console.log('click')
    this.setState({
      collapsed: !this.state.collapsed
    })
  }

  render() {
    return (
      <Layout className="main-layout">
        <Sider className='sider'
          trigger={null}
          collapsible
          collapsed={this.state.collapsed}
        >
          <div className="app-logo" id="logo">
            <img src="images/logo.png" alt="Augecon_Logo" height="30" width="30"/>
          </div>
          <SideMenu />
        </Sider>
        <Layout>
          <Header className="app-header">
            <Row justify="center" align="middle">
              <Col span={3}>
                <Icon
                  className="app-trigger"
                  type={this.state.collapsed ? 'menu-unfold' : 'menu-fold'}
                  onClick={this.toggle.bind(this)}
                />
              </Col>
              <Col span={10} push={10}>
                <div className="app-info" >Sexta feira 12/01/2018 - 17:58 | Daniel Oliveira</div> <!--This item moves-->
              </Col>
              <Col span={3} push={8}>
                <UserAvatar/><!--This item moves-->
              </Col>
            </Row>
          </Header>
            <Content className="app-background" >
              <div className="div-background">
                <div>
                  <img src="images/sagic.png" alt="sagic" className="img-title" center center fixed/> <!--This item moves-->
                </div>
                <Row type="flex" gutter={32} justify="space-around" className="row-card"> <!--This item moves-->
                  <Col span={7} push={1}>
                    <CardSuporte/>
                  </Col>
                  <Col span={7} push={1}>
                    <CardSugestoes/>
                  </Col>
                  <Col span={7} push={1}>
                    <CardLoja/>
                  </Col>
                </Row>
              </div>
            </Content>
        </Layout>
      </Layout>
    )
  }
}

Это мой компонент макета:

import React from 'react'
import { SideMenu } from './sidemenu.js'
import { UserAvatar} from './avatar.js'
import { CardSuporte} from './cardsuporte.js'
import { CardSugestoes} from './cardsugestoes.js'
import { CardLoja} from './cardloja.js'
import { Layout, Menu, Icon, Row, Col } from 'antd'

const { Header, Footer, Sider, Content } = Layout

export class App extends React.Component {

  constructor(props) {
    super(props)
    this.state = { collapsed: true }
  }

  toggle() {
    console.log('click')
    this.setState({
      collapsed: !this.state.collapsed
    })
  }

  render() {
    return (
      <Layout className="main-layout">
        <Sider className='sider'
          trigger={null}
          collapsible
          collapsed={this.state.collapsed}
        >
          <div className="app-logo" id="logo">
            <img src="images/logo.png" alt="Augecon_Logo" height="30" width="30"/>
          </div>
          <SideMenu />
        </Sider>
        <Layout>
          <Header className="app-header">
            <Row justify="center" align="middle">
              <Col span={3}>
                <Icon
                  className="app-trigger"
                  type={this.state.collapsed ? 'menu-unfold' : 'menu-fold'}
                  onClick={this.toggle.bind(this)}
                />
              </Col>
              <Col span={10} push={10}>
                <div className="app-info" >Sexta feira 12/01/2018 - 17:58 | Daniel Oliveira</div>
              </Col>
              <Col span={3} push={8}>
                <UserAvatar/>
              </Col>
            </Row>
          </Header>
            <Content className="app-background" >
              <div className="div-background">
                <div>
                  <img src="images/sagic.png" alt="sagic" className="img-title" center center fixed/>
                </div>
                <Row type="flex" gutter={32} justify="space-around" className="row-card">
                  <Col span={7} push={1}>
                    <CardSuporte/>
                  </Col>
                  <Col span={7} push={1}>
                    <CardSugestoes/>
                  </Col>
                  <Col span={7} push={1}>
                    <CardLoja/>
                  </Col>
                </Row>
              </div>
            </Content>
        </Layout>
      </Layout>
    )
  }
}

Я уже пробовал некоторые манипуляции с css, такие как {position: fixed, relative, и т. Д.}, Но безрезультатно.


person Michael Fernandes    schedule 24.01.2018    source источник


Ответы (3)


Я знаю, что немного запоздала с ответом ... Обычно я решаю эту проблему следующим образом:

  1. Сделайте положение боковой панели фиксированным, но только в том случае, если у него есть className .ant-sidebar-sider-below

    .ant-layout-sider-below {положение: исправлено; z-индекс: 999; высота: 100%; }

  2. Затем вы можете зафиксировать кнопку запуска меню, когда на боковой панели есть className .ant-layout-sider-collapsed с помощью этого css

    .ant-layout-sider-collapsed .ant-layout-sider-триггер нулевой ширины {положение: исправлено; слева: 4 пикселя; справа: авто; }

Я создал небольшой пример ссылку, надеюсь, это будет кому-то полезно

person Igor Shcherba    schedule 22.07.2020
comment
Ссылка мертва .. :( - person jarthur; 24.05.2021
comment
Нашел ссылку: codepen.io/IgorShcherba/pen/zYrewbP?editors=0110 - person jarthur; 24.05.2021

Когда я делаю мобильные меню, я оборачиваю все свое меню в div с идентификатором nav, а затем убеждаюсь, что весь мой div навигации имеет position: absolute и z-index: 100000, что может быть необязательно, но на всякий случай. Абсолютное положение выводит его из остальной части страницы, поэтому он не взаимодействует с другими элементами (и не подталкивает их, когда меню открыто), а z-index гарантирует, что он всегда отображается поверх другой страницы. элементы. Надеюсь, это поможет!

person Community    schedule 24.01.2018
comment
Как это отвечает на вопрос? Вы читали этот stackoverflow.com/help/how-to-answer? - person Yannis; 24.01.2018
comment
Привет, @Jessica, я пробовала вот так: # app-nav {position: absolute; z-индекс: 100000; } ------ ‹div id = app-nav› ‹SideMenu /› ‹/div› Но остается неизменным. Продолжайте подталкивать другие компоненты. - person Michael Fernandes; 24.01.2018
comment
@Yannis, как это отвечает на вопрос? - person ; 25.01.2018
comment
@MichaelFernandes Я рад, что ты нашел ответ, извини, что не смог помочь! - person ; 25.01.2018
comment
@Jessica Как ваш предложенный ответ отвечает на вопрос? (повторить x3): / - person Yannis; 25.01.2018

Я провел небольшое исследование и обнаружил, что мне действительно пришлось изменить свойства CSS в дизайне муравьев, чтобы достичь ожидаемого результата. Когда я начал это делать (position: absolute), другие компоненты, прикрепленные к боковому меню (например, кнопка, которая заставляет его сворачиваться), не отображаются, как раньше, и становятся скрытыми между другими вещами.

В резюме я прочитал, что это не очень распространенные изменения предварительно построенных компонентов, таких как компоненты дизайнера муравьев.

Наш Владелец продукта решил оставить меню как есть.

Спасибо за помощь!

person Michael Fernandes    schedule 24.01.2018