为什么我的列表项目项目符号重叠浮动元素
我有一个(XHTML Strict)页面,在这个页面中,我将图像和常规段落文本一起浮动。 一切顺利,除了使用列表而不是段落。 列表的项目符号与浮动图像重叠。
更改列表或列表项的边距不起作用。 页边距是从页面左边计算的,但是浮动将列表项目推到里面 。 所以如果我把它做得比图像更宽的话,边距才有用。
浮动图片旁边的列表也可以,但是我不知道列表是在什么时候浮动的。 我不想为了解决这个问题而将我的内容中的每个列表都浮动。 另外,当图像漂浮到右侧而不是列表左侧时,左侧浮动会使布局混乱。
设置li { list-style-position: inside }
确实将项目符号与内容一起移动,但是它也会导致包装的行开始与项目符号alignment,而不是与上面的行alignment。
这个问题显然是由于子弹在盒子外面被渲染引起的,浮子把盒子的内容推向右边(而不是盒子本身)。 这就是IE和FF如何处理的情况,据我所知,根据规范没有错。 问题是,我怎样才能防止呢?
我find了解决这个问题的办法。 应用一个ul { overflow: hidden; }
ul { overflow: hidden; }
ul
确保箱子本身被浮子推到一边,而不是箱子的内容。
只有IE6需要ul { zoom: 1; }
ul { zoom: 1; }
在我们的条件注释,以确保ul
有布局。
为Glen E. Ivey的解决scheme增加一项改进:
ul { list-style: outside disc; margin-left: 1em; } ul li { position: relative; left: 1em; padding-right: 1em; }
http://jsfiddle.net/mblase75/TJELt/
我更喜欢这种技术,因为它在列表需要在浮动图像周围stream动时起作用,而overflow: hidden
技术则不行。 然而,为了防止它们溢出容器,也需要在li
上添加padding-right: 1em
。
这是“显示”财产进入自己的地方。 设置下面的CSS,使列表与浮动内容一起工作。
ul { display: table; }
显示:表格; 与浮动内容一起工作(填补空白),但不隐藏内容。 很像一张桌子:-)
编辑:记得添加一个类来隔离哪些列表,你希望这样做。 例如“ul.in-content”或更一般的“.content ul”
尝试list-style-position:里面来改变项目符号的布局。
通过添加overflow: auto;
至less你的ul
作品对我来说。
更新
我已经更新了我的jsfiddle来可视化发生了什么事情。 如果在浮动img
旁边有ul
的内容将被float浮动,但不是实际的容器。 通过添加overflow: auto
,整个ul
box将被float而不是仅仅内容所推送。
在http://archivist.incutio.com/viewlist/css-discuss/106382我find了一个适合我的build议:用“;
position: relative; left: 1em;
在那里,如果浮点数不存在,用你的列表项的左边填充/边距的宽度replace“1em”。 这在我的应用程序中效果很好,甚至处理浮点数在列表中间出现的情况 – 子弹向右移动到(本地)左边距。
解决scheme如下:
ul {overflow: hidden;}
具有overflow:
的块盒子不是visible
,为其内容build立一个新的块格式化上下文 。 W3Cbuild议: http : //www.w3.org/TR/CSS2/visuren.html#block-formatting
例:
我的网站上的<li>
伪装的button是这样制作的。 使浏览器的视窗(窗口)更小,以查看缩进效果 。
相关答案:
文章举例:
- 溢出 – 一个秘密的好处
你可以指定position: relative; left: 10px;
position: relative; left: 10px;
给li
。 (你可能另外想要给它一个margin-right: 10px;
否则它可能会变得太宽右边。)
或者,如果你想使用float
作为ul
就像其他人所build议的那样 – 你可以通过在ul后面的元素上使用clear: left
来阻止剩下的浮动。
我正在使用这个来解决这个问题:
ul { display: table; }
放弃
浮动元素旁边的列表会导致问题。 在我看来,防止这类浮动问题的最好办法是避免与内容相交的浮动图像。 当你必须支持响应式devise时,它也会有所帮助。
在段落之间居中显示图像的简单devise看起来非常有吸引力,并且比尝试变得太花哨容易得多。 这也是一个<figure>
一步。
但我真的想浮动的图像!
好吧,如果你疯狂地持续下去,可以继续沿着这条路走下去,可以使用一些技巧。
最简单的是使列表使用overflow: hidden
或overflow: scroll
以便列表本质上是收缩包装拉回填充有用的地方:
img { float: left; } .wrapping-list { overflow: hidden; padding-left: 40px; }
<img src="http://placehold.it/100x100"/> <ul class="wrapping-list"> <li>lorem</li> <li>ipsum</li> <li>dolor</li> <li>sit</li> <li>amet</li> </ul>
在UL标签上尝试以下内容。 这应该照顾子弹覆盖你的形象,你不必乱搞左列表引起的list-position: inside
。
overflow: hidden; padding-left: 2em;
用这个自己挣扎。 我pipe理的最好的是以下内容:
ul { list-style-position: inside; padding-left: 1em; text-indent: -1em; }
文本实际上并没有缩进,但子弹显示。
根据OP的评论编辑更新
好吧,然后把它分解成2个嵌套在一起的div
ul {background: blue; position:static;} .therest {position:relative; width:100%} .indent {float:left; } <div class="therest"> <p> Est tincidunt doming iis nobis nibh. Ullamcorper eorum elit lius me delenit. </p> <hr /> <h3>Lorem</h3> <div class="indent"> <ul> <li>list element</li> <li>list element</li> <li>list element</li> </ul> <div> the rest now under the UL </div>
尝试改变它
ul {float:left; 背景:蓝色; }
在与几个项目中的这个有趣的问题作斗争,并调查为什么会发生,我终于相信我find了两个: 工作和“响应”的解决scheme。
这里是魔术,现场示例: http : //jsfiddle.net/superKalo/phabbtnx/
ul { list-style: none; position: relative; padding-left: 0; /* remove any left padding */ margin-left: 0; /* remove any left margin */ left: 35px; } li { padding-left: 0; /* remove any left padding */ margin-left: 0; /* remove any left margin */ text-indent: -19px; /* adjust as much as needed */ } li:before { content: '•\00a0\00a0\00a0'; color: #000; /* bonus: you can customize the bullet color */ }
在LMS内部工作,不能访问doc的头部,发现使用margin-right: 20px
作为图像的内联样式更容易。 我欠这个网站 。
尝试这个:
li{ margin-left:5px; }
如果你想让它们离开,只需放入一个 – ## px值。
或者你可以这样做:
#content ul { background:none repeat scroll 0 0 #AACCDD; float:left; margin-right:10px; padding:10px;
然后删除李的所有样式
这个怎么样?
ul{float:left; clear:right}
width: 300px; height: 30px; margin-left: auto; right: 10px;
margin-left:auto会导致元素本身被右alignment。 设置你想要的元素的高度和宽度 – 在我的它是一个div里面的背景图像
你也可以尝试将ul
浮动到左边,并为它定义一个合适的width
,以便它漂浮在图像旁边。
有点像这个jsfiddle ?
我用它固定
div.class-name ul { clear: both; }
width: auto; overflow: hidden;
添加display:table;
到ul
:
ul{display:table;}