Необходимо отцентрировать изображения в блоках по вертикали и горизонтали
Есть такой html код:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example</title> <link media="all" rel="stylesheet" href="../common.css"> </head> <body class="task2"> <ul id="list-holder"> <li><img src="images/image01.jpg" alt="image" width="132" height="92"/></li> <li><img src="images/image05.jpg" alt="image" width="83" height="60"/></li> <li><img src="images/image09.jpg" alt="image" width="90" height="83"/></li> </ul> </body> </html> Алгоритм такой: выбрать все <li> внутри <ul id="list-holder">. В каждой найти <img>, который нужно измерить и спозиционировать по центру используя свойства marginTop и marginLeft. Мое решение: window.onload = function(){ elements = document.getElementById('list-holder').childNodes; for(var j = 0; j < elements.length; j++){ img = elements.getElementsByTagName('img')[j]; } for(var i = 0; i < elements.length; i++){ img[i].style.marginLeft = ((elements[i].width - img[i].width)/2) + 'px'; img[i].style.marginTop = ((elements[i].height - img[i].height)/2) + 'px'; } }; Не срабатывает. Похоже, я неправильно ищу дочерние елементы или неправильно перебираю массив. Помогите :) |
Цитата:
|
Тут идея с помощью js попробовать задать стили. И задание на правильное нахождение элементов
|
Цитата:
Цитата:
Твой пример должен выглядеть как-то так... <!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <!-- <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> li { height: 200px; border: 1px solid; } </style> <script type='text/javascript'> window.onload = function(){ var img=[]; var elements = document.getElementById('list-holder').getElementsByTagName('li'); for(var j = 0; j < elements.length; j++){ img[j] = elements[j].getElementsByTagName('img')[0]; } for(j = 0; j < elements.length; j++){ img[j].style.marginLeft = ((elements[j].clientWidth - img[j].clientWidth)/2) + 'px'; img[j].style.marginTop = ((elements[j].clientHeight - img[j].clientHeight)/2) + 'px'; } }; </script> </head> <body> <ul id="list-holder"> <li><img src="images/image01.jpg" alt="image" width="132" height="92"/></li> <li><img src="images/image05.jpg" alt="image" width="83" height="60"/></li> <li><img src="images/image09.jpg" alt="image" width="90" height="83"/></li> </ul> </body> </html> Но это ооочень избыточный код. Ооочень много лишнего. :( |
Хватит и такого варианта. ;)
window.onload = function(){ var obj = document.querySelectorAll('#list-holder img'); for(var j = 0; j < obj.length; j++){ var par=obj[j].parentNode; obj[j].style.marginLeft = ((par.clientWidth - obj[j].clientWidth)/2) + 'px'; obj[j].style.marginTop = ((par.clientHeight - obj[j].clientHeight)/2) + 'px'; }; }; |
Сработало так
window.onload = function(){ var elements = document.getElementById('list-holder').children; for(var j = 0; j < elements.length; j++){ var item = elements[j]; var img = item.children[0]; img.style.marginLeft = ((item.offsetWidth - img.width)/2) + 'px'; img.style.marginTop = ((item.offsetHeight - img.height)/2) + 'px'; } }; |
Цитата:
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <!-- <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> li { height: 200px; border: 1px solid; } </style> <script type='text/javascript'> window.onload = function(){ var obj = document.querySelectorAll('#list-holder img'); for(var j = 0; j < obj.length; j++){ var par=obj[j].parentNode; obj[j].style.marginLeft = ((par.clientWidth - obj[j].clientWidth)/2) + 'px'; obj[j].style.marginTop = ((par.clientHeight - obj[j].clientHeight)/2) + 'px'; }; }; </script> </head> <body> <ul id="list-holder"> <li><img src="images/image01.jpg" alt="image" width="132" height="92"/></li> <li><img src="images/image05.jpg" alt="image" width="83" height="60"/></li> <li><img src="images/image09.jpg" alt="image" width="90" height="83"/></li> </ul> </body> </html> Просто вариантов реализации можно сделать достаточно много... |
А display: flex, разве не вариант?
|
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 07:55. |