我试图在基于this article和使用脉轮Modal component的React瓣叶圆圈标记弹出窗口组件中创建一个自定义灯箱效果的图像。实现工作,但我遇到了z轴索引和脉轮用户界面的位置问题。我的目标是把灯箱放在我的所有其余内容的顶部,此时,由于相对定位,模态被放置在Map容器的部分下方。
据我所知,脉轮模态组件应该放置在所有内容之上,但是组件的默认z-索引相对于Leaflet层放置,因此呈现在Map容器的下面。使用文章中的代码和模态组件产生的结果接近我想要的。除了模态灯箱被放置在部分瓣叶图div下方,看起来不美观,关闭按钮被遮挡。
我想把lightbox div放在整个文档的顶部,但是我不知道如何覆盖Modal组件的默认值1400到2400,这样它就可以放在整个Map上。覆盖一个多部分组件有点棘手,而且看起来Modal的z索引值没有在Modal theme definition中指定。我使用Modal组件的lightbox如下:
import React, {useState} from 'react'
import { Modal, ModalContent, ModalBody, ModalCloseButton, Flex, ModalOverlay, ModalHeader, useDisclosure } from '@chakra-ui/react'
const LightBox = ({children, src, alt, Wrapper = 'div'}, zIndex=800) => {
const { isOpen, onOpen, onClose } = useDisclosure()
//const [ isOpen, setisOpen ] = useState(false)
//const toggleIsOpen = () =>{
// setisOpen(!isOpen)
//}
return (
<Wrapper
onClick={onOpen}
>
{children}
{isOpen ?
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent zIndex={zIndex}>
<ModalHeader>
<ModalCloseButton />
</ModalHeader>
<ModalBody>
<Flex
onClick={onClose}
>
<img src={src}
alt={alt}
style={{
height: 'auto',
width: '100%'
}}
/>
</Flex>
</ModalBody>
</ModalContent>
</Modal>
:null}
</Wrapper>
)
}
export default LightBox
可以在this link和sandbox上看到工作代码
更新:我已经尝试了同样的方法使用脉轮模态组件,遭受同样的z索引问题。模态是放在Map容器内,而不是在它的顶部,在内容排序方面。此外,模态不能关闭点击关闭按钮,这是部分模糊。我的CSS不是很好,但是我假设这是关于LeafletMap元素的相对定位的问题。使用Modal实现更新的代码可以是found here,但我没有链接到一个演示,因为实现和结果与我自己的尝试相似。
更新2:所以,我已经意识到我需要做的是通过扩展主题来覆盖脉轮模态的z-索引。这有点棘手,因为模态是一个多部分的组件,但不清楚模态z-索引值在哪里指定,或者如何覆盖它。我正在寻找答案,这将帮助我将值放置在2400或以上。
1条答案
按热度按时间swvgeqrz1#
显然,在z指数和脉轮ui/React瓣叶中使用的z指数值之间存在一些混淆。
快速修复:导航栏右z索引
它是覆盖模态(默认z-index为1400)的导航栏(z-index为2000),如果你使用
zIndex="sticky"
作为导航栏,它也可以工作。在脉轮UI中使用z索引
chakra-ui为你提供了一个最小的z-index集合(文档)来匹配你的大小写。你没有将StickyNav的z-index设置为2000,而是从列表中选择了“sticky”这个标记。一旦你开始使用带Overlay的Modals,它应该会像预期的那样工作。
使用带有正确z轴的react瓣叶
react-leaflet(或leaflet库)使用它自己的一组z索引值(200到700)(文档)来布局Map和它上面的用户界面元素(标记等)。但是,显然,它也使用z索引1000作为左边的缩放元素。虽然chakra-ui默认值没有问题,但如果sticky是1000而不是1100,就可能有问题。
创建新的z轴堆叠上下文
在这种情况下,您可以创建一个新的堆叠上下文(mdn文档)。mdn还告诉您需要应用哪些条件。
在以下情况下,堆叠上下文由任何元素在文档中的任何位置形成:
*Flex容器的子元素,z索引值不是auto。
你使用
<main>
和display:flex
(第四个例子),可以只设置chakra-ui中的子元素z-index为0或“base”,否则你可以设置子元素的位置为relative,z-index为0或“base”(第二个例子)。