灵活/流畅的HTML表单的CSS秘诀是什么?

时间:2020-03-05 18:52:52  来源:igfitidea点击:

以下HTML / CSS / Javascript(jQuery)代码显示" #makes"选择框。选择一个选项会显示带有相关选项的" #models"选择框。 " #makes"选择框位于偏心位置,而" #models"选择框在显示时填充空白区域。

当显示唯一的表单元素时,如何设置表单的样式,使" #makes"选择框居中,但同时显示两个选择框时,它们都位于容器内居中?

var cars = [
  {
    "makes"  : "Honda",
    "models"  : ['Accord','CRV','Pilot']
  }, 
  {
    "makes"   :"Toyota",
    "models"  : ['Prius','Camry','Corolla']
  }
];

$(function() {
  vehicles = [] ;
  for(var i = 0; i < cars.length; i++) {
    vehicles[cars[i].makes] = cars[i].models ;
  }
  var options = '';
  for (var i = 0; i < cars.length; i++) {
    options += '<option value="' + cars[i].makes + '">' + cars[i].makes + '</option>';
  }
  $("#make").html(options);   // populate select box with array

  $("#make").bind("click", function() {
    $("#model").children().remove() ;   // clear select box
    var options = '';
    for (var i = 0; i < vehicles[this.value].length; i++) {
      options += '<option value="' + vehicles[this.value][i] + '">' +
        vehicles[this.value][i] +
        '</option>';
    }
    $("#model").html(options);   // populate select box with array
    $("#models").addClass("show");
  });     // bind end
});
.hide {
  display: none;
}
.show {
  display: inline;
}
fieldset {
  border: #206ba4 1px solid;
}
fieldset legend {
  margin-top: -.4em;
  font-size: 20px;
  font-weight: bold;
  color: #206ba4;
}
fieldset fieldset {
  position: relative;
  margin-top: 25px;
  padding-top: .75em;
  background-color: #ebf4fa;
}
body {
  margin: 0;
  padding: 0;
  font-family: Verdana;
  font-size: 12px;
  text-align: center;
}
#wrapper {
  margin: 40px auto 0;
}
#myFieldset {
  width: 213px;
}
#area {
  margin: 20px;
}
#area select {
  width: 75px;
  float: left;
}
#area label {
  display: block;
  font-size: 1.1em;
  font-weight: bold;
  color: #000;
}
#area #selection {
  display: block;
}
#makes {
  margin: 5px;
}
#models {
  margin: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

<div id="wrapper">
  <fieldset id="myFieldset">
    <legend>Cars</legend>
    <fieldset id="area">
      <label>Select Make:</label>
      <div id="selection">
        <div id="makes">
          <select id="make"size="2"></select>
        </div>
        <div class="hide" id="models">
          <select id="model" size="3"></select>
        </div>
      </div>
    </fieldset>
  </fieldset>
</div>

解决方案

回答

浮动选择框会将其显示属性更改为"阻止"。如果没有理由浮动它们,只需删除" float:left"声明,然后在" #makes"和" #models"中添加" text-align:center"即可。

回答

从问题中尚不能完全清楚我们要实现哪种布局,但是根据我们对选择元素应用" float:left"这一事实判断,我们似乎希望选择元素并排出现。在这种情况下,我们可以通过执行以下操作来实现:

  • 要使元素居中对齐,我们需要向包含的块级元素中添加" text-align:center",在本例中为#selection。
  • 浮动元素的位置不受"文本对齐"声明的影响,因此请从选择元素中删除" float:left"声明。
  • 为了使#make和#model div并排放置而不使用浮点数,它们必须显示为内联元素,因此应在#make和#model中都添加" display:inline"(请注意,这将失去这些元素的垂直边距,因此我们可能需要进行其他一些更改才能获得所需的确切布局)。

由于默认情况下以内联方式显示选择元素,因此最后一步的替代方法是删除#make和#model div并将" show"和" hide"类直接应用于模型选择元素。