如何设置div以将空间带到容器的末尾?

问题描述 投票:0回答:2

我的部分里面有很少的元素。它们都在同一行/行上。我使用div元素结合CSS将所有元素放在一起。我不确定这是否是布置元素的最佳实践,我愿意接受建议。我的问题是如果用户不符合搜索条件,则会触发消息框。字段框设置为display:none。用户点击Search后,如果消息显示,则所有内容都向左移动。我想知道消息是否可以扩展到屏幕的右侧而不是向左推送元素?此外,我想知道这会如何影响较小的屏幕,在这种情况下最好的选择是什么?

$('#searchBtn').on('click',searchFun);

function searchFun(){
  var menuVal = $.trim($('#menu').val()),
	searchFldVal = $.trim($('#searchFld').val());
  
  if(!searchFldVal){
		$('#searchMsg').addClass("error").show().text('This field is required.').delay(4000).fadeOut('slow').queue(function(){
		    $(this).removeClass("error").dequeue();
		});
	}else if(searchFldVal.length < 3){
		$('#searchMsg').addClass("error").show().text('You must enter at least 3 characters to search on.').delay(4000).fadeOut('slow').queue(function(){
		    $(this).removeClass("error").dequeue();
		});
	}else{
    console.log('Search record.');
  }
}
section.mainBox{
	width: 100%;
	padding-top: 0;
	background-color: white;
	border: 2px solid #000099;
}
div#Container {
	padding-top: 8px;
	padding-bottom: 8px;
	text-align: center;
	background-color: #B0C4DE;
	border-bottom: 2px solid #000099;
}
div.nextTo {
	display: inline-block;
	margin-left: 5px;
}
span.msgMainBox {
	display:none; 
	margin: 2px 5px; 
	padding:2px 25px 2px 35px;
}
span.error {
	border: 1px solid;
	margin: 5px;
	padding:5px 10px 5px 40px;
	background-repeat: no-repeat;
	background-position: 10px center;
	border-radius: 3px;
	display: block;
}
span.error {
	color: #D8000C;
	background-color: #FFBABA;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="mainBox">
  <div id="Container">
    <div class="nextTo">
      <select name="menu" id="menu">
        <option value="1">Name</option>
        <option value="2">DOB</option>
        <option value="3">City</option>
      </select>
    </div>
    <div class="nextTo">
      <input type="text" name="searchFld" id="searchFld" size="24" maxlength="24" value="" title="Maximum size of the field is 24 characters." placeholder="Example: Marco Polo" />
    </div>
    <div class="nextTo">
      <input type="button" name="searchBtn" id="searchBtn" value="Search"/>
    </div>
    <div class="nextTo">
      <input type="button" name="lockBtn" id="lockBtn" value="Unlock" style="display:none" />
    </div>
    <div class="nextTo">
      <span id="searchMsg" class="msgMainBox"></span>
    </div>
  </div>
</section>
html css html5 css3 layout
2个回答
1
投票

您可以使元素绝对位置以避免具有推动效果。对于小屏幕,它将走到底部:

$('#searchBtn').on('click', searchFun);

function searchFun() {
  var menuVal = $.trim($('#menu').val()),
    searchFldVal = $.trim($('#searchFld').val());

  if (!searchFldVal) {
    $('#searchMsg').addClass("error").show().text('This field is required.').delay(4000).fadeOut('slow').queue(function() {
      $(this).removeClass("error").dequeue();
    });
  } else if (searchFldVal.length < 3) {
    $('#searchMsg').addClass("error").show().text('You must enter at least 3 characters to search on.').delay(4000).fadeOut('slow').queue(function() {
      $(this).removeClass("error").dequeue();
    });
  } else {
    console.log('Search record.');
  }
}
section.mainBox {
  width: 100%;
  padding-top: 0;
  background-color: white;
  border: 2px solid #000099;
}

div#Container {
  padding-top: 8px;
  padding-bottom: 8px;
  text-align: center;
  background-color: #B0C4DE;
  border-bottom: 2px solid #000099;
}

div.nextTo {
  display: inline-block;
  margin-left: 5px;
}

div.nextTo:last-child {
  position: absolute;
  top: 6px;
}

