不少的小伙伴們對于“怎么通過利用九宮格原理對網(wǎng)頁進行布局?”這個問題還是有很多的疑惑沒有解開,那么今天我們就根據(jù)小編搜索和自己實現(xiàn)的方法來為大家講解一番吧!
前言
說到九宮格是不是想到了九宮格火鍋那(O(∩_∩)O哈哈~)。其實九宮格布局在各大網(wǎng)站基本都有應(yīng)用,當然這里的九宮格是泛指(O(∩_∩)O哈哈)。比如小米商城局部布局如下:
不難發(fā)現(xiàn),一些電商平臺的布局基本上大同小異,最普遍的還是這種九宮格布局。當然通過CSS也可以對其單獨設(shè)置定位,但是數(shù)據(jù)量小還好說,如果數(shù)據(jù)量多起來,計算麻煩不說,還有可能影響布局。下面我們來說一下九宮格布局的原理。
原理(小白也能看懂)
上圖是一個九宮格示意圖,現(xiàn)在我們把它想象到一個網(wǎng)頁中(想象不到就看上圖圖片~~),在網(wǎng)頁中這個布局由最外層綠色的大的div標簽包裹,在綠色的div標簽中有許多藍色的小的div標簽作為綠色div標簽的子級元素組成,這樣簡單的嵌套就完成了。由于我們的目標元素是藍色的小div,那么我們無可避免的要對其設(shè)置盒子大小,以及外邊距等等。但是我們操作的對象就是盒子的大小+外邊距(也就是上圖中紅色框選的區(qū)域)。
具體流程如下:
我們先獲取到藍盒子以及其周圍整體的大小,假設(shè)上圖紅框的大小是200px * 200px
這些盒子就要牽扯到絕對定位和相對定位:綠色的盒子是相對定位,里面的藍盒子是絕對定位(即子絕父相)如果不明白那么請訪問CSS定位子絕父相
我們想象把上面的九宮格放進 [3][3] 的二維數(shù)組中。此時第一個方框位于數(shù)組的 [0] [0] 位置,他的位置在綠色的div中就是(0×200px,0×200px),即top = 0px,left = 0px;其右面方框在二維數(shù)組的位置是 [0][1](0×200px,1×200px)即top = 0px;,left = 200px;其下面方框在二維數(shù)組的位置是 [1][0](1×200px,0×200px)即top = 200px,left = 0px。以此類推就可以都得到所有子級元素的位置了。
代碼實現(xiàn)
先看效果截圖
在我點擊上方按鈕時可以實現(xiàn)不同列數(shù)的展現(xiàn)。
以下是JS代碼
window.onload = function () {
// 實現(xiàn)九宮格
var btns = $('.btnall button');//獲取所有的按鈕
var photos = $('.photoall div.photo');//獲取所有的子塊
//實現(xiàn)九宮格具體帶參方法,allcols代表想要的列數(shù)。
function Event(allcols){
//盒子的寬長和外邊距
var w = 250, h = 390, margin = 10;
for(var i = 0; i < photos.length; i++){
//方法的核心
var row = parseInt(i / allcols);
var col = parseInt(i % allcols);
//具體位置的運行
var top = row * (h + margin) + 'px';
var left = col * (w + margin) + 'px';
//設(shè)置位置
photos[i].style.position = 'absolute';
photos[i].style.left = left;
photos[i].style.top = top;
}
}
//為各個按鈕設(shè)置監(jiān)聽事件
btns[0].onclick = function (){
Event(3);
};
btns[1].onclick = function (){
Event(4);
};
btns[2].onclick = function (){
Event(5);
};
}
那么我們到這里對于“怎么通過利用九宮格原理對網(wǎng)頁進行布局?”這個問題的疑惑應(yīng)該都已經(jīng)解開了吧!當然我們還有很多不同的效果可以在html中實現(xiàn)更多有關(guān)于這方面的相關(guān)內(nèi)容我們都能在W3Cschool找到合適的資源進行學(xué)習!