slideToggle()jquery期间的异常填充/边距

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

slideToggle()是否会在转换期间更改填充或边距,而不是将它们恢复正常?因为我试图切换两个表单,一个用于登录,另一个用于注册静态html页面,但在转换期间,在我的表单和其他内容之间创建了一个顶部边距(确切地说是文本)而不是一切重新调整后的大小。

第一个屏幕是静态页面而没有转换,后者在转换期间:https://imgur.com/a/R5pppq5这里的代码,我正在使用实时服务器插件在Atom上编程:

// Example starter JavaScript for disabling form submissions if there are invalid fields

var index_toggle = new Boolean(true);

$(document).ready(function() {
  $("#toggle_home").click(function() {
    $("#login").slideToggle("slow");
    $("#register").slideToggle("slow");
    $("#toggle_home_txt").fadeOut(function() {
      if (index_toggle) {
        $(this).html("↧ LOGIN").fadeIn();
      } else {
        $(this).html("↥ REGISTER").fadeIn();
      }
      index_toggle = !index_toggle;
    });


  });
});
#register {
  display: none;
}

body.index {
  display: -ms-flexbox;
  display: flex;
  -ms-flex-align: center;
  align-items: center;
  padding-top: 80px;
  padding-bottom: 40px;
  background-color: white;
  color: #6c757d;
}

div.index {
  padding-top: 40px;
  padding-bottom: 0px;
  border-radius: 3%;
  width: 500px;
}

button {
  border-radius: 20%;
  padding-bottom: 10%;
  padding-top: 0;
  background-color: #e9ecef;
  border-color: #6c757d;
  border-style: solid;
  color: #6c757d;
  transition: 0.3s ease;
}

button:focus {
  outline: none;
}

#send_butt {
  width: 40px;
  height: 40px;
}

button:hover {
  background-color: #6c757d;
  color: white;
}

button.toggle_home {
  top: 0px;
  padding-bottom: 2%;
  transform: translate(0, -100%);
}

img.index {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  position: absolute;
  left: 50%;
  transform: translate(-50%, -100%);
  background-color: #e9ecef;
  border-color: white;
  border-style: solid;
}

.form-signin {
  width: 450px;
  padding: 15px;
  margin: auto;
}
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body class="text-center index">
  <div class="jumbotron index form-signin">
    <img src="images/user_index.png" class="index" />
    <p id="index_text" class="my-3">Please fill this form to create an account.</p>



    <form id="login" novalidate>
      <hr>

      <div class="form-row">
        <!-- Username input -->
        <div class="col-md-12 mb-3">
          <div class="input-group">
            <div class="input-group-prepend">
              <span class="input-group-text"> &rsaquo;</span>
            </div>
            <input type="text" class="form-control" id="LoginUsername" placeholder="Username" required>
          </div>
        </div>
      </div>

      <!-- Password input -->

      <div class="form-row">
        <input type="password" class="col-md-6 mb-3 form-control" id="LoginPassword" placeholder="Password" required>

        <div class="text-right col-md-6 mb-3 form-check">
          <input class="form-check-input" type="checkbox" id="LoginRemember">
          <label class="form-check-label" for="LoginRemember">Remember me?</label>
        </div>
      </div>
    </form>

    <div id="div_toggle">
      <hr>
      <div class="toggle_home" style="float:left;">
        <button id="toggle_home" class="toggle_home">
              <div id="toggle_home_txt">
                &#8613; REGISTER
              </div>
            </button>
      </div>
    </div>

    <form id="register" class="form-signin mt-5" novalidate>

      <div class="form-row">
        <div class="col mb-3">
          <input type="text" class="form-control" id="RegName" placeholder="First name" required>
        </div>
        <div class="col-md-6 mb-3">
          <input type="text" class="form-control" id="RegSurname" placeholder="Surname" required>
        </div>
      </div>
      <div class="form-row">
        <div class="col-md-12 mb-3">
          <div class="input-group">
            <div class="input-group-prepend">
              <span class="input-group-text"> &rsaquo;</span>
            </div>
            <input type="text" class="form-control" id="RegUsername" placeholder="Username" required>
          </div>
        </div>
      </div>
      <div class="form-row">
        <div class="col-md-6 mb-3">
          <input type="password" class="form-control" id="RegPassword" placeholder="Password" required>
        </div>
        <div class="col-md-6 mb-3">
          <input type="password" class="form-control" id="RegConfirmPassword" placeholder="Confirm Password" required>
        </div>
      </div>
      <hr/>
    </form>
    <div style="float:right;">
      <button id="send_butt" class="mb-2">&#8250;</button>
    </div>
  </div>
</body>
javascript jquery html css
1个回答
0
投票

我相信差距的变化是margin collapse的结果。

父母和第一个/最后一个孩子 如果没有边框,填充,内联零件,块格式化上下文创建或清除以将块的边缘顶部与其第一个子块的边缘顶部分开......那么这些边距会崩溃。折叠的保证金最终在父母之外。

在页面加载时,p.index_text<hr>中的form#login之间的边距会折叠。当jQuery启动slideDown()时,它将overflow:hidden添加到滑动元素#form#login。这在<p><hr>之间产生“间隙”,边缘停止崩溃。在视觉上,两个元素之间的差距增大。

various methods,以防止边缘崩溃。我选择padding,因为另一种形式已经有一些:

#login {
  padding:15px;
}

工作范例:

// Example starter JavaScript for disabling form submissions if there are invalid fields

var index_toggle = new Boolean(true);

$(document).ready(function() {
  $("#toggle_home").click(function() {
    $("#login").slideToggle("slow");
    $("#register").slideToggle("slow");
    $("#toggle_home_txt").fadeOut(function() {
      if (index_toggle) {
        $(this).html("&#8615; LOGIN").fadeIn();
      } else {
        $(this).html("&#8613; REGISTER").fadeIn();
      }
      index_toggle = !index_toggle;
    });


  });
});
#register {
  display: none;
}

body.index {
  display: -ms-flexbox;
  display: flex;
  -ms-flex-align: center;
  align-items: center;
  padding-top: 80px;
  padding-bottom: 40px;
  background-color: white;
  color: #6c757d;
}

div.index {
  padding-top: 40px;
  padding-bottom: 0px;
  border-radius: 3%;
  width: 500px;
}

button {
  border-radius: 20%;
  background-color: #e9ecef;
  border-color: #6c757d;
  border-style: solid;
  color: #6c757d;
  transition: 0.3s ease;
}

button:focus {
  outline: none;
}

#send_butt {
  width: 40px;
  height: 40px;
}

button:hover {
  background-color: #6c757d;
  color: white;
}

img.index {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  position: absolute;
  left: 50%;
  transform: translate(-50%, -100%);
  background-color: #e9ecef;
  border-color: white;
  border-style: solid;
}

.form-signin {
  width: 450px;
  padding: 15px;
  margin: auto;
}

#login {
  padding:15px;
}

hr,
#register {
  margin: 0 !important;
}

#div_toggle {
  display: flex;
  align-items: center;
}
#div_toggle:after {
  content: "";
  flex: 1 0 auto;
  border-top: 1px solid #CCC;
}
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body class="text-center index">
  <div class="jumbotron index form-signin">
    <img src="images/user_index.png" class="index" />
    <p id="index_text" class="my-3">Please fill this form to create an account.</p>



    <form id="login" novalidate>
      <hr>

      <div class="form-row">
        <!-- Username input -->
        <div class="col-md-12 mb-3">
          <div class="input-group">
            <div class="input-group-prepend">
              <span class="input-group-text"> &rsaquo;</span>
            </div>
            <input type="text" class="form-control" id="LoginUsername" placeholder="Username" required>
          </div>
        </div>
      </div>

      <!-- Password input -->

      <div class="form-row">
        <input type="password" class="col-md-6 mb-3 form-control" id="LoginPassword" placeholder="Password" required>

        <div class="text-right col-md-6 mb-3 form-check">
          <input class="form-check-input" type="checkbox" id="LoginRemember">
          <label class="form-check-label" for="LoginRemember">Remember me?</label>
        </div>
      </div>
    </form>

    <div id="div_toggle">
      <button id="toggle_home" class="toggle_home">
              <div id="toggle_home_txt">
                &#8613; REGISTER
              </div>
            </button>
    </div>

    <form id="register" class="form-signin mt-5" novalidate>

      <div class="form-row">
        <div class="col mb-3">
          <input type="text" class="form-control" id="RegName" placeholder="First name" required>
        </div>
        <div class="col-md-6 mb-3">
          <input type="text" class="form-control" id="RegSurname" placeholder="Surname" required>
        </div>
      </div>
      <div class="form-row">
        <div class="col-md-12 mb-3">
          <div class="input-group">
            <div class="input-group-prepend">
              <span class="input-group-text"> &rsaquo;</span>
            </div>
            <input type="text" class="form-control" id="RegUsername" placeholder="Username" required>
          </div>
        </div>
      </div>
      <div class="form-row">
        <div class="col-md-6 mb-3">
          <input type="password" class="form-control" id="RegPassword" placeholder="Password" required>
        </div>
        <div class="col-md-6 mb-3">
          <input type="password" class="form-control" id="RegConfirmPassword" placeholder="Confirm Password" required>
        </div>
      </div>
      <hr/>
    </form>
    <div style="float:right;">
      <button id="send_butt" class="mb-2">&#8250;</button>
    </div>
  </div>
</body>

动画似乎也在跳跃和结束,但这可能是一个单独的问题。


编辑

进一步跳跃似乎是由第二种形式的边距引起的,所以我将其删除了。翻译的按钮似乎也会引起问题,所以我重建了它。上面的代码已相应编辑。

© www.soinside.com 2019 - 2024. All rights reserved.