我需要帮助将一个div
覆盖到另一个div
上。
我的代码如下所示:
<div class="navi"></div>
<div id="infoi">
<img src="info_icon2.png" height="20" width="32"/>
</div>
不幸的是,我不能将div#infoi
或img
嵌套在第一个div.navi
中。
它必须是两个独立的div
,如图所示,但我需要知道如何将div#infoi
放置在div.navi
上,并放置在div.navi
的最右侧和顶部中心。
9条答案
按热度按时间ryevplcw1#
我建议学习
position: relative
和position: absolute
的子元素。kxxlusnw2#
公认的解决方案效果很好,但IMO缺乏解释为什么它能起作用。下面的例子归结为基础,并将重要的CSS与不相关的样式CSS分开。作为奖励,我还包括了CSS定位如何工作的详细解释。
问题
有两个独立的同级元素,目标是定位第二个元素(
id
为infoi
),使其出现在前一个元素(class
为navi
的元素)中。拟定解决方案
为了达到预期的结果,我们将移动或定位第二个元素(我们称之为
#infoi
),使其出现在第一个元素(我们称之为.navi
)中,具体来说,我们希望#infoi
位于.navi
的右上角。CSS职位所需知识
CSS有几个属性来定位元素。默认情况下,所有元素都是
position: static
。这意味着元素将根据它在HTML结构中的顺序来定位,只有少数例外。其他
position
值为relative
、absolute
、sticky
和fixed
。通过将元素的position
设置为这些其他值之一,现在可以使用以下四个属性的组合来定位元素:top
right
bottom
left
换句话说,通过设置
position: absolute
,我们可以添加top: 100px
,使元素位于距页面顶部100像素的位置;相反,如果设置bottom: 100px
,元素将位于距页面底部100像素的位置。这里是许多CSS新手迷失的地方-
position: absolute
有一个参考框架。在上面的例子中,参考框架是body
元素。position: absolute
与top: 100px
意味着元素的位置距离body
元素的顶部100像素。位置参照系或位置上下文可以通过将父元素的
position
设置为***position: static
***以外的任何值来改变。也就是说,我们可以通过给定父元素来创建一个新的位置上下文:position: relative;
position: sticky;
position: fixed;
例如,如果为
<div class="parent">
元素指定了position: relative
,则任何子元素都将使用<div class="parent">
作为其位置上下文。如果为子元素指定了position: absolute
和top: 100px
,则该元素将定位在距离<div class="parent">
元素顶部100个像素的位置,因为<div class="parent">
现在是位置上下文。在此示例中,如果两个
<div>
元素位于页面上的同一位置,则<div>Top</div>
元素将覆盖<div>Bottom</div>
元素。由于<div>Top</div>
在HTML结构中位于<div>Bottom</div>
之后,因此它具有较高的堆叠顺序。x一个一个一个一个x一个一个二个x
堆叠顺序可以通过CSS使用
z-index
或order
属性进行更改。在这个问题中,我们可以忽略堆叠顺序,因为元素的自然HTML结构意味着我们希望在
top
上显示的元素在另一个元素之后。所以,回到手头的问题--我们将使用位置上下文来解决这个问题。
解决方案
如上所述,我们的目标是定位
#infoi
元素,使其出现在.navi
元素中。为此,我们将把.navi
和#infoi
元素 Package 在一个新元素<div class="wrapper">
中,以便创建一个新的位置上下文。然后通过为
.wrapper
指定position: relative
来创建新的位置上下文。有了这个新的位置上下文,我们可以将
#infoi
定位在.wrapper
中。首先,给#infoi
一个position: absolute
,这样我们就可以将#infoi
绝对定位在.wrapper
中。然后将
top: 0
和right: 0
相加,将#infoi
元素定位在右上角,记住,因为#infoi
元素使用.wrapper
作为其位置上下文,所以它将位于.wrapper
元素的右上角。因为
.wrapper
只是.navi
的容器,所以将#infoi
定位在.wrapper
的右上角会产生定位在.navi
的右上角的效果。现在,
#infoi
显示在.navi
的右上角。结果
下面的示例是最基本的,包含一些最小的样式。
备用(网格)解决方案
这里有一个替代的解决方案,使用CSS Grid将
.navi
元素与#infoi
元素放在最右边,我使用了详细的grid
属性来使它尽可能清晰。备用(无 Package 器)解决方案
在我们不能编辑任何HTML的情况下,这意味着我们不能添加 Package 器元素,我们仍然可以达到预期的效果。
在
#infoi
元素上不使用position: absolute
,而是使用position: relative
,这允许我们将#infoi
元素从默认位置重新定位到.navi
元素下面,对于position: relative
,我们可以使用负的top
值将其从默认位置上移。以及使用left: calc(100% - 52px)
将100%
减去几个像素的left
值定位在右侧附近。cedebl8k3#
新的Grid CSS规范提供了一个更优雅的解决方案。使用
position: absolute
可能会导致重叠或缩放问题,而Grid将使您免于肮脏的CSS黑客攻击。最小网格覆盖示例:
就是这样。如果你不为InternetExplorer构建,你的代码很可能会工作。
jqjz2hbq4#
通过使用带有
z-index:1;
和position: absolute;
样式的div
,您可以将您的div
覆盖在任何其他div
上。z-index
确定div“堆栈”的顺序。z-index
值较高的div将出现在z-index
值较低的div之前。请注意,此属性仅适用于定位元素。sg3maiej5#
您需要添加一个具有
relative position
的父项,在此父项中,您可以设置div的absolute position
最终结果:
https://codepen.io/hiteshsahu/pen/XWKYEYb?editors=0100
设置HTML正文全角
然后,可以设置div的相对位置,使其具有完整的宽度和高度
在相对位置的div中,您可以放置绝对位置的div
在容器上方顶部
在容器上方的底部
在集装箱上方的中央
jaxagkaj6#
下面是一个100%基于CSS的简单解决方案。"秘密"是在 Package 器元素中使用
display: inline-block
。图像中的vertical-align: bottom
是一个黑客攻击,以克服一些浏览器在元素后添加的4px填充。display: block
--通常是一个好的和旧的div
--将 Package 器" Package "在一个容器内。fjaof16o7#
这就是你所需要的:
yws3nbqq8#
我不是一个很好的程序员,也不是CSSMaven,但我仍然在我的网页设计中使用你的想法。我也尝试过不同的解决方案:
当然,它们都有一个 Package 器。你可以控制菜单div的位置,它将显示在标题div中,左边距和顶部位置。如果你喜欢,你也可以设置菜单div向右浮动。
bf1o4zei9#
下面是一个简单的例子,通过加载图标在另一个div上产生叠加效果。
在这里试试:http://jsbin.com/fotozolucu/edit?html,css,output