Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Адаптивная сетка шестиугольников с раздвигающимися половинками

#html #css #css3 #html5 #css_animation


Можно ли придать всем  изображениям форму шестиугольника в адаптивной сетке?  

... Я нашел несколько способов сделать это, но мне нужно было заполнить изображение в коде CSS. Эти способы не подходят для меня, потому что веб-сайт загружает случайные изображения из Интернета с помощью jQuery, поэтому я не могу использовать фоновые изображения. Моя попытка здесь: http://jsfiddle.net/8f5m5wv0/


Ответы

Ответ 1



Техника создания респонсивных шестиугольников использует: тег неупорядоченный список: каждый шестиугольник содержится в теге
  • и теге transform rotate и skew, чтобы сделать шестиугольник nth-child() для размещения шестиугольников в правильном порядке И еще, чтобы создать шестиугольную сетку с тегом . Особенности сетки шестиугольника: Сетка респонсивна, так как основана на процентах ширины. Шестиугольники сохраняют свои пропорции с помощью метода padding-bottom, а размеры изображений изменяются в соответствии с формой шестиугольника. Эффект наведения на шестиугольники: текст скользит с прозрачным наложением на изображение. Каждый шестиугольник поддерживает свои границы: эффект наведения (или событие щелчка) для каждого шестиугольника срабатывает только внутри фактической формы. Полный код Следующий фрагмент не является последней версией сетки. Репозиторий GitHub поддерживается и обновляется. Вопросы и вклады могут быть сделаны там. * { margin: 0; padding: 0; } body { font-family: 'Open Sans', arial, sans-serif; background: rgb(123, 158, 158); } #hexGrid { overflow: hidden; width: 90%; margin: 0 auto; padding:0.707% 0; } #hexGrid:after { content: ""; display: block; clear: both; } .hex { position: relative; list-style-type: none; float: left; overflow: hidden; visibility: hidden; -webkit-transform: rotate(-60deg) skewY(30deg); -ms-transform: rotate(-60deg) skewY(30deg); transform: rotate(-60deg) skewY(30deg); } .hex * { position: absolute; visibility: visible; } .hexIn { display:block; width: 100%; height: 100%; text-align: center; color: #fff; overflow: hidden; -webkit-transform: skewY(-30deg) rotate(60deg); -ms-transform: skewY(-30deg) rotate(60deg); transform: skewY(-30deg) rotate(60deg); -webkit-backface-visibility: hidden; backface-visibility: hidden; } /* HEX CONTENT */ .hex img { left: -100%; right: -100%; width: auto; height: 100%; margin: 0 auto; } .hex h1, .hex p { width: 90%; padding: 0 5%; background-color: #008080; background-color: rgba(0, 128, 128, 0.8); font-family: 'Raleway', sans-serif; -webkit-transition: top .2s ease-out, bottom .2s ease-out, .2s padding .2s ease-out; transition: top .2s ease-out, bottom .2s ease-out, .2s padding .2s ease-out; } .hex h1 { bottom: 110%; font-style: italic; font-weight: normal; font-size: 1.5em; padding-top: 100%; padding-bottom: 100%; } .hex h1:after { content: ''; display: block; position: absolute; bottom: -1px; left: 45%; width: 10%; text-align: center; z-index: 1; border-bottom: 2px solid #fff; } .hex p { padding-top: 50%; top: 110%; padding-bottom: 50%; } /* HOVER EFFECT */ .hexIn:hover h1 { bottom: 50%; padding-bottom: 10%; } .hexIn:hover p { top: 50%; padding-top: 10%; } /* SPACING AND SIZING */ @media (min-width:1201px) { .hex { width: 19.2%; /* = (100-4) / 5 */ padding-bottom: 22.170%; /* = width / sin(60deg) */ } .hex:nth-child(9n+6), .hex:nth-child(9n+7), .hex:nth-child(9n+8), .hex:nth-child(9n+9) { margin-top: -4.676%; margin-bottom: -4.676%; -webkit-transform: translateX(50%) rotate(-60deg) skewY(30deg); -ms-transform: translateX(50%) rotate(-60deg) skewY(30deg); transform: translateX(50%) rotate(-60deg) skewY(30deg); } .hex:nth-child(9n+6):last-child, .hex:nth-child(9n+7):last-child, .hex:nth-child(9n+8):last-child, .hex:nth-child(9n+9):last-child { margin-bottom: 0; } .hex:nth-child(9n+6) { margin-left: 0.5%; clear: left; } .hex:nth-child(9n+10) { clear: left; } .hex:nth-child(9n+2), .hex:nth-child(9n+ 7) { margin-left: 1%; margin-right: 1%; } .hex:nth-child(9n+3), .hex:nth-child(9n+4), .hex:nth-child(9n+8) { margin-right: 1%; } } @media (max-width: 1200px) and (min-width:901px) { .hex { width: 24.25%; /* = (100-3) / 4 */ padding-bottom: 28.001%; /* = width / sin(60deg) */ } .hex:nth-child(7n+5), .hex:nth-child(7n+6), .hex:nth-child(7n+7) { margin-top: -6.134%; margin-bottom: -6.134%; -webkit-transform: translateX(50%) rotate(-60deg) skewY(30deg); -ms-transform: translateX(50%) rotate(-60deg) skewY(30deg); transform: translateX(50%) rotate(-60deg) skewY(30deg); } .hex:nth-child(7n+5):last-child, .hex:nth-child(7n+6):last-child, .hex:nth-child(7n+7):last-child { margin-bottom: 0; } .hex:nth-child(7n+2), .hex:nth-child(7n+6) { margin-left: 1%; margin-right: 1%; } .hex:nth-child(7n+3) { margin-right: 1%; } .hex:nth-child(7n+8) { clear: left; } .hex:nth-child(7n+5) { clear: left; margin-left: 0.5%; } } @media (max-width: 900px) and (min-width:601px) { .hex { width: 32.666%; /* = (100-2) / 3 */ padding-bottom: 37.720%; /* = width / sin(60) */ } .hex:nth-child(5n+4), .hex:nth-child(5n+5) { margin-top: -8.564%; margin-bottom: -8.564%; -webkit-transform: translateX(50%) rotate(-60deg) skewY(30deg); -ms-transform: translateX(50%) rotate(-60deg) skewY(30deg); transform: translateX(50%) rotate(-60deg) skewY(30deg); } .hex:nth-child(5n+4):last-child, .hex:nth-child(5n+5):last-child { margin-bottom: 0; } .hex:nth-child(5n+4) { margin-right: 1%; margin-left: 0.5%; } .hex:nth-child(5n+2) { margin-left: 1%; margin-right: 1%; } .hex:nth-child(5n+6) { clear: left; } } @media (max-width: 600px) { .hex { width: 49.5%; /* = (100-1) / 2 */ padding-bottom: 57.158%; /* = width / sin(60) */ } .hex:nth-child(3n+3) { margin-top: -13.423%; margin-bottom: -13.423%; -webkit-transform: translateX(50%) rotate(-60deg) skewY(30deg); -ms-transform: translateX(50%) rotate(-60deg) skewY(30deg); transform: translateX(50%) rotate(-60deg) skewY(30deg); } .hex:nth-child(3n+3):last-child { margin-bottom: 0; } .hex:nth-child(3n+3) { margin-left: 0.5%; } .hex:nth-child(3n+2) { margin-left: 1%; } .hex:nth-child(3n+4) { clear: left; } } Изменение количества шестиугольников в строке Сетка адаптирует количество шестиугольников в строке в соответствии с шириной области просмотра от 5 на экранах шире, чем 1200px, до 2 на экранах, меньших 600px. Если вам не нужны медиа-запросы, а просто нужно изменить количество шестиугольников в строке, вы можете убрать CSS из соответствующего медиа-запроса и удалить ненужные. Для получения дополнительной настройки см. sizing and spacing of hexagons. Демо Список всех демонстраций см. В этой коллекции codepen: Responsive grids of hexagons с различным количеством шестиугольников в строке, варианты центрирования и многое другое ... Вот оригинальная демонстрационная программа на codepen с элементом .pusher для создания неправильной сетки из шестиугольников. Элемент .pusher используется для создания "дырок" в сетке с пустыми шестиугольниками.

    Ответ 2



    Если речь идет о сотах, то для пчелиного шестигранника здесь есть возможность сделать это с помощью CSS
    div { margin:0 0; height:180px; width:200px; position:relative; overflow:hidden; display:inline-block; margin-right:-51px; vertical-align:middle; } div span { overflow:hidden; position:absolute; height:110%; width:100%; top:-5%; left:0; box-shadow: inset 0 0 0 3px; background:blue; transform:rotate(45.5deg) skew(16.5deg,15.5deg); } div span img { transform:rotate(-45deg) skew(0,0) scale(1.4,0.77) ; } img { vertical-align:bottom; border:solid; } div:nth-child(odd) { margin-bottom:2px; } div:nth-child(even) { margin-bottom:-179px; } section { width:920px; margin:auto; background:linear-gradient(to top right , pink,gray,lime,purple,yellow); padding:1px 51px 90px 1px; } body { background:#333; }
    Источник ответа: @G-Cyr

  • Комментариев нет:

    Отправить комментарий