jQuery Как узнать ширину блока с дробной частью?

Если вам нужно узнать суммарную ширину нескольких блоков, то отбрасывая дробную часть вы получите не верное итоговое значение. Давайте рассмотрим три блока: с фиксированной, процентной шириной и шириной auto.

Создадим разметку для наших тестов

Создадим три блока:

  • Первый блок с шириной заданной в процентах
  • Второй блок с фиксированной шириной заданной в пикселах
  • Третий блок с шириной зависящей от содержимого блока

actual_width
 

<div id="wrapper">
	<!-- Первый блок с шириной заданной в процентах -->
    <div id="block1" class="block">
    	<h3>width:33.33333%</h3>
    	<p class="css-width">$(this).css('width'): <span></span></p>
    	<p class="width">$(this).width(): <span></span></p>
    	<p class="full-width">Актуальная ширина: <span></span></p>
    </div>

	<!-- Второй блок с фиксированной шириной заданной в пикселах -->
    <div id="block2" class="block">
    	<h3>width:190px</h3>
    	<p class="css-width">$(this).css('width'): <span></span></p>
    	<p class="width">$(this).width(): <span></span></p>
    	<p class="full-width">Актуальная ширина: <span></span></p>
    </div>

	<!-- Третий блок с шириной зависящей от содержимого блока -->
    <div id="block3" class="block">
    	<h3>width:auto</h3>
    	<p class="css-width">$(this).css('width'): <span></span></p>
    	<p class="width">$(this).width(): <span></span></p>
    	<p class="full-width">Актуальная ширина: <span></span></p>
    </div>
</div>

В каждом блоке у нас будет по три строки, для записи:

  • Значения ширины блока используя $(this).css('width')
  • Значения ширины блока используя $(this).width()
  • Значения актуальной ширины блока используя $(this)[0].getBoundingClientRect().width

Таким образом мы рассмотрим три основных ситуации и сможем сделать выводы.

Стили для тестового примера

Тут ничего особенного, создаем блок с общими свойствами для всех блоков и отдельные свойства ширины для каждого блока.

#wrapper {
    overflow: hidden;
    width: 900px;
    padding: 50px 30px;
    margin: 100px auto;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5);
    background: #369;
}

.block {
    float: left;
    min-height: 150px;
    background: #FFF;
    color: #000;
}
.block + .block {margin-left: 30px;}

#block1 {width: 33.33333%;}
#block2 {width: 190px;}
#block3 {width: auto;}

h3 {text-align: center;}
span {font-weight: bold;}
.full-width span {color: red;}

Как узнать актуальную ширину блока

Для того чтобы узнать ширину блока (элемента) с дробной частью, рекомендую использовать следующий метод:

$(this)[0].getBoundingClientRect().width;

Данный метод существует еще со времен IE4, по-этому должен поддерживаться во всех браузерах.

Результаты тестов

Как видно из демо примера, блоки с шириной заданной в процентах и width:auto имеют дробную часть, которую не отобразит jquery метод width().
Блоки с фиксированной шириной заданной в пикселах не имеют дробной части и строго отображают указанное им значение.

 

(1 голосов. Рейтинг: 5,00 из 5)
Загрузка...

Рубрика: Как сделать?

Комментарии (1)

| RSS комментария

  1. прожал всё:

    ахах) парень лайк тебе за красную кнопку! 🙂

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