seregadushka
@seregadushka
minsk

@media {}, загадочная черная точка и единица?

Стили для разной ширины экрана.
Цель : хоть какая то реакция на изменение ширины браузера. Реакция непонятная.
:root { --width_n: calc(100% / max(1,(5 - var(--m, 0))));  }

ul.column {	display: flex;
		flex-wrap: wrap;
		justify-content: center ;
	& li { flex:  0 0 var(--width_n);
		padding: 5px;
		@media (max-width: 1560px) { --m: 1;}
		@media (max-width: 1160px) { --m: 2;}
		@media (max-width:  860px) { --m: 3;}
		@media (max-width:  480px) { --m: 4;}
		
		& img { border-radius: 10px; 
			max-width: 100%;
			height: auto; }   }   }


HTML такой короnкий, т.к. идет сборка через JS и запись в HTML. Это работает, картинки на месте.
<ul id="column" class="column"></ul>

Мне кажется , я придумал способ короткий удобный , красиво. Но он не работает. :) .
Изначально ширина планировалась 5 столбов. Т.е. для максимальной ширины, больше 1560рх , общий стиль без @media{} .
Ширина картинка равно flex: 0 0 20%; Работает частично.

Вот какой код был к оригинале:
spoiler
/*
ul.demo-2-column{ display: flex; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; justify-content: center !important;}
.demo-2-column li{ flex: 0 0 50%; max-width: 50%; padding: 0 15px;}

ul.demo-3-column{ display: flex; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; justify-content: center !important;}
.demo-3-column li{ flex: 0 0 33.333333%; max-width: 33.333333%; padding: 0 15px;}

ul.demo-4-column{ display: flex; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; justify-content: center !important;}
.demo-4-column li{ flex: 0 0 25%; max-width: 25%; padding: 0 15px;}

ul.demo-5-column{ display: flex; flex-wrap: wrap; margin-right: -15px; margin-left: -15px; justify-content: center !important;}
.demo-5-column li{ flex: 0 0 20%; max-width: 20%; padding: 0 15px;}
*/

media (max-width: 991px) {
/* .demo-3-column li{ flex: 0 0 50%; max-width: 50%;}
.demo-4-column li{ flex: 0 0 50%; max-width: 50%;}*/

media (max-width: 567px) {
/* .demo-3-column li{ width: 100%;}*/
/*
.demo-4-column li{ flex: 0 0 100%; max-width: 100%;}
.demo-3-column li{ flex: 0 0 100%; max-width: 100%;}
.demo-2-column li{ flex: 0 0 100%; max-width: 100%;}
*/

Все это лишнее.

1. Но почему-то упорно ширина делится 4 , а не на 5. Откуда 4 ? Откуда обязательная единица ?
2. Все-таки срабатывает уменьшение на 1 столб при экране меньше 256рх (3 столба). Также срабатывает на мелких 128рх (2 столба) 114рх (1 столб) (условно). Таких цифр в коде нет.
3. Загадочная черная точка у каждой картинки, внизу слева. Что это такое ?

Ответы, основанные на решении Ивана и :
1. Загадочная черная точка . Это список —- list-style: none; )
2. Т.к. flex-shrink: 0, то 5 столбов были бы на экране и в этом коде. При ширине экрана (5+800+5)*5
3. Расчет flex-basis вынесен из :root в класс

Результат: PhotoBox
Продолжение галереи (полная версия): Галерея. Lightbox. Как пропустить общий вид и выйти сразу на Lightbox?
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
IvanU7n
@IvanU7n
нужно понимать как работают кастомные css-свойства (ака переменные) и var():
если совсем просто, то var() НЕ смотрит на потомков, а только на себя и предков, т.е. до элемента переменные доходят, но т.к. --width_n установлен в :root, то используемые внутри var() переменные (в том числе и --m) будут искаться исключительно в самом :root, поэтому если какие-то переменные нужно переопределить, то делать это необходимо именно там, где они и используются, в этом случае это был :root

что касается box-sizing, то после его появления во все стили прописывается что-то типа
*, ::before, ::after { box-sizing: border-box; }
чтобы не страдать с легаси box-моделью css
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы