将百分比宽度设置为绝对定位的元素

时间:2017-12-21 09:53:16

标签: html css

我创建了自己的下拉列表,但我的宽度有问题。我的#leftDiv占据了网页的30%,然后是我的下拉列表,它应该占据#leftDiv的100%宽度。它确实如此,但是我的列表在点击时出现,绝对定位并占据了窗口本身的100%。即使我将宽度设置为30%,也需要占整个页面的30%。如何使我的列表大小相同?这是小提琴:https://jsfiddle.net/vaxobasilidze/rfwearbw/

--- TYPE ---查看问题。这是我的下拉列表的样式:

#typeSelect {
    list-style: none;
    margin: 0;
    padding: 0;
    border: 1px solid rgba(0,0,0,0.7);
    background-image:url(images/comment-bg.png);
    background-repeat:repeat;
    background-position:300px;
    width:353px;
    padding:5px;
    line-height:1;
    border-radius:4px;
    box-shadow: 1px 1px 1px rgba(255,255,255,0.1);
    -webkit-appearance:none;
    /*box-shadow:inset 0 0 10px 0 rgba(0,0,0,0.6);*/
    outline:none;
    color: #b8c0c8;
    width: 100%;
    cursor: pointer;
}

#typeSelect li {
    width: 100%;
    list-style: none;
    position: relative;
}

#typeDropDownList {
    margin: 0;
    padding: 0;
    line-height:1;
    -webkit-appearance:none;
    outline:none;
    color: #b8c0c8;
    width: 100%;
    border-radius: 3px;
    box-shadow: 0 2px 2px rgba(0,0,0,0.26);
    display: none;
    position: absolute;
    z-index: 100;
    width: 30%;
}

#typeDropDownList li {
    list-style: none;
    margin: 0 auto;
    padding: 0;
    border-bottom: 1px solid rgba(0,0,0,0.7);
    background-image:url(images/cusel-bg-1.png);
    background-repeat:repeat;
    background-position:300px;
    padding:5px;
    width: 100%;
    cursor: pointer;
}

#typeDropDownList li:first-child {
    border-top-left-radius: 3px;
    border-top-right-radius: 3px;
}

#typeDropDownList li:last-child {
    border-bottom-left-radius: 3px;
    border-bottom-right-radius: 3px;
    box-shadow: 0 2px 2px rgba(0,0,0,0.26);
}

#adapterSettings {
    background: url(images/comment-bg2.png);
    padding: 5px;
}

2 个答案:

答案 0 :(得分:0)

首先,给下拉列表100%宽度:

#typeDropDownList {
  width: 100%
}

并且您希望宽度相对于settingsDiv为100%:

#settingsDiv {
  position: relative;
}

而oops,现在隐藏了下拉菜单的一部分。这是因为它现在相对于settingsDivsettingsDiv的高度不考虑扩展下拉列表。

当下拉列表设置为absolute时,settingsDiv无法自动更改高度以适应没有JS的下拉列表,您可以硬编码settingDivs&# 39;身高:

#settingsDiv {
  position: relative;
  height: 230px;    }

但您希望settingsDiv高度自动适应下拉列表的高度?

然后从position: absolute删除#typeDropDownList

但是下拉必须是绝对的?

然后从overflow: auto;移除#settingsDiv - 所以当下拉列表展开时,它会溢出settingsDiv,而不是包含在内部。

答案 1 :(得分:0)

您需要采取以下步骤。

position: relative;添加#leftDiv

#leftDiv {
display: inline-block;
position: relative;
width: 30%;
height: 100%;
border-right: 3px solid rgba(0,0,0,0.2);
box-sizing: border-box;
float: left;
margin: 0;
padding: 0;
overflow: auto;
text-shadow: 1px 1px 1px rgba(0,0,0,0.33);
}

width:删除#typeDropDownList媒体资源:

#typeDropDownList {
margin: 0;
padding: 0;
line-height: 1;
-webkit-appearance: none;
outline: none;
color: #b8c0c8;
width: 100%;
border-radius: 3px;
box-shadow: 0 2px 2px rgba(0,0,0,0.26);
display: none;
position: absolute;
z-index: 100;
/* width: 100%; */
}