[英]CSS absolute positioning elements inside a div
我有一个.wall
div
有一些.toy
div
里面秒。 我想把toy
放在wall
。 float:left
属性对我来说很好。
现在的问题是我要为toy
div添加position:absolute
,以使其稍后可拖动。 如何通过JavaScript或CSS做到这一点?
应用position:absolute
,所有toy
都将落在wall
左上角,彼此重叠并隐藏。
wall
的宽度和高度是恒定的,但是toy
的宽度和高度是可变的, toy
div的数量也是动态的,并且随着数量的增加, toy
需要按行排列 。
任何建议都将有所帮助,请注意,我无法避免使用position:absolute
进行拖动。
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<style>
body{
text-align:center;
}
.clearfix{
clear:both;
}
.wall {
border: 5px solid #cde;
margin:auto;
width:200px;
padding:10px;
}
.toy{
background-color: #BBCCEE;
border:1px solid #8899BB;
margin:5px;
width: auto;
padding:5px;
float:left;
}
.tall{
padding-top:10px;
}
</style>
<script>
$(document).ready(function() {
$('.toy').each(function(index) {
var position = $(this).offset();
var prevPosition = $(this).prev().offset();
$(this).css({
//top: position.top,
//left:position.left,
//position:'absolute',
});
});
});
</script>
<div class='wall'>
<div class='toy'>T1</div>
<div class='toy'>T2</div>
<div class='toy'>T3333333</div>
<div class='toy'>T4</div>
<div class='toy'>T5</div>
<div class='toy tall'>T6</div>
<div class='toy'>T7</div>
<div class='toy'>T8</div>
<div class='clearfix'></div>
</div>
加
position:relative
到墙div
我正在一个完全做到这一点的网站上(对那些非英语的东西很抱歉):
http://moveit.canassa.com/cartao/4/
链接现在断开了,但是这里是一个jsFiddle,它显示了我在说什么:
http://jsfiddle.net/canassa/Z9N3L/
“玩具” div使用绝对位置:
.toy{
width: 100px;
height: 25px;
position: absolute;
z-index: 0;
}
绝对位置的问题是玩具将相对于页面而不是相对于“壁”容器,以便修复必须使壁容器相对的问题:
#wall{
position: relative;
overflow: hidden;
}
我发现的overflow:hidden也是一个不错的技巧。 它使可拖动对象进入壁式容器“下方”。
使用jQuery使其可拖动并没有什么大的秘密:
// Creates a toy div inside the wall
$(MV.wallId).append('<div class="toy" id="' + this.getId() + '"></div>');
box = this.getBox(); // return the "toy" that I've just created.
$('#' + this.getId()).draggable(); // make it draggable
如果您只使用jQueryUI .draggable()
这会容易得多。 它不需要定位元素。
如果您对使用此插件一无所知,那么您有正确的主意。 让要素流入的地方,然后计算它们的位置和设置position: absolute
和任何的left
和top
最终被在运行时。
将.wall
设置为position: relative
。 然后:
var tPos;
$('.toy').each(function(index) {
tPos = $(this).position();
$(this).css({
left: tPos.left,
top: tPos.top
});
};
$('.toy').css({
position: absolute
});
在高度.wall
以及各自的宽度.toy
在上面崩溃时的玩具是绝对定位的,但你可以只需添加几行获取/设置它们的宽度和高度.each
循环。
如果可以动态添加新玩具而没有按照您的建议重新加载页面,则这显然不起作用。 为了解决这个问题,您可以将它们切换回position: relative
,添加新的,在流中获取新的位置,然后设置位置并将其切换回position: absolute
。 任何被拖到适当位置的元素都将是流程中的空白,但是我看不出有任何简单的方法可以解决此问题。
绝对位置中的元素必须具有position:relative样式。 (必须是目标元素的父元素)
每个.toy
的容器div
必须具有position:relative
设置。 这样,其子元素的位置0变为其左上角。 像这样:
<div class="parent">
<div class="child">Blah.</div>
<div class="child">Blah.</div>
</div>
和:
.parent {
position: relative;
}
.child {
position: absolute;
left: 10px; /* This is 10 pixels from the parents left side */
top: 10px; /* This is 10 pixels from the parents top side */
}
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.