Необходимо отцентрировать изображения в блоках по вертикали и горизонтали
Есть такой 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, время: 02:21. |