Есть ли способ заставить порядок табуляции соблюдать визуальный порядок?

Допустим, у меня есть веб-страница, содержащая список ссылок.

<ul class="links">
    <li><a href="#">Alpha</a></li>
    <li><a href="#">Bravo</a></li>
    <li><a href="#">Charlie</a></li>
</ul>

По соображениям дизайна мне нужно изменить порядок этих ссылок на больших экранах, чтобы «Альфа» была визуально внизу списка.

@media (min-width: 30em) {

    .links {
        display: flex;
        flex-direction: column;
    }

    .links > li:first-child {
        order: 1;
    }

}

При переходе по различным элементам на странице, на которые можно сфокусироваться, визуальный порядок этих ссылок не соблюдается, поэтому при переходе по списку порядок фокуса будет «Альфа», затем «Браво», затем «Чарли».

Если я устанавливаю положительный tabindex для любой из этих ссылок, они перемещаются в конец порядка табуляции (поскольку все остальные фокусируемые элементы по существу имеют индекс табуляции 0).

У меня вопрос: есть ли способ сделать так, чтобы порядок табуляции соответствовал визуальному порядку?.


person James Long    schedule 21.11.2018    source источник
comment
Возможно нет. Если вы не укажете положительное значение для tabindex, фокус будет следовать за DOM и на самом деле не будет заботиться о том, какой CSS вы применяете для перемещения вещей. Я бы создал отдельный элемент с правильным порядком и скрыл его на рабочем столе/мобильном устройстве.   -  person I haz kode    schedule 21.11.2018
comment
w3.org/TR/css-flexbox-1/#order- доступность   -  person jeanpaulxiao    schedule 21.11.2018
comment
@jeanpaulxiao хорошая находка. Если вы предоставите ответ, который в основном говорит в соответствии со спецификациями, нет, и включите эту ссылку, я приму его как ответ.   -  person James Long    schedule 21.11.2018
comment
Итак, что вам нужно сделать, это переместить его с помощью скрипта... и если без скрипта, вы можете дублировать элемент и переключать отображаемые значения.   -  person René    schedule 21.11.2018
comment
@ Рене, я думаю, ты прав. Единственное решение, похоже, состоит в том, чтобы настроить разметку, а не просто стили.   -  person James Long    schedule 21.11.2018


Ответы (1)


В настоящее время не существует способа объединить упорядочение flex и упорядочение HTML, согласно https://www.w3.org/TR/css-flexbox-1/#order-property и раздел 5.4.1. Переупорядочивание и доступность:

Авторы должны использовать порядок только для визуального, а не логического изменения порядка содержания. Таблицы стилей, которые используют порядок для выполнения логического изменения порядка, не соответствуют требованиям.

person jeanpaulxiao    schedule 21.11.2018