javascript - 宽度不能再扩大并与 CSS 中的其他宽度一起调整
问题描述
即使我做到了,我也无法在 css中的“ .selected
”、“ .select-box .options-container.active
”和“ ”中制作全尺寸的 witdh 。.search-box input
as width: 100%;
我想让“ Plase choose a category
”文本字段、“ Search..
”文本字段和“ 1,2,3,4,5..12
”下拉列表的大小与“ Title
” Condition
、“ ”和“ Send
”按钮的大小相同。
为了清楚起见,我希望所有文本字段、下拉列表和按钮的大小都相同。但是下拉列表和搜索框不能与其他对齐。
如果有人可以帮助我解决这个问题,我将不胜感激。
const selected = document.querySelector(".selected");
const optionsContainer = document.querySelector(".options-container");
const searchBox = document.querySelector(".search-box input");
const optionsList = document.querySelectorAll(".option");
selected.addEventListener("click", () => {
optionsContainer.classList.toggle("active");
searchBox.value = "";
filterList("");
if (optionsContainer.classList.contains("active")) {
searchBox.focus();
}
});
optionsList.forEach(o => {
o.addEventListener("click", () => {
selected.innerHTML = o.querySelector("label").innerHTML;
optionsContainer.classList.remove("active");
});
});
searchBox.addEventListener("keyup", function(e) {
filterList(e.target.value);
});
const filterList = searchTerm => {
searchTerm = searchTerm.toLowerCase();
optionsList.forEach(option => {
let label = option.firstElementChild.nextElementSibling.innerText.toLowerCase();
if (label.indexOf(searchTerm) != -1) {
option.style.display = "block";
} else {
option.style.display = "none";
}
});
};
.login-page {
width: 550px;
padding: 5% 0 0;
margin: auto;
}
.login-page .form .login{
margin-top: -30px;
margin-bottom: 5px;
}
.form {
position: relative;
z-index: 1;
background: #FFFFFF;
max-width: 500px;
margin: 0 auto 100px;
padding: 35px;
text-align: center;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
border-radius: 5px;
}
.form input {
font-family: "Arial";
outline: 0;
background: #f2f2f2;
width: 100%;
border: 1px solid;
margin: 0 0 20px;
padding: 15px;
box-sizing: border-box;
font-size: 15px;
border-radius: 5px;
}
.form input:focus{
outline: none;
border:2px solid #08ac4b;
box-shadow: 0 0 1px #08ac4b;
}
.form button {
font-family: "Arial";
text-transform: none;
outline: 0;
background-color: #08ac4b;
width: 100%;
border: 1px solid;
padding: 15px;
color: #ffffff;
font-size: 15px;
-webkit-transition: all 0.3 ease;
transition: all 0.3 ease;
cursor: pointer;
border-radius: 5px;
margin: 0 0 20px;
}
.container {
position: relative;
z-index: 1;
max-width: 300px;
margin: 0 auto;
}
body {
background-color: #ffffff;
font-family: "Arial";
}
.select-box {
display: flex;
flex-direction: column;
}
.select-box .options-container {
background: #ffffff;
color: #000000;
max-height: 0px;
transition: all 0.4s;
border-radius: 5px;
overflow: hidden;
order: 1;
}
.selected {
content: "";
font-family: "Arial";
outline: none;
border:1px solid;
background: #ffffff;
border-radius: 5px;
margin-bottom: 8px;
color: #000000;
position: relative;
order: 0;
width: 100%;
}
.selected::after {
content: "";
background: url("img/arrow-down.svg");
background-repeat: no-repeat;
transition: all 0.4s;
}
.select-box .options-container.active {
max-height: 240px;
opacity: 1;
overflow-y: scroll;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
font-family: "Arial";
width: 100%;
}
.select-box .option,
.selected {
padding: 15px;
cursor: pointer;
}
.select-box .option:hover {
background: #edf7f1;
}
.select-box label {
cursor: pointer;
}
.select-box .option .radio {
display: none;
}
/* Searchbox */
.search-box input {
font-family: "Arial";
outline: 0;
background: #ffffff;
box-sizing: border-box;
font-size: 15px;
border-radius: 5px;
opacity: 0;
pointer-events: none;
transition: all 0.4s;
width: 100%;
}
.search-box input:focus {
outline: none;
border:2px solid #08ac4b;
box-shadow: 0 0 1px #08ac4b;
}
.select-box .options-container.active ~ .search-box input {
opacity: 1;
pointer-events: auto;
}
<div class="login-page">
<div class="form">
<div class="login">
<div class="login-header">
<h3>Post</h3>
<p>Form</p>
</div>
</div>
<form class="login-form">
<input type="text" placeholder="Title"/>
<input type="text" placeholder="Condition"/>
<div class="container">
<div class="select-box">
<div class="options-container">
<div class="option">
<input
type="radio"
class="radio"
id="automobiles"
name="category"
/>
<label for="automobiles">1</label>
</div>
<div class="option">
<input type="radio" class="radio" id="film" name="category" />
<label for="film">2</label>
</div>
<div class="option">
<input type="radio" class="radio" id="science" name="category" />
<label for="science">3</label>
</div>
<div class="option">
<input type="radio" class="radio" id="art" name="category" />
<label for="art">4</label>
</div>
<div class="option">
<input type="radio" class="radio" id="music" name="category" />
<label for="music">5</label>
</div>
<div class="option">
<input type="radio" class="radio" id="travel" name="category" />
<label for="travel">6</label>
</div>
<div class="option">
<input type="radio" class="radio" id="sports" name="category" />
<label for="sports">7</label>
</div>
<div class="option">
<input type="radio" class="radio" id="news" name="category" />
<label for="news">8</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">9</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">10</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">11</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">12</label>
</div>
</div>
<div class="selected">
Please choose a category
</div>
<div class="search-box">
<input type="text" placeholder="Search..." />
</div>
</div>
</div>
<button>Send</button>
</form>
</div>
</div>
解决方案
使用浏览器中的调试工具。如你看到的:
您设置了一个max-width
on 容器,因此它限制了.select
. 还要使用box-sizing: border-box
on.selected
以避免溢出。
const selected = document.querySelector(".selected");
const optionsContainer = document.querySelector(".options-container");
const searchBox = document.querySelector(".search-box input");
const optionsList = document.querySelectorAll(".option");
selected.addEventListener("click", () => {
optionsContainer.classList.toggle("active");
searchBox.value = "";
filterList("");
if (optionsContainer.classList.contains("active")) {
searchBox.focus();
}
});
optionsList.forEach(o => {
o.addEventListener("click", () => {
selected.innerHTML = o.querySelector("label").innerHTML;
optionsContainer.classList.remove("active");
});
});
searchBox.addEventListener("keyup", function(e) {
filterList(e.target.value);
});
const filterList = searchTerm => {
searchTerm = searchTerm.toLowerCase();
optionsList.forEach(option => {
let label = option.firstElementChild.nextElementSibling.innerText.toLowerCase();
if (label.indexOf(searchTerm) != -1) {
option.style.display = "block";
} else {
option.style.display = "none";
}
});
};
.login-page {
width: 550px;
padding: 5% 0 0;
margin: auto;
}
.login-page .form .login{
margin-top: -30px;
margin-bottom: 5px;
}
.form {
position: relative;
z-index: 1;
background: #FFFFFF;
max-width: 500px;
margin: 0 auto 100px;
padding: 35px;
text-align: center;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
border-radius: 5px;
}
.form input {
font-family: "Arial";
outline: 0;
background: #f2f2f2;
width: 100%;
border: 1px solid;
margin: 0 0 20px;
padding: 15px;
box-sizing: border-box;
font-size: 15px;
border-radius: 5px;
}
.form input:focus{
outline: none;
border:2px solid #08ac4b;
box-shadow: 0 0 1px #08ac4b;
}
.form button {
font-family: "Arial";
text-transform: none;
outline: 0;
background-color: #08ac4b;
width: 100%;
border: 1px solid;
padding: 15px;
color: #ffffff;
font-size: 15px;
-webkit-transition: all 0.3 ease;
transition: all 0.3 ease;
cursor: pointer;
border-radius: 5px;
margin: 0 0 20px;
}
.container {
position: relative;
z-index: 1;
/*max-width: 300px;*/
margin: 0 auto;
}
body {
background-color: #ffffff;
font-family: "Arial";
}
.select-box {
display: flex;
flex-direction: column;
}
.select-box .options-container {
background: #ffffff;
color: #000000;
max-height: 0px;
transition: all 0.4s;
border-radius: 5px;
overflow: hidden;
order: 1;
}
.selected {
box-sizing: border-box;
content: "";
font-family: "Arial";
outline: none;
border:1px solid;
background: #ffffff;
border-radius: 5px;
margin-bottom: 8px;
color: #000000;
position: relative;
order: 0;
width: 100%;
}
.selected::after {
content: "";
background: url("img/arrow-down.svg");
background-repeat: no-repeat;
transition: all 0.4s;
}
.select-box .options-container.active {
max-height: 240px;
opacity: 1;
overflow-y: scroll;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
font-family: "Arial";
width: 100%;
}
.select-box .option,
.selected {
padding: 15px;
cursor: pointer;
}
.select-box .option:hover {
background: #edf7f1;
}
.select-box label {
cursor: pointer;
}
.select-box .option .radio {
display: none;
}
/* Searchbox */
.search-box input {
font-family: "Arial";
outline: 0;
background: #ffffff;
box-sizing: border-box;
font-size: 15px;
border-radius: 5px;
opacity: 0;
pointer-events: none;
transition: all 0.4s;
width: 100%;
}
.search-box input:focus {
outline: none;
border:2px solid #08ac4b;
box-shadow: 0 0 1px #08ac4b;
}
.select-box .options-container.active ~ .search-box input {
opacity: 1;
pointer-events: auto;
}
<div class="login-page">
<div class="form">
<div class="login">
<div class="login-header">
<h3>Post</h3>
<p>Form</p>
</div>
</div>
<form class="login-form">
<input type="text" placeholder="Title"/>
<input type="text" placeholder="Condition"/>
<div class="container">
<div class="select-box">
<div class="options-container">
<div class="option">
<input
type="radio"
class="radio"
id="automobiles"
name="category"
/>
<label for="automobiles">1</label>
</div>
<div class="option">
<input type="radio" class="radio" id="film" name="category" />
<label for="film">2</label>
</div>
<div class="option">
<input type="radio" class="radio" id="science" name="category" />
<label for="science">3</label>
</div>
<div class="option">
<input type="radio" class="radio" id="art" name="category" />
<label for="art">4</label>
</div>
<div class="option">
<input type="radio" class="radio" id="music" name="category" />
<label for="music">5</label>
</div>
<div class="option">
<input type="radio" class="radio" id="travel" name="category" />
<label for="travel">6</label>
</div>
<div class="option">
<input type="radio" class="radio" id="sports" name="category" />
<label for="sports">7</label>
</div>
<div class="option">
<input type="radio" class="radio" id="news" name="category" />
<label for="news">8</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">9</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">10</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">11</label>
</div>
<div class="option">
<input type="radio" class="radio" id="tutorials" name="category" />
<label for="tutorials">12</label>
</div>
</div>
<div class="selected">
Please choose a category
</div>
<div class="search-box">
<input type="text" placeholder="Search..." />
</div>
</div>
</div>
<button>Send</button>
</form>
</div>
</div>
推荐阅读
- python - Python 设置禁用路径长度限制的优点和缺点?
- jquery - 使用 pug 和 ajax 渲染动态表的解决方案
- c# - 如何使用文件c#查找单词
- c# - 保护应用程序的 http 接口
- vba - 需要有关运行时错误 9 下标超出范围的帮助
- environment-variables - Postman 嵌入式环境变量未评估
- python-2.7 - 使用 numpy 从 csv 输入数据时,Keras 损失为 nan
- mysql - 从 MySQL 中查找在过去一小时内更新但在过去一小时内未创建的记录
- sonarqube - sonarqube7.2.1--如何获取持久性报告
- javascript - 绑定到事件侦听器时 beforeunload 不起作用