jQuery Как узнать ширину блока с дробной частью?
Если вам нужно узнать суммарную ширину нескольких блоков, то отбрасывая дробную часть вы получите не верное итоговое значение. Давайте рассмотрим три блока: с фиксированной, процентной шириной и шириной auto.
Создадим разметку для наших тестов
Создадим три блока:
- Первый блок с шириной заданной в процентах
- Второй блок с фиксированной шириной заданной в пикселах
- Третий блок с шириной зависящей от содержимого блока
<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().
Блоки с фиксированной шириной заданной в пикселах не имеют дробной части и строго отображают указанное им значение.
Рубрика: Как сделать?




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