如何在移动设备和 iPad 上始终显示数字输入旋转器

Mar*_*tin 5 html css spinner ipad

我有一些在桌面上完美运行的 HTML/CSS。

它也适用于移动设备,但输入字段上用于数字选择的向上和向下箭头不会显示,迫使用户手动“输入”数字。客户要求将这些数字旋转箭头保留在移动视图上。

有很多关于如何隐藏/禁用微调器的问题,甚至还有一些关于如何保留微调器的问题,但这些问题没有或不正确的答案,并且遵循这些答案和建议并没有解决这个问题。

        @media only screen {

            input[type=number] {
               /* -moz-appearance: number-input; */   
            }
 
            input[type=number]::-webkit-inner-spin-button,
            input[type=number]::-webkit-outer-spin-button {
                -webkit-appearance: inner-spin-button;
                /***
                 * Below tried and failed: 
                 ***/
                /* -moz-appearance: number-input; */ 
                /*-ms-appearance: inner-spin-button;*/
                /*appearance: auto;*/
                margin: 0;
                opacity: 1;
            }
            
            #updQtyLoose47 {
             /* basic styling */
            background: rgba(245, 235, 170, 0.75);
            border-radius: 0;
            border: none;
            border: solid 1px #dbdbdb;
            color: inherit;
            display: block;
            outline: 0;
            padding: 0.25rem 0 0.25rem 0.75rem;
            text-decoration: none;
            width: 100px;
            }
        }
Run Code Online (Sandbox Code Playgroud)
<div>
<input type="number" name="Quantity[47]" value="0" class="qtyInputLoose" id="updQtyLoose47" min="0" max="8" >
</div>
Run Code Online (Sandbox Code Playgroud)

平台:

iPad(iOS 12.5)

浏览器:

谷歌浏览器和 Safari

尝试过的解决方案:

  • 不透明度设置为 1,但这不会显示微调器(源代码)。
  • 设置moz-appearance: number-input;(和类似的)不显示微调器()。
  • 设置-webkit-appearance: inner-spin-button;不显示微调器()。
  • HTML 输入元素上的设置inputmode="numeric"不显示微调器(源代码)。

PC 上的 iPad 模拟器(就其价值而言)在 Firefox Inspector 上显示微调器按钮,而 Google Chrome Inspector 则不显示微调器按钮。

这里有一条评论说

在 Firefox 和 Safari 中,默认功能是始终显示它。

Safari 12.1 似乎不再出现这种情况

如何在网页的 iPad 显示屏上显示这些输入旋转按钮?

joh*_*pin 7

在某些时候,对于像input. 出于这个原因,我建议您使用一些 JavaScript 来重新创建一个“伪造”本机行为的程序。这是一个非常基本的例子:

const input = document.querySelector('input[type=number]')

const increment = () => {
  input.value = Number(input.value) + 1
}
const decrement = () => {
  input.value = Number(input.value) - 1
}

document.querySelector('.spinner.increment').addEventListener('click', increment)
document.querySelector('.spinner.decrement').addEventListener('click', decrement)
Run Code Online (Sandbox Code Playgroud)
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.number-input {
  position: relative;
  width: fit-content;
}

input {
  width: 60px;
}

.spinners {
  position: absolute;
  right: 0;
  top: 50%;
  display: flex;
  flex-direction: column;
  width: fit-content;
  margin: 1px;
  transform: translateY(-50%);
}

.spinner {
  font-size: 7px;
  border: none;
  padding: 0 1px;
}

.spinner:hover {
  background: lightgrey;
}
Run Code Online (Sandbox Code Playgroud)
<div class="number-input">
  <input type="number" name="Quantity[47]" value="0" class="qtyInputLoose" min="0" max="8">
  <div class="spinners">
    <button class="spinner increment">&#9650;</button>
    <button class="spinner decrement">&#9660;</button>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如果你需要更多定制的东西,只需调整一点 css 和 html 结构:

const input = document.querySelector('input[type=number]')

const increment = () => {
  input.value = Number(input.value) + 1
}
const decrement = () => {
  input.value = Number(input.value) - 1
}

document.querySelector('.spinner.increment').addEventListener('click', increment)
document.querySelector('.spinner.decrement').addEventListener('click', decrement)
Run Code Online (Sandbox Code Playgroud)
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.number-input {
  display: flex;
}

input {
  width: 40px;
  border: solid 1px lightgrey;
  border-radius: 0;
  text-align: center
}

.spinner {
  border: solid 1px lightgrey;
}

.spinner:hover {
  background: lightgrey;
}

.spinner:first-child {
  border-radius: 3px 0 0 3px;
}

.spinner:last-child {
  border-radius: 0 3px 3px 0;
}
Run Code Online (Sandbox Code Playgroud)
<div class="number-input">
  <button class="spinner decrement">-</button>
  <input type="number" name="Quantity[47]" value="0" class="qtyInputLoose" min="0" max="8">
  <button class="spinner increment">+</button>
</div>
Run Code Online (Sandbox Code Playgroud)

这是一个带有 JQuery 的版本:

const input = $('input[type=number]')

const increment = () => {
  input.val(Number(input.val()) + 1)
}
const decrement = () => {
  input.val(Number(input.val()) - 1)
}

$('.spinner.increment').click(increment)
$('.spinner.decrement').click(decrement)
Run Code Online (Sandbox Code Playgroud)
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.number-input {
  display: flex;
}

input {
  width: 40px;
  border: solid 1px lightgrey;
  border-radius: 0;
  text-align: center
}

.spinner {
  border: solid 1px lightgrey;
}

.spinner:hover {
  background: lightgrey;
}

.spinner:first-child {
  border-radius: 3px 0 0 3px;
}

.spinner:last-child {
  border-radius: 0 3px 3px 0;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<div class="number-input">
  <button class="spinner decrement">-</button>
  <input type="number" name="Quantity[47]" value="0" class="qtyInputLoose" min="0" max="8">
  <button class="spinner increment">+</button>
</div>
Run Code Online (Sandbox Code Playgroud)