要求:css
實現步驟html
<p>屏幕寬度低於1366顯示3個<br>其餘顯示4個,也可經過點擊按鈕控制數量</p> <button onclick="handleClick(3,'wrapperId')">設爲3個</button> <button onclick="handleClick(4,'wrapperId')">設爲4個</button> <div class="item2-wrapper" id="wrapperId"> <ul class="item-ul-2"> <li class="item-li-2">1</li> <li class="item-li-2">2</li> <li class="item-li-2">3</li> <li class="item-li-2">4</li> <li class="item-li-2">5</li> <li class="item-li-2"></li> </ul> </div>
body { min-width: 1024px; } .item2-wrapper { /* 元素數量 */ --count_number: 4; /* 每一個元素寬度 */ --width: 200px; /* 每一個元素的高度 */ --height: 200px; /* 列間距 */ --col-gap: 20px; /* 行間距 */ --row-gap: 20px; /* 容器元素居中 */ margin: 0 auto; /* 容器元素寬度,元素寬度*數量+列間距*(數量-1) */ width: calc( var(--width) * var(--count_number) + var(--col-gap) * (var(--count_number) - 1) ); background-color: antiquewhite; } .item-ul-2 { list-style-type: none; -webkit-padding-start: 0; /* 解決html未連續寫致使瀏覽器渲染出間隙問題 */ font-size: 0; /* 補充第一行和最後一行的上下邊距 */ padding: calc(var(--row-gap) / 2) 0; /* 寬度爲寬度*數量+列間距*數量 */ width: calc( var(--width) * var(--count_number) + var(--col-gap) * var(--count_number) ); /* 調整ul容器位置,使其居中 */ margin: 0 calc(var(--col-gap) / 2 * -1); } .item-li-2 { width: var(--width); height: var(--height); /* 設置元素上下左右間距 */ margin: calc(var(--row-gap) / 2) calc(var(--col-gap) / 2); font-size: 14px; background-color: #00ffff33; display: inline-flex; justify-content: center; align-items: center; /* 設置對齊位置 可先註釋掉該行查看效果 */ vertical-align: middle; }
function handleClick(number, elementId) { var currentStyle = document.getElementById(elementId) // 這裏取到的值爲字符串格式 var currentNumber = currentStyle.style.getPropertyValue( '--count_number' ) if (currentNumber !== number + '') { currentStyle.style.setProperty('--count_number', number) } } // 可添加節流(N毫秒內執行一次)或者防抖(事件中止N毫秒後執行)減小觸發次數 window.onresize = function () { // 獲取可視區域寬度 var width = document.documentElement.clientWidth if (width < 1366) { handleClick(3, 'wrapperId') } else { handleClick(4, 'wrapperId') } }
線上例子react