Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 绝对元素浮动_Html_Css - Fatal编程技术网

Html 绝对元素浮动

Html 绝对元素浮动,html,css,Html,Css,我正在构建一个下拉式导航菜单,当我将位置:绝对应用到li的第二层时浮动:左一点也不麻烦。如果是skipPosition:absolute,它会将第一组li拧紧,并扩展原始div。我创建了两个Jsfiddle链接来显示我在这一个中的问题,看起来我想用span将float左移到li 市场 出售 销售1 销售2 #导航菜单{ 显示:内联块; 背景:红色; } #导航菜单{ 列表样式:无; 保证金:0; 填充:0; } #Navul li菜单{ 浮动:左; 显示:块; 填充:0

我正在构建一个下拉式导航菜单,当我将
位置:绝对
应用到
li的第二层时
浮动:左
一点也不麻烦。如果是skip
Position:absolute
,它会将第一组
li
拧紧,并扩展原始div。我创建了两个Jsfiddle链接来显示我在这一个中的问题,看起来我想用
span
将float左移到
li


  • 市场
  • 出售
    • 销售1
    • 销售2
#导航菜单{ 显示:内联块; 背景:红色; } #导航菜单{ 列表样式:无; 保证金:0; 填充:0; } #Navul li菜单{ 浮动:左; 显示:块; 填充:0.5em; 光标:指针; 位置:相对位置; } #navmenu ul li ul{ 显示:无; } #导航菜单ul li:悬停ul{ 显示:块; } #navmenu-ul-li-ul-li{ 浮动:左; }
您不能
浮动
绝对元素。您必须通过指定它们相对于最近定位的父对象的位置,将它们定位在绝对(固定)位置。因此,定位将通过
top:0
left:calc(350px-100%)
等方法完成。需要进行一些调整才能使布局像这样工作。

如果您正在构建一个只有一层深的导航菜单,那么此代码将工作正常,无需以任何特殊方式使用绝对定位。要记住的关键是列表项应该相对定位,它们的ul子项应该绝对定位。无论您是单级还是多级导航菜单的建筑,这一点都适用

现在,这里有一个相关的插头。在我的书的最后一章中,我考虑了一个多层次导航菜单的例子,它根据浏览器视口空间以四种不同的方式显示。这是一个结合了定位、flexbox和媒体查询的简洁案例。现在,你应该可以从亚马逊免费获得这本书

* {
    margin: 0;
    padding: 0;
    border: 0;
}

ul {
    list-style-type: none;
}

#navmenu > ul > li {
    float: left;
    padding: 10px 15px;
    cursor: pointer;
    background-color: red;
    position: relative;
}

#navmenu ul ul {
    top: 100%;
    width: calc(100% * 5);
    position: absolute;
    display: none;
}

#navmenu ul ul > li {
    float: left;
}

#navmenu li:hover > ul {
    display: block;
}

添加
位置:固定的
(到ul),而不是
相对的
绝对的
。它将解决这个问题。而
float
将不适用于
绝对元素等。
如果您还需要什么,请告诉我。

祝你好运

这与我的小提琴“绝对”有什么不同?我以为你在试图修复校准。请参见更新的代码块以水平显示嵌套的列表项。float:left不起作用的原因是绝对块受其父列表项的宽度约束。增加嵌套ul的宽度可以显式修复它。这是一个快速修复,虽然我更喜欢一些不太明确的东西。
* {
    margin: 0;
    padding: 0;
    border: 0;
}

ul {
    list-style-type: none;
}

#navmenu > ul > li {
    float: left;
    padding: 10px 15px;
    cursor: pointer;
    background-color: red;
    position: relative;
}

#navmenu ul ul {
    top: 100%;
    width: calc(100% * 5);
    position: absolute;
    display: none;
}

#navmenu ul ul > li {
    float: left;
}

#navmenu li:hover > ul {
    display: block;
}