Страницы

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

Показаны сообщения с ярлыком svg. Показать все сообщения
Показаны сообщения с ярлыком svg. Показать все сообщения

четверг, 2 апреля 2020 г.

Как склеить текст (стилизованный css) и картинку средствами JS (пример в приложении)

#javascript #svg #png #gif #jpg

                    
Задача такая, на сайте хочу добавить возможность менять картинку, точнее добавлять
текст для гравировки на кольцо, для этого необходимо чтобы создавалась картинка с превью
в виде png,svg,jpg. Текст вводит клиент, выбирает шрифт, а уже с применением css и
эффектов это c прозрачным фоном добавляется на существующее кольцо (становится одной
картинкой) и ее уже можно отправлять мне как образец для работы над продуктом... как
такое можно сделать?


    


Ответы

Ответ 1



document.addEventListener('input', function (e) { document.querySelector('textPath').textContent = e.target.value; }) path { fill: none; stroke: black; stroke-width: 1px; } text { font-size: 15px; }
Ash nazg durbatulûk

Как можно создавать SVG фигуры около начала координат и потом помещать на нужное место

#css #svg

                    
Мне нужно некоторое количество похожих фигур SVG разместить в разные места на экране.

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

Я хочу нарисовать эти фигуры не сразу на своих местах, используя абсолютные координаты,
а нарисовать их в начале координат, и потом переместить их в нужное мне место.

То есть я использую какую-то (какую?) конструкцию языка SVG и говорю поместите мою
фигуру в это место.

Можно ли это сделать, если можно то как? Необходимо решение без JavaScript, либо
понимание что такое сделать нельзя.
    


Ответы

Ответ 1



Размещаем прямоугольник и в секции поэтому фигуры не будут видны до вызова их из хранилища. Вызов из хранилища, позиционирование, трансформация фигуры, всё это можно сделать с помощью команды rect, circle{ fill:inherit; stroke:inherit; } Обратите внимание На стилизацию фигур при использовании команды Так как при применении команды для вызова и клонирования фигур из секции последние попадают, в так называемый Shadow DOM, стилизация будет невозможна, если не применить принудительное наследование rect, circle{ fill:inherit; stroke:inherit; }

Каким образом меняется размер clipPath?

#html #svg #inkscape #сss3

                    
Господа, столкнулся я значит с такой задачей:


Есть слайдер, все фото которые в него попадают(180px/180px), должны быть обрезаны
по контуру.




Для фигурной обрезки было решено использовать SVG маску.
В программе Inkeskape, создал холст 180/180 и набросал контур. 
Далее нашел в "И-нете" статьи о свойстве clip-path: url(...);. 
Скопировал из svg файла "путь", перенес все это дело в HTML песочницу и обрезал фотографию.
Результат - маленький контур (примерно 100*100px) обрезает большую фотографию.
Песочница на codepen

Подскажите, как увеличить этот контур относительно фотографии и можно ли это делать
через css?
    


Ответы

Ответ 1



