javascript - 背景大小不受输入字段影响

标签 javascript html css

我将下面两个按钮的背景大小设置为 100% 0%,因为我想在输入文本并选中所有单选字段时显示“单选”按钮。但是“文本”按钮已经显示,但没有在输入字段中输入任何内容。但是当我删除 radio 场时它起作用了,是什么导致了这个问题?

  button {
   color: #FFF;
   border: none;
   background-color: transparent;
   transition: all 1s;
   border-radius: 10px;
   padding: 20px 50px;   
   background-image: linear-gradient(to top, #1e5799 0%, #2989d8 100%);
   background-position: 100% 100%;
   background-size: 100% 0%;
   background-repeat: no-repeat;
 }
  :checked ~ div > button:first-child {
   background-size: 100% 25%;
 }

 :checked ~:checked ~ div > button:first-child {
   background-size: 100% 50%;
 }
 
 :checked ~:checked ~:checked ~ div > button:first-child {
   background-size: 100% 75%;
 }
 
 :checked ~:checked ~:checked ~:checked ~ div > button:first-child {
   background-size: 100% 100%;
 }
:valid ~ div > button:nth-child(2) {
   background-size: 100% 25%;
 }

 :valid ~:valid ~ div > button:nth-child(2) {
   background-size: 100% 50%;
 }
 
 :valid ~:valid ~:valid ~ div > button:nth-child(2) {
   background-size: 100% 75%;
 }
 
 :valid ~:valid ~:valid ~:valid ~ div > button:nth-child(2) {
   background-size: 100% 100%;
 }

 div {
   padding: 20px;
 }
R1 <input type="radio" name="">
R2 <input type="radio" name="">
R3 <input type="radio" name="">
R4 <input type="radio" name="">
Name <input type="text" name="" required=required>
Last <input type="text" name="" required=required>
Address <input type="text" name="" required=required>
Age <input type="text" name="" required=required>
<div>
  <button>Radio</button>
  <button>Text</button>
</div>

最佳答案

  1. :valid 更改为 :invalid(并切换了百分比)。
  2. 100% 100% 背景使用了 :not(:invalid) 选择器。

button {
   color: #FFF;
   border: none;
   background-color: transparent;
   transition: all 1s;
   border-radius: 10px;
   padding: 20px 50px;   
   background-image: linear-gradient(to top, #1e5799 0%, #2989d8 100%);
   background-position: 100% 100%;
   background-size: 100% 0%;
   background-repeat: no-repeat;
 }
  :checked ~ div > button:first-child {
   background-size: 100% 25%;
 }

 :checked ~:checked ~ div > button:first-child {
   background-size: 100% 50%;
 }
 
 :checked ~:checked ~:checked ~ div > button:first-child {
   background-size: 100% 75%;
 }
 
 :checked ~:checked ~:checked ~:checked ~ div > button:first-child {
   background-size: 100% 100%;
 }
:not(:invalid) ~ div > button:nth-child(2) {
   background-size: 100% 100%;
 }
 :invalid ~ div > button:nth-child(2) {
   background-size: 100% 75%;
 }
 :invalid ~:invalid ~ div > button:nth-child(2) {
   background-size: 100% 50%;
 }
 
 :invalid ~:invalid ~:invalid ~ div > button:nth-child(2) {
   background-size: 100% 25%;
 }
 
 :invalid ~:invalid ~:invalid ~:invalid ~ div > button:nth-child(2) {
   background-size: 100% 0%;
 }

 div {
   padding: 20px;
 }
R1 <input type="radio" name="">
R2 <input type="radio" name="">
R3 <input type="radio" name="">
R4 <input type="radio" name="">
Name <input type="text" name="" required=required>
Last <input type="text" name="" required=required>
Address <input type="text" name="" required=required>
Age <input type="text" name="" required=required>
<div>
  <button>Radio</button>
  <button>Text</button>
</div>

更新

这里是关于:valid的解释:

因为复选框输入存在并且它们没有 required 属性 - 它们是有效的。所以在 button:nth-child(2) 之前实际上有 4 个 :valid 元素,这意味着您会将背景设置为 100% 100% 。 如果您愿意 - 您可以确保 :valid 选择器仅适用于常规文本字段:input[type=text]:valid 这将解决问题(另一种选择是为这些字段设置一个类)。

检查此更新(仅基于您的代码,使用 :valid 选择器):

button {
   color: #FFF;
   border: none;
   background-color: transparent;
   transition: all 1s;
   border-radius: 10px;
   padding: 20px 50px;   
   background-image: linear-gradient(to top, #1e5799 0%, #2989d8 100%);
   background-position: 100% 100%;
   background-size: 100% 0%;
   background-repeat: no-repeat;
 }
  :checked ~ div > button:first-child {
   background-size: 100% 25%;
 }

 :checked ~:checked ~ div > button:first-child {
   background-size: 100% 50%;
 }
 
 :checked ~:checked ~:checked ~ div > button:first-child {
   background-size: 100% 75%;
 }
 
 :checked ~:checked ~:checked ~:checked ~ div > button:first-child {
   background-size: 100% 100%;
 }
input[type=text]:valid ~ div > button:nth-child(2) {
   background-size: 100% 25%;
 }
input[type=text]:valid ~input[type=text]:valid ~ div > button:nth-child(2) {
   background-size: 100% 50%;
 }
 
 input[type=text]:valid ~input[type=text]:valid ~input[type=text]:valid ~ div > button:nth-child(2) {
   background-size: 100% 75%;
 }
 
 input[type=text]:valid ~input[type=text]:valid ~input[type=text]:valid ~input[type=text]:valid ~ div > button:nth-child(2) {
   background-size: 100% 100%;
 }
 div {
   padding: 20px;
 }
R1 <input type="radio" name="">
R2 <input type="radio" name="">
R3 <input type="radio" name="">
R4 <input type="radio" name="">
Name <input type="text" name="" required=required>
Last <input type="text" name="" required=required>
Address <input type="text" name="" required=required>
Age <input type="text" name="" required=required>
<div>
  <button>Radio</button>
  <button>Text</button>
</div>

关于javascript - 背景大小不受输入字段影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40126455/

相关文章:

html - 如何使用 HTML/CSS 像网络一样展示画廊?

javascript - 为 jQuery 使用 .text() 方法时如何保持换行符?

javascript - 使用graphicMagic调整大小后将图像上传到aws s3存储桶

javascript - 在 AJAX 内容渲染之前加载所有 JS 和 CSS

javascript - 添加动态YouTube对象时,参数不起作用(JavaScript)

html - 使用 MVC 3(不显眼的 ajax)对整个模型进行客户端验证

html - IE 中的圆 Angular 使用边框半径

jquery - 如何模拟浏览器缩放

javascript - 添加新元素时如何滚动到div的底部

javascript - 如何将变量传递给 Promise 链中调用的另一个文件中的异步函数