Имитация плиточного поля ввода

Я пытаюсь имитировать плавный плиточный ввод (отзывчивое поле ввода текста с квадратной плиткой для каждого символа). Пока что я получил довольно приличный результат, но есть пара проблем, которые я не могу полностью понять, и я подумал, может быть, кто-то здесь может предложить решение (или лучшее).

Вот мой код:

@import url('https://fonts.googleapis.com/css?family=Source+Code+Pro');

* { box-sizing: border-box; } 
.tiled-input { position: relative; }

.tiles {
    display: flex;
    background: black;
    padding: 0 0.2vw;
}

.tile {
    display: inline-block;
    background: white;
    margin: 0.4vw 0.2vw;
    flex: 1 0 auto;
}

.tile:before {
    content: "";
    display: block;
    padding-bottom: 100%;
}

input {
    display: block;
    position: absolute;
    background: transparent;
    outline: none;
    border: none;
    width: 100%;
    height: 100%;
    top: 0;
    font-family: "Source Code Pro";
    text-transform: uppercase;
    text-indent: 2vw;
    font-size: 7.5vw;
    letter-spacing: 0.5em;
}    
    
<div class = "wrapper">
    <div class = "tiled-input">
        <div class = "tiles">
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
            <div class = "tile"></div>
        </div>
        <input type = "text" maxlength = "12">
    </div>
</div>

Вопросы:

  1. Я хотел бы улучшить (может быть, какое-нибудь выражение calc()?) Значение letter-spacing, чтобы символы всегда были центрированы по всей ширине. Прямо сейчас я получил его для больших устройств, но есть некоторые размеры, в которых буквы немного неуместны ...

  2. Мне нужно, чтобы было 12 плиток, но когда я ввожу последний символ, курсор перемещается в ожидании 13-го, и он сдвигает весь ввод, перемещая символы. Единственное решение, которое я мог придумать для этого, - это добавить overflow: hidden к .tiled-input и сделать input похожим на width: 120%, но мне нужен лучший подход.

Я сейчас немного занят, но я пробовал кое-что, что вы можете использовать, что могло бы быть лучше. Вам придется повозиться с этим, но я думаю, что вы можете добиться желаемого поведения, используя repeating-linear-gradient. См. Этот рабочий пример.

Phiter 20.04.2018 19:26

Должен ли он быть только HTML / CSS или приемлем Javascript?

APAD1 20.04.2018 19:26

Спасибо @Phiter, я исследую подход с repeating-linear-gradient, но я предполагаю, что столкнусь с той же проблемой с letter-spacing, поскольку проблема заключается не в рисовании плиток, а в размещении символов.

Jordi Nebot 20.04.2018 19:32

У Криса Койера есть образец CodePen решения для этого типа подхода, основанного на фоне SVG для создания разделения строк: codepen.io/chriscoyier/pen/kKdCz

Robert 20.04.2018 19:32

@ APAD1 JS может быть приемлемым, предпочтительнее только HTML / CSS

Jordi Nebot 20.04.2018 19:33

Спасибо @RobertC, я посмотрю

Jordi Nebot 21.04.2018 13:25

Ты прав @TemaniAfif, ссылок не нашел ...

Jordi Nebot 21.04.2018 13:26

вы хотите закрыть как дубликат? :) другой ответ вам подходит?

Temani Afif 21.04.2018 13:33

@TemaniAfif Я так думаю. Я попробую.

Jordi Nebot 21.04.2018 16:49
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
9
76
0

Другие вопросы по теме