span.msgMainBox {
  display: none;
  margin: 2px 5px;
  padding: 2px 25px 2px 35px;
}

span.error {
  border: 1px solid;
  margin: 5px;
  padding: 5px 10px 5px 40px;
  background-repeat: no-repeat;
  background-position: 10px center;
  border-radius: 3px;
  display: block;
}

span.error {
  color: #D8000C;
  background-color: #FFBABA;
}

@media all and (max-width:800px) {
  div.nextTo:last-child {
    position: static;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="mainBox">
  <div id="Container">
    <div class="nextTo">
      <select name="menu" id="menu">
        <option value="1">Name</option>
        <option value="2">DOB</option>
        <option value="3">City</option>
      </select>
    </div>
    <div class="nextTo">
      <input type="text" name="searchFld" id="searchFld" size="24" maxlength="24" value="" title="Maximum size of the field is 24 characters." placeholder="Example: Marco Polo">
    </div>
    <div class="nextTo">
      <input type="button" name="searchBtn" id="searchBtn" value="Search">
    </div>
    <div class="nextTo">
      <input type="button" name="lockBtn" id="lockBtn" value="Unlock" style="display:none">
    </div>
    <div class="nextTo">
      <span id="searchMsg" class="msgMainBox"></span>
    </div>
  </div>
</section>

1
投票

您可以通过定位,对margins和padding以及@media查询进行一些修改,当屏幕宽度变得过窄时,会在下面显示错误消息并水平居中:

$('#searchBtn').on('click',searchFun);

function searchFun(){
  var menuVal = $.trim($('#menu').val()),
	searchFldVal = $.trim($('#searchFld').val());
  
  if(!searchFldVal){
		$('#searchMsg').addClass("error").show().text('This field is required.').delay(4000).fadeOut('slow').queue(function(){
		    $(this).removeClass("error").dequeue();
		});
	}else if(searchFldVal.length < 3){
		$('#searchMsg').addClass("error").show().text('You must enter at least 3 characters to search on.').delay(4000).fadeOut('slow').queue(function(){
		    $(this).removeClass("error").dequeue();
		});
	}else{
    console.log('Search record.');
  }
}
section.mainBox{
	width: 100%;
	padding-top: 0;
	background-color: white;
	border: 2px solid #000099;
}
div#Container {
  position: relative; /* added */
	padding-top: 8px;
	padding-bottom: 8px;
	text-align: center;
	background-color: #B0C4DE;
	border-bottom: 2px solid #000099;
}
div.nextTo {
	display: inline-block;
	margin-left: 5px;
}
span.msgMainBox {
	display: none; 
	margin: 2px 5px; 
	padding: 2px 25px 2px 35px;
}
span.error {
	border: 1px solid;
  /* added */
  position: absolute;
  top: 50%;
  right: 0;
  transform: translateY(-50%); /* vertically centered */
  margin: 0 5px; /* modified */
  padding: 0 5px; /* modified */
  /***/
	background-repeat: no-repeat;
	background-position: 10px center;
	border-radius: 3px;
	display: block;
}
span.error {
	color: #D8000C;
	background-color: #FFBABA;
}
/* added */
@media screen and (max-width: 630px) { /* adjust to your needs */
  span.error {
    top: calc(100% + 5px); /* + 5px "margin-top" */
    left: 50%;
    transform: translateX(-50%); /* horizontally centered */
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="mainBox">
  <div id="Container">
    <div class="nextTo">
      <select name="menu" id="menu">
        <option value="1">Name</option>
        <option value="2">DOB</option>
        <option value="3">City</option>
      </select>
    </div>
    <div class="nextTo">
      <input type="text" name="searchFld" id="searchFld" size="24" maxlength="24" value="" title="Maximum size of the field is 24 characters." placeholder="Example: Marco Polo" />
    </div>
    <div class="nextTo">
      <input type="button" name="searchBtn" id="searchBtn" value="Search"/>
    </div>
    <div class="nextTo">
      <input type="button" name="lockBtn" id="lockBtn" value="Unlock" style="display:none" />
    </div>
    <div class="nextTo">
      <span id="searchMsg" class="msgMainBox"></span>
    </div>
  </div>
</section>
© www.soinside.com 2019 - 2024. All rights reserved.