Подтвердить что ты не робот

Центрирование элементов плавающего списка <li> внутри div или их <ul>

HTML:

<div class="imgcontainer">
    <ul>
            <li><img src="1.jpg" alt="" /></li>
            <li><img src="2.jpg" alt="" /></li>
            .....
    </ul>
</div>  

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

    ul li {
        float: left;
    }

Я устанавливаю ширину контейнера как "максимальную ширину", чтобы я мог поместить элементы списка (изображения) в ширину браузера. Это означает, что они будут переупорядочены, когда размер окна браузера изменится.

    .imgcontainer{
        max-width: 750px;
    }

Теперь проблема заключается в том, что изображения или элементы списка не выровнены по центру, они выровнены слева от тела .imgcontainer(окрашены серым цветом в прикрепленную ссылку ниже), оставляя пространство справа, когда размер окна изменяется

enter image description here

Как я могу центрировать эти изображения каждый раз при изменении размера окна?

Здесь вся страница/код вы можете просмотреть или отредактировать в JS Bin

http://jsbin.com/etiso5

4b9b3361

Ответ 1

Удалите float:left и используйте display:inline, чтобы вы могли использовать text-align:center. Установите размер шрифта равным нулю, чтобы у вас не было пробела между изображениями.

ul {
    font-size:0;
    text-align:center
}
ul li {
    display:inline;
    zoom:1
}
.imgcontainer {
    max-width:750px;
    margin:0 auto
}

zoom - это взлом для старых версий IE. Однако это не допустимое свойство CSS, поэтому не будет проходить проверку валидатора W3C.

Ответ 2

Это предполагает, что все элементы имеют одинаковую ширину. Если вы не хотите, чтобы последний ряд элементов был центрирован, вы можете выполнить это с помощью нескольких строк JavaScript. Погрузите встроенный блок, текстовое выравнивание материала центра и просто поместите элементы списка и поместите margin: 0 auto в контейнер списка.

На стороне JS вещей вычислите ширину области содержимого или окна, затем определите, сколько элементов вы можете поместить в строке, т.е. ширину элемента списка, а затем установите эту ширину. itemWidth здесь принимает каждую ширину элемента списка + margin + padding + border.

var centerListItems = function (itemWidth) {
  var $paneWidth = $('#my-content').width(),
      setWidth;

  setWidth = parseInt(($paneWidth / itemWidth), 10) * itemWidth;

  $('#my-list').width(setWidth);
}

Если вы хотите, чтобы он изменился при изменении размера окна или изменении ориентации, вы можете использовать underscore.js для отладки вызова.

var event;

if ('onorientationchange' in window) {
  event = 'onorientationchange';
} else {
  event = 'resize';
}

$(window)
  .off(event)
  .on(event, _.debounce(function () {
    centerListItems(itemWidth);
  }, 350));