Как сделать наезжающие друг на друга блоки
Всем привет.
Я новичок, пытаюсь написать карточную игру на js. Игра почти готова, но что-то я сильно туплю на, казалось бы, самом простом. Мой вопрос: как сделать так, чтобы карты в "магазине" у бота или юзера динамически наезжали друг на друга. Сейчас у меня карты отображаются просто одна за другой в ряд (это просто картинки img, которые динамически создаются js). И если игрок много "взял", то они не помещаются и переносятся на другую строку. Что вполне естественно, но как этого можно избежать? Чтобы наглядно показать чего я пытаюсь добиться, прикреплю картинку. ![]() Представьте, сначала раздали 7 карт. Затем, по мере игры, если карт у юзера становится больше, они наезжают друг на друга как на картинке. Как это можно сделать? |
Цитата:
pisition: absolute; |
:-?
margin-right??? <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .hot{ border: 1px dashed Gray; padding: 5px; height: 200px; width: 100px; border-radius: 8px; margin-right: -75px; background-color: #FFFFFF; } .hot:before{ content: "♠"; color: #FF0000; } .slider{ display: flex; width: 500px; } </style> </head> <body> <div class="slider"> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> <div class="hot"></div> </div> </body> </html> |
Спасибо! Все прояснилось)
Изначально зациклился, что есть какой-то нативный способ. Чтобы блоки сами наезжали друг на друга равномерно, когда они не помещаются в строку полностью. А на самом деле решение в том, чтобы задавать дискретные изменения вручную. Допустим, сделать 3 точки перехода: 1. Если блоков > 12; 2. Если блоков > 20; 3. Если блоков > 30 А дальше или по методу ksa. Можно обходить блоки циклом как массив и позиционировать. Или по методу рони задавать отрицательный маржин (-30, -50, -70). |
void(),
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> *{ margin: 0; padding: 0; } .hot{ border: 1px dashed Gray; height: 200px; width: 100px; border-radius: 8px; background-color: #FFFFFF; flex-shrink: 0; } .hot:before{ content: "♠"; color: #FF0000; } .slider{ display: flex; width: 98%; justify-content: flex-start; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var n = 1+ Math.random()*36|0; var m = 100 - ($('.slider').width()-175)/(n-1); m < 0 && (m = -5); m > 100 && (m = 95); for (var i=0; i<n; i++) { $('<div class="hot">'+i+'</div>').appendTo('.slider').css({'margin-right': -m +"px"})} }); </script> </script> </head> <body> <div class="slider"> </div> </body> </html> |
wow! Ваше решение самое гениальное в своей простоте и эффективности. Спасибо большое!
|
Цитата:
if(m<0) m=-5; if(m>100) m=95; Или я чего-то не знаю? |
Цитата:
Это джедай стайл... :D |
Цитата:
Не сразу можно понять какого фига условие посреди строки и вне оператора if) |
Цитата:
Например в JS помимо этого используется еще такой прием для присваивания значения function test(Prm){ Prm = Prm || 0; alert(Prm); } test(); И если в конторе приняты такие стайлы, новички об этом узнают и потом используют дальше. Т.е. это становится некой нормой. ;) |
Часовой пояс GMT +3, время: 22:54. |