html - CSS 过渡适用于某些元素,但不适用于其他元素
问题描述
首先,我想保持对 HTML 和 CSS 的新手,所以如果答案很明显,请原谅我。我对我的 CSS 代码现在发生的事情完全感到困惑。我设计了一个登录页面,当用户单击输入元素时,标签文本会向上移动并改变颜色。一切都按预期完美运行。现在我正在使用与登录页面相同的动画制作注册表单以保持一致性。然而,出于某种奇怪的原因,虽然我使用了相同的代码(唯一的区别是位置类型 [使用绝对登录和注册使用相对],以及更多输入元素),但移动转换根本不起作用。文本仍然改变颜色,标签元素立即向上移动,没有过渡动画。任何关于为什么会发生这种情况的想法将不胜感激。
如果有帮助,我从 youtube 视频中获取了这个想法:https ://www.youtube.com/watch?v=eeHqZeJ9Vqc
所有输入元素都遵循此布局:
.center-card {
margin: 3vh auto 0 auto;
width: 30%;
min-width: 30%;
height: 85vh;
background: white;
border-radius: 10px;
}
.form-wrap {
margin: 0 auto;
width: 90%;
min-width: 90%;
}
.form-wrap form {
width: 100%;
}
.form-wrap label {
font-size: 16px;
}
.signup-inputs {
border-bottom: 2px solid #adadad;
}
.signup-inputs input,
.signup-inputs select {
width: 100%;
padding: 0 5px;
font-size: 16px;
border: none;
background: none;
outline: none;
position: relative;
top: 2.3vh;
}
.signup-inputs label {
position: relative;
bottom: 1vh;
left: 0.5vh;
color: #adadad;
pointer-events: none;
/*transform: translateY(-50%);*/
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-o-transition: 0.5s;
transition: 0.5s;
}
.inline-spacing {
width: 45%;
}
/* Container wrap for (decision maker and number of employees) and (email and phone number)*/
.decisionMaker-Employees,
.email-phone {
display: flex;
justify-content: space-between;
}
.password-margin {
margin-bottom: 3vh;
}
.signup-inputs span::before {
content: '';
width: 0%;
height: 0.3vh;
background: #2691d9;
position: relative;
top: 3.8vh;
display: flex;
transition: 0.5s;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-o-transition: 0.5s;
}
.signup-inputs input:focus~label,
.signup-inputs input:valid~label,
.signup-inputs select:focus~label,
.signup-inputs select:valid~label {
top: -4vh;
color: #2691d9;
}
.signup-inputs input:focus~span::before,
.signup-inputs input:valid~span::before,
.signup-inputs select:focus~span::before,
.signup-inputs select:valid~span::before {
width: 100%;
}
<div class="center-card">
<h1>Create an Account</h1>
<div class="form-wrap">
<form method="post">
<!-- Signup Name -->
<div class="signup-inputs">
<input type="text" id="name" name="name" required>
<span></span>
<label for="name">Name</label>
</div>
解决方案
由于您正在使用,您的注册可能无法正常工作position: relative;
这种类型的定位可能是最令人困惑和误用的。它的真正含义是“相对于自身”。如果您设置位置:相对;在一个元素上,但没有其他定位属性(顶部,左侧,底部或右侧),它根本不会影响它的定位,它会与你将其保留为 position: static; 但是如果你给它一些其他的定位属性,比如说,top: 10px;,它就会把它的位置从它通常的位置向下移动 10 个像素。我相信您可以想象,根据元素的常规位置移动元素的能力非常有用。我发现自己多次使用它来排列表单元素,这些元素往往不想按照我想要的方式排列。
设置位置时还会发生另外两件事:相对;在您应该注意的元素上。一是它引入了在该元素上使用 z-index 的能力,这不适用于静态定位的元素。即使您没有设置 z-index 值,该元素现在也会出现在任何其他静态定位元素的顶部。您无法通过在静态定位元素上设置更高的 z-index 值来对抗它。
发生的另一件事是它限制了绝对定位的子元素的范围。作为相对定位元素的子元素的任何元素都可以绝对定位在该块内。这带来了一些我在这里谈论的强大机会。
因此,也许尝试position: absolute;
在注册时使用与登录时相同的方法。
推荐阅读
- java - 在java中将构造函数链接在一起
- arena-simulation - 按条件批量模拟竞技场
- sql-server - SQL Server 浏览器显示似乎不存在的数据库
- scala - 地图中火花斯卡拉的单身人士
- javascript - 从映射数组 React.js 中抓取对象
- node.js - Node.js http 回显服务器返回 400
- android - 在 LinearLayout 中将 SwitchCombat 居中(重力似乎不起作用)
- ios - Xcode Button image top text below in a button not in code
- java - POI Excel Selenium Decimal 到文本
- python - Python 多处理和 Pandas - 共享内存