在 Tailwind 和 React 顶部显示子菜单时如何保持 div 大小
How to keep div size when showing submenu on top Tailwind and React
使用 Tailwind 和 React - 当点击一个图标时,我会显示一个子菜单,但碰巧当容器 div 显示时,它的高度会自动变大。
如何将此子菜单显示在其他元素之上,以免使其容器 div 变大?我尝试固定,但它从我要求显示的位置移动。
这是代码:
Table 点击时显示子菜单:
<div className="flex flex-wrap m-5 mx-auto w-full pr-2 pl-2">
<div className="w-full px-4">
<div className="flex flex-wrap">
<div className="flex flex-col min-w-0 break-words w-full mb-6 shadow-lg rounded bg-white">
<div className="block w-full overflow-x-auto">
<table className="items-center w-full bg-transparent border-collapse">
<thead className="bg-sky-50">
<tr>
<th className="px-6 align-middle border border-solid py-3 text-xs uppercase border-l-0 border-r-0 whitespace-nowrap font-semibold bg-blueGray-50 text-blueGray-500 border-blueGray-100">
Opciones
</th>
</tr>
</thead>
<tbody>
<tr className="hover:bg-slate-100">
<td className="border-t-0 px-6 align-middle border-l-0 text-center border-r-0 text-xs whitespace-nowrap p-4">
<div>
<OptionsDropDown
showDropdown= { showDropdown }
setShowDropdown = { setShowDropdown }
dataDropDown= { dataDropDown }
/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
菜单组件,这里有图标和我点击它时显示的内容,但它加宽了父级 div:
<div className="flex justify-center">
<button ref={ref}
className="flex items-center
text-black py-2 px-2
text-2xl hover:text-cyan-700"
onClick={ ()=> setShowDropdown(!showDropdown) }>
<FiMoreVertical/>
</button>
{
showDropdown && (
<div className="relative bg-white text-base z-50 py-2 rounded shadow-lg">
{
dataDropDown.map( (option, index) => (
<div key={index}>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.edit}</a>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.delete}</a>
</div>
))
}
</div>
)
}
</div>
这是点击时的截图,使父级 div 的尺寸变大:
这是点击前的样子:
单击容器 div 使其变宽:
在子菜单上使用 abosulte
您最有可能在直接父级上使用 relative
定位寻找 absolute
定位,以便绝对元素的位置锚定到其直接父级。
像这样的东西应该可以工作:
<div className="relative flex justify-center">
{/* NOTE: the relative positioning above */}
<button ref={ref}
className="flex items-center
text-black py-2 px-2
text-2xl hover:text-cyan-700"
onClick={ ()=> setShowDropdown(!showDropdown) }>
<FiMoreVertical/>
</button>
{
showDropdown && (
<div className="absolute right-0 top-1/2 -translate-y-1/2 bg-white text-base z-50 py-2 rounded shadow-lg">
{/* which allows this to anchor */}
{
dataDropDown.map( (option, index) => (
<div key={index}>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.edit}</a>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.delete}</a>
</div>
))
}
</div>
)
}
</div>
虽然我希望您必须稍微调整一下才能获得您想要的结果。可能还值得研究 blur
事件,以便在失去焦点后自动隐藏弹出窗口。
使用 Tailwind 和 React - 当点击一个图标时,我会显示一个子菜单,但碰巧当容器 div 显示时,它的高度会自动变大。
如何将此子菜单显示在其他元素之上,以免使其容器 div 变大?我尝试固定,但它从我要求显示的位置移动。
这是代码:
Table 点击时显示子菜单:
<div className="flex flex-wrap m-5 mx-auto w-full pr-2 pl-2">
<div className="w-full px-4">
<div className="flex flex-wrap">
<div className="flex flex-col min-w-0 break-words w-full mb-6 shadow-lg rounded bg-white">
<div className="block w-full overflow-x-auto">
<table className="items-center w-full bg-transparent border-collapse">
<thead className="bg-sky-50">
<tr>
<th className="px-6 align-middle border border-solid py-3 text-xs uppercase border-l-0 border-r-0 whitespace-nowrap font-semibold bg-blueGray-50 text-blueGray-500 border-blueGray-100">
Opciones
</th>
</tr>
</thead>
<tbody>
<tr className="hover:bg-slate-100">
<td className="border-t-0 px-6 align-middle border-l-0 text-center border-r-0 text-xs whitespace-nowrap p-4">
<div>
<OptionsDropDown
showDropdown= { showDropdown }
setShowDropdown = { setShowDropdown }
dataDropDown= { dataDropDown }
/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
菜单组件,这里有图标和我点击它时显示的内容,但它加宽了父级 div:
<div className="flex justify-center">
<button ref={ref}
className="flex items-center
text-black py-2 px-2
text-2xl hover:text-cyan-700"
onClick={ ()=> setShowDropdown(!showDropdown) }>
<FiMoreVertical/>
</button>
{
showDropdown && (
<div className="relative bg-white text-base z-50 py-2 rounded shadow-lg">
{
dataDropDown.map( (option, index) => (
<div key={index}>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.edit}</a>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.delete}</a>
</div>
))
}
</div>
)
}
</div>
这是点击时的截图,使父级 div 的尺寸变大:
这是点击前的样子:
单击容器 div 使其变宽:
在子菜单上使用 abosulte
您最有可能在直接父级上使用 relative
定位寻找 absolute
定位,以便绝对元素的位置锚定到其直接父级。
像这样的东西应该可以工作:
<div className="relative flex justify-center">
{/* NOTE: the relative positioning above */}
<button ref={ref}
className="flex items-center
text-black py-2 px-2
text-2xl hover:text-cyan-700"
onClick={ ()=> setShowDropdown(!showDropdown) }>
<FiMoreVertical/>
</button>
{
showDropdown && (
<div className="absolute right-0 top-1/2 -translate-y-1/2 bg-white text-base z-50 py-2 rounded shadow-lg">
{/* which allows this to anchor */}
{
dataDropDown.map( (option, index) => (
<div key={index}>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.edit}</a>
<a href="" className="block px-4 py-2 hover:bg-indigo-300">{option.delete}</a>
</div>
))
}
</div>
)
}
</div>
虽然我希望您必须稍微调整一下才能获得您想要的结果。可能还值得研究 blur
事件,以便在失去焦点后自动隐藏弹出窗口。