У вас фотография имеет размер 600х800px Поэтому и полигон в Inkscape для clipPath нужно было выбрать точно такого же размера. И тогда маску не нужно было бы уменьшать, увеличивать. Второй путь - загружаете фотографию в Inkscape и прямо сверху фотографии рисуете патч, который будет использован в качестве clipPath Но это на будущее. А сейчас можно пойти третьим путём. Для увеличения размера клипа используем команду transform="scale(N)" Подбираете вручную. После увеличение clipPath сдвинется вправо и вниз. Для позиционирования используете команду - transform="translate(X Y)" В итоге формула для увеличения, позиционирования выглядит так: transform="scale(3.3) translate(-11.7 -10)" Внизу полный код, сравните его со своим исходным кодом и подкорректируйте немного CSS, так он был немного изменен мною для более точного позиционирования. HTML, BODY { height: 100%; } BODY { background: linear-gradient( #EEE 1px, transparent 2px), linear-gradient( to right, #EEE 1px, transparent 2px); background-size: 1em 1em; } .wrapper { position: absolute; top: 0; bottom: 0; margin: auto; width: 100%; height: 300px; text-align: center; white-space: nowrap; font-family: Arial, sans-serif; background-color: gray; } .catMask { position: absolute; top: 10px; left: calc(50% - 50px); width:250px; height: auto; -webkit-clip-path: url(#svgPath); clip-path: url(#svgPath); } .maskItem { width: 100%; overflow: hidden; }
face


Странные полоски в паттерне

#svg

                    
Пробую сделать такой pattern, и непонятно откуда появляются вертикальные полоски,
которых быть не должно.

При этом сам элемент pattern'a если вывести (смотрите пример) никаких полосок нет.



body {
  margin: 0;
  background: black;
}

.c1 {
  fill: #ffd77a;
  stroke: #ffd77a;
}

.c2 {
  fill: #ffed7a;
  stroke: #ffed7a;
}

.c3 {
  fill: #fbff7a;
  stroke: #fbff7a;
}

.c4 {
  fill: #e4ff7a;
  stroke: #e4ff7a;
}

.c5 {
  fill: #ceff7a;
  stroke: #ceff7a;
}

.c6 {
  fill: #b8ff7a;
  stroke: #b8ff7a;
}

.c7 {
  fill: #a2ff7a;
  stroke: #a2ff7a;
}

    
        
            
            
        
        
            
            
            
            
        

        
            
            
            
            
        
    

    

    





Прилагаю скриншот на случай если это глюк моего рендера (Yandex Browser)



А вот если размер паттерна сделать другой то всё работает нормально



body {
  background: black;
  margin: 0;
}

.c1 {
  fill: #ffd77a;
  stroke: #ffd77a; }

.c2 {
  fill: #ffed7a;
  stroke: #ffed7a; }

.c3 {
  fill: #fbff7a;
  stroke: #fbff7a; }

.c4 {
  fill: #e4ff7a;
  stroke: #e4ff7a; }

.c5 {
  fill: #ceff7a;
  stroke: #ceff7a; }

.c6 {
  fill: #b8ff7a;
  stroke: #b8ff7a; }

.c7 {
  fill: #a2ff7a;
  stroke: #a2ff7a; }

    
        
            
            
        
        
            
            
            
            
        

        
            
            
            
            
        
    

    

    





Во втором примере размер pattern'a не 50, а 40.

Вопрос в том, почему это так странно работает, и как правильно писать код чтобы таких
артефактов не было.

Как поправить данный пример я методом проб и ошибок понял, можно сделать stroke-width:
5px; и артефакты пропадают. Но мне не понятна логика их появления. 

На мой текущий уровень понимания я это понимаю так что при масштабировании какие-то
величины делятся не нацело а результатом являются дробные величины которые при рендере
вот так отображаются, поэтому для состыковки элементов нужно брать запас в пикселях,
что бы покрыть неточности масштабирования, поворотов и переносов. И артефакт связан
с внутренними особенностями алгоритма рендера.
    


Ответы

Ответ 1



Проведя ряд тестов понял откуда берутся полосы. При размерах родительского элемента которые делятся нацело с размером паттерна - всё хорошо. Когда деление рождает дробные числа получаются зазоры. Смысл в том что у меня в примере есть параллельные линии между элементами el1 и big1, при кратных размерах они рисуются вплотную, при дробных размерах появляется зазор. Вероятно это связано с округлениями и особенностями алгоритма рисований кривых. В данном случае это надо понимать как данность и особенность рендера SVG, которую надо учитывать. Вот пример для тестов. Верхние квадраты сделаны с размерами символа кратными разерам внутри символа. Нижние квадраты - некратные размеры. Как можно видеть в нижних квадратах появляется зазор. Специально что бы его было лучше видно добавил белые полосы, на границе легко отслеживается смена чёрного и белого. Привожу скриншот как это выглядит у меня на случай если у кого-то другой рендер.

понедельник, 30 марта 2020 г.

Как сделать чтобы анимация вызванная :hover продолжалась до конца, независимо от положения мыши?

#html #css3 #svg #анимация #svg_animation




body {
  margin: 0;
  padding: 0;
  background-color: #8e3a89;
  display: -webkit-flex;
  display: -moz-flex;
  display: -ms-flex;
  display: -o-flex;
  display: flex;
  justify-content: center;
  align-items: center;
}

.svg {
  margin: 10px;
  width: 150px;
  height: 150px;
}

.sas {
  fill: none;
  stroke: #fff;
  stroke-width: 3;
  stroke-dasharray: 2550;
}

.svg:hover .sas {
  animation: animate 3s;
}

@keyframes animate {
  0% {
    stroke-dashoffset: 2550;
  }
  100% {
    stroke-dashoffset: 0;
  }
}


Ответы

Ответ 1



body { margin: 0; padding: 0; background-color: #8e3a89; display: -webkit-flex; display: -moz-flex; display: -ms-flex; display: -o-flex; display: flex; justify-content: center; align-items: center; } .svg { margin: 10px; width: 150px; height: 150px; border: 1px solid red; } .sas { fill: none; stroke: #fff; stroke-width: 3; stroke-dasharray: 2550; stroke-dashoffset: 0; }


Не работает анимация крестика

#javascript #html #jquery #css #svg




.ham {
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: transform 400ms;
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.hamRotate.active {
  transform: rotate(45deg);
}
.hamRotate180.active {
  transform: rotate(180deg);
}
.line {
  fill:none;
  transition: stroke-dasharray 400ms, stroke-dashoffset 400ms;
  stroke:#000;
  stroke-width:5.5;
  stroke-linecap:round;
}
.ham1 .top {
  stroke-dasharray: 40 139;
}
.ham1 .bottom {
  stroke-dasharray: 40 180;
}
.ham1.active .top {
  stroke-dashoffset: -98px;
}
.ham1.active .bottom {
  stroke-dashoffset: -138px;
}

					onclick="this.classList.toggle(' active')"
  
  
  





Но мне надо что бы при нажатии на другую кнопку срабатывала анимация для этого пишу

$('#filter-menu-button').click(function(){
  $('.hamRotate').toggleClass("active");
});
Но не работает 
    


Ответы

Ответ 1



jQuery может работать с SVG только с версии 3+. Вы можете изменить .toggleClass() на .attr() или использовать .classList.toggle(). Ниже пример кода с решением через .classList.toggle() function toggleButton() { document.querySelector('.hamRotate').classList.toggle('active'); } document.querySelector('.hamRotate').addEventListener('click', toggleButton, false); document.querySelector('#filter-menu-button').addEventListener('click', toggleButton, false); .ham { cursor: pointer; -webkit-tap-highlight-color: transparent; transition: transform 400ms; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; } .hamRotate.active { transform: rotate(45deg); } .hamRotate180.active { transform: rotate(180deg); } .line { fill: none; transition: stroke-dasharray 400ms, stroke-dashoffset 400ms; stroke: #000; stroke-width: 5.5; stroke-linecap: round; } .ham1 .top { stroke-dasharray: 40 139; } .ham1 .bottom { stroke-dasharray: 40 180; } .ham1.active .top { stroke-dashoffset: -98px; } .ham1.active .bottom { stroke-dashoffset: -138px; }

Принцип переноса текста в svg?

#html #svg


В svg нет тэга br и для переноса используются атрибуты тэга x и dy


    very long text
    I would like to linebreak
  


А какой принцип действия у этих атрибутов?
 Есть ли другие варианты переноса текста,  какой нибудь аналог br?
    


Ответы

Ответ 1



Аналогом
в SVG является тег - , который размещается внутри Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. "x", "y" - абсолютные координаты начала текста, рассчитывается от начала координат исходного svg "dx", "dy" - относительные координаты, задают сдвиг, перенос части текста. К можно применять стили: Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Съешь еще этих мягких французских булок, да выпей чаю. Используя координаты x и y для абсолютного позиционирования букв в слове, можно получить интересные результаты. Выше, Здесь координаты указаны парами для каждой буквы Быстрее, Выше, Cильнее Ещё один способ использования - размещение внутри него символов Юникода. Атрибуты "dx" и "dy" используются для взаимного, относительного позиционирования элементов. - - - - - - - - - - Связанная тема: page-break-inside для SVG g тэгов?

Анимация градиента SVG под углом

#css #css3 #svg #анимация


Как правильно реализовать анимацию градиента SVG элемента под углом и с задержкой?



svg {
  transform: rotate(250deg);
}

    
    
      
        
      
      
        
      
    




    


Ответы

Ответ 1



Угол наклона градиента обеспечивают параметры: x1="45" x2="0" y1="75" y2="0" Анимация перехода градиента из одного цвета в другой: .crc1 ~ defs stop { transition: 3s; Подбирая значения цвета начального градиента -stop:first-child и конечного - stop:last-child можно получить очень интересные эффекты: Анимация начинается при наведении курсора: .crc1 { fill: url('#grad1'); } .crc1 ~ defs stop { transition: 3s; } .crc1 ~ defs stop:first-child { stop-color: #24bed2; } .crc1:hover ~ defs stop:last-child { stop-color: #F4FFAF; }

воскресенье, 29 марта 2020 г.

Как сделать круговую диаграмму на SVG с заливкой?

#html #css #svg




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



    
        
    
 


Как сделать заливку? 

Бордер генерирую вот так: 



var stroke = 477, bg = 251;
  var percent = $('svg').attr('data-percent'),
      newStroke = stroke * (percent/100),
      newbg = bg * (percent/100);
      $('.start-2').css('stroke-dasharray', newBg+' '+bg);
      $('.start').css('stroke-dasharray', newStroke+' '+stroke);
  console.log(newStroke+' '+stroke);
 
svg {
  width: 300px;
  height: 300px;
}

.start {
  stroke-dasharray: 238.5 477;
  transition: 1s;
  fill-rule: nonzero;
  fill:none;
  stroke:green;
  stroke-width:4;
}
.start-2 {
  stroke-dasharray: 125.5 251;
  transition: 1s;
  fill: none;
  stroke-width: 75;
}




  
	
	







    


Ответы

Ответ 1



Решил самостоятельно. Может кому пригодится. var stroke = 477, bg = 251; $('[data-role="pie-chart"]').each(function() { var percent = $(this).attr('data-percent'), newStroke = stroke * (percent / 100), newBg = bg * (percent / 100), $this = $(this); setTimeout(function() { $('.pie-chart__bg', $this).css('stroke-dasharray', newBg + ' ' + bg); $('.pie-chart__border', $this).css('stroke-dasharray', newStroke + ' ' + stroke); }, 500); }); .pie-chart { width: 300px; } .pie-chart__gradient-from { stop-color: #fff; stop-opacity: 1; } .pie-chart__gradient-to { stop-color: #e2e2e2; stop-opacity: .75; } .pie-chart__bg { stroke-dasharray: 0 251; transition: 1s; fill: none; stroke-width: 75; } .pie-chart__border { stroke-dasharray: 0 477; transition: 1s; fill-rule: nonzero; fill: none; stroke: #757575; stroke-width: 4; } .pie-chart_gray .pie-chart__border { stroke: #757575; } .pie-chart_yellow .pie-chart__border { stroke: #F9DF3C; } .pie-chart_orange .pie-chart__border { stroke: #FC9C1E; } .pie-chart_green .pie-chart__border { stroke: #86BF40; } .pie-chart_blue .pie-chart__border { stroke: #214DA6; } 50% 87% 15% 44% 60% Codepen

Сделать при scroll пунктирный <path> растущим

#javascript #jquery #css #svg #svg_animation


Ниже то, что я сделал до сих пор .

Это отлично работает, но я хочу сделать анимацию, которая немного сложнее для меня. 



// Получить идентификатор элемента  и длину 
var myline = document.getElementById("myline");
var length = myline.getTotalLength();
circle = document.getElementById("circle");
// Начальная позиция рисования
myline.style.strokeDasharray = length;

// Скройте треугольник, смещая черту. Удалите эту линию, чтобы показать треугольник
перед прокруткой
myline.style.strokeDashoffset = length;

// Найти процент прокрутки при scroll (используя свойства кросс-браузера) и сместить
тире настолько же, сколько и процент прокрутки
window.addEventListener("scroll", myFunction);

function myFunction() {
  // What % down is it?
  var scrollpercent = (document.body.scrollTop + document.documentElement.scrollTop)
/ (document.documentElement.scrollHeight - document.documentElement.clientHeight);
  // Длина offset до dashes
  var draw = length * scrollpercent;

  // Переверните рисование (при прокрутке вверх)
  myline.style.strokeDashoffset = length - draw;

  //получить точку в длине
  endPoint = myline.getPointAtLength(draw);
  circle.setAttribute("cx", endPoint.x);
  circle.setAttribute("cy", endPoint.y);

}
body {
  height: 2000px;
  background: #f1f1f1;
}

#circle {
  fill: red;
}

#mySVG {
  position: fixed;
  top: 15%;
  width: 100vw;
  height: 100vh;
  margin-left: -50px;
}

.st0 {
  fill: none;
  stroke-dashoffset: 3px;
  stroke: red;
  stroke-width: 5;
  stroke-miterlimit: 10;
  stroke-dasharray: 20;
}

Scroll down this window to draw my path.

Scroll back up to reverse the drawing.

Sorry, your browser does not support inline SVG. Мой вопрос: можем ли мы сделать линию пунктирной? Я знаю, что путь растет, используя strokeDasharray Но все же, есть ли способ достичь этого? Если нет, то, пожалуйста, предложите другой способ. Я не ищу - "разместить пунктирную линию над линией, которую вы хотите нарисовать, и придать ей цвет вашего фона".


Ответы

Ответ 1



Есть способ сделать это. Вы можете использовать пунктирную линию в качестве маски для анимированной линии. // Get the id of the element and the length of var myline = document.getElementById("myline"); var length = myline.getTotalLength(); circle = document.getElementById("circle"); // The start position of the drawing myline.style.strokeDasharray = length; // Hide the triangle by offsetting dash. Remove this line to show the triangle before scroll draw myline.style.strokeDashoffset = length; // Find scroll percentage on scroll (using cross-browser properties), and offset dash same amount as percentage scrolled window.addEventListener("scroll", myFunction); function myFunction() { // What % down is it? var scrollpercent = (document.body.scrollTop + document.documentElement.scrollTop) / (document.documentElement.scrollHeight - document.documentElement.clientHeight); // Length to offset the dashes var draw = length * scrollpercent; // Reverse the drawing (when scrolling upwards) myline.style.strokeDashoffset = length - draw; //get point at length endPoint = myline.getPointAtLength(draw); circle.setAttribute("cx", endPoint.x); circle.setAttribute("cy", endPoint.y); } body { height: 2000px; background: #f1f1f1; } #circle { fill: red; } #mySVG { position: fixed; top: 15%; width: 100vw; height: 100vh; margin-left: -50px; } .st0 { fill: none; stroke-dashoffset: 3px; stroke: red; stroke-width: 5; stroke-miterlimit: 10; stroke-dasharray: 20; } .mask-style { stroke: white; stroke-width: 7; }

Scroll down this window to draw my path.

Scroll back up to reverse the drawing.

Sorry, your browser does not support inline SVG. Источник

Как добавить свойство filter drop-shadow в ie11?

#css #css3 #svg #internet_explorer #filter


Есть прозрачная картинка с декоративным шрифтом при ховере на которую накладывается
filter со свойством drop-shadow.

Как применить аналогичный эффект в ie11 ?

Код


img:hover {
  filter: drop-shadow(0 0 0.5em #009af7) drop-shadow(0 0 0.2em rgba(255, 255, 255,
0.5));
  -webkit-filter: drop-shadow(0 0 0.5em #009af7) drop-shadow(0 0 0.2em rgba(255,
255, 255, 0.5));
}




    


Ответы

Ответ 1



Как вариант, можно использовать svg фильтры, поддержка дает зеленый цвет. Ниже в примере я наложил img и svg с фильтром друг на друга, чтобы при hoverе плавно показывать фильтр через opacity и transition. Другого варианта я пока не придумал) .filter-wrap { position: relative; } .filter-wrap:hover .filter-wrap__svg { opacity: 1; } .filter-wrap__image { position: relative; z-index: 2; } .filter-wrap__svg { position: absolute; left: 0; top: 0; opacity: 0; transition: opacity 200ms ease-out; }


CSS grid c использованием переменных для управления количеством строк и столбцов сетки

#html #css #css3 #html5 #svg


Я пытаюсь создать сетку, который состоит из квадратов. Четыре квадрата в каждом ряду. 
Квадраты не могут изменять размеры экрана.  

Ширина и высота квадратов должны быть все время одинаковыми  (я не хочу фиксированных
значений). При этом, я должен использовать сетку CSS.  



.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr 1fr;
  grid-gap: 5px;
}
.container div {
  background-color: red;
}


Ответы

Ответ 1



Еще один приём, где вы можете поместить любой контент внутрь, не нарушая соотношение. Идея состоит в том, чтобы иметь сетку внутри большого квадрата, который вы разделяете на маленькие квадраты: .container { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr 1fr 1fr; grid-gap: 5px; } .container div { background-color: gold; } body:before { content: ""; display: block; padding-top: 100%; } body { position: relative; margin: 0; } img { max-width: 100%; max-height: 100%; }
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Другой синтаксис без position:absolute, где вы можете положиться на функцию растяжения flexbox: .container { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr 1fr 1fr; grid-gap: 5px; flex-grow:1; } .container div { background-color: dodgerblue; } body:before { content: ""; padding-top: 100%; } body { display:flex; } img { max-width: 100%; max-height: 100%; }
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Вы можете контролировать limit строк. Выше я сделал их 4, здесь мы можем иметь только 2, сделав отступ 50% вместо 100%. У нас будет большой прямоугольник внутри, где будет 8 квадратов (по 4 в каждом ряду). .container { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; grid-gap: 5px; flex-grow:1; } .container div { background-color: red; } body:before { content: ""; padding-top: 50%; } body { display:flex; margin: 0; } img { max-width: 100%; max-height: 100%; }
Можно разместить любой контент здесь
Вы можете контролировать количество строк, используя переменные CSS: :root { --n:6; } .container { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: repeat(var(--n),1fr); grid-gap: 5px; flex-grow:1; } .container div { background-color: greenyellow; } body:before { content: ""; padding-top: calc(var(--n) * 25%); } body { display:flex; } img { max-width: 100%; max-height: 100%; display:block; }
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь>
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Мы также можем добавить элемент управления количеством столбцов, добавив еще одну переменную, чтобы иметь что-то более общее: :root { --n:6; --m:6; } .container { display: grid; grid-template-columns: repeat(var(--m),1fr); grid-template-rows: repeat(var(--n),1fr); grid-gap: 5px; flex-grow:1; } .container div { background-color: purple; } body:before { content: ""; padding-top: calc(var(--n)/var(--m) * 100%); } body { display:flex; } img { max-width: 100%; max-height: 100%; }
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Можно разместить любой контент здесь>
Можно разместить любой контент здесь
Можно разместить любой контент здесь
Примеры адаптивны и работают во всех браузерах. Источник ответа: @Temani Afif

Ответ 2



Растровые, векторные изображения + текст Всё расположено в одной CSS сетке. Векторные и растровые изображения добавляются с помощью одного и того же тега .container { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr 1fr 1fr; grid-gap: 5px; } .container div { background-color: #E3EAF0; } body:before { content: ""; display: block; padding-top: 100%; } body { position: relative; margin: 0; } img { max-width: 100%; max-height: 100%; }
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus tincidunt dignissim nibh a facilisis. Phasellus pretium nisl vel turpis suscipit, quis posuere quam laoreet. Vestibulum fringilla porttitor felis, non lacinia dolor mattis vitae. Donec gravida et purus eu pellentesque. Nam consequat nisl id velit interdum eleifend. Mauris nulla turpis, sollicitudin in vestibulum nec, ornare quis lacus. Proin eros diam, lacinia id blandit a, efficitur eget mauris. Morbi ullamcorper velit non urna malesuada molestie. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec vehicula est non nunc ultricies, sit amet pharetra nulla congue. Vestibulum hendrerit ante ac rhoncus aliquet. Quisque vitae est turpis. Nulla sit amet felis nec nisl blandit mollis.
Nullam ornare turpis quis orci hendrerit, vitae varius est tincidunt. In quis malesuada tellus. Aliquam nunc mauris, aliquam quis lectus ut, ultrices lobortis ante. Maecenas tincidunt ligula felis, in consequat lectus finibus eget. Maecenas molestie placerat odio, at malesuada risus consequat id. Integer congue facilisis enim porta pretium. Morbi scelerisque tincidunt purus, vitae rhoncus tortor tristique nec. Nullam laoreet turpis nec felis vehicula finibus.
Fusce ultricies maximus ante vitae imperdiet. Proin magna orci, pretium nec pretium id, ultricies in risus. Praesent mauris ipsum, semper nec convallis sit amet, vestibulum non enim. Quisque volutpat nulla ac nulla venenatis, ac cursus nulla laoreet. Aliquam malesuada dui a orci tristique tristique. Phasellus fringilla, velit eget ultrices efficitur, justo lacus elementum lorem, nec convallis augue lacus non dui. Aliquam erat volutpat. Mauris sagittis, sapien in tristique mollis, ex libero laoreet magna, ut pellentesque dolor augue accumsan elit. Nunc ut augue at eros sollicitudin malesuada. Pellentesque urna felis, posuere sit amet odio et, vestibulum aliquet ex. Nulla eu dolor blandit, bibendum nibh in, tincidunt ex. Ut nisl justo, tincidunt a augue et, gravida sollicitudin neque. Donec id dignissim elit, a sollicitudin leo. Aliquam placerat orci justo, et faucibus nibh volutpat vel.