不少人不太會寫 HTML 和 CSS,這裏教你如何分析頁面結構,如何使用各類標準套路寫出各類頁面。css
以 HTML 和 CSS 爲主,部分動態內容加入 js 實現。前端
全部技巧所有簡單暴力,沒有兼容性問題(除非你要兼容IE8),可是很是好用。react
目錄:webpack
採用我本身以前配好的腳手架,見github連接:github.com/qq20004604/…git
能夠直接fork該腳手架,而後在該腳手架基礎上進行開發;github
前註解釋:web
原圖分爲三塊:api
整體思路:瀏覽器
詳細思路以下:bash
而後,div#content再劃分爲兩塊,具體思路以下:
於 src/page 文件夾下新建 main 文件夾,並在該文件夾下新建 app.jsx。
此時 jsx 部分寫法以下:
render() {
return <div id={s.root}>
<Header/>
<Content/>
<Footter/>
</div>;
}
複製代碼
所以要引入(固然你也要新建)三個不一樣的jsx文件和根容器的樣式文件,以下:
import s from './style.less';
import Header from './header.jsx';
import Content from './content.jsx';
import Footter from './footter.jsx';
複製代碼
以這個頁面爲例,是標準的上下固定中自適應佈局。
這種佈局其實很簡單。
第一,先引入reset.css統同樣式,確保不一樣瀏覽器的樣式是一致的。
第二,DOM結構以下,容器內包含上中下
<div id='app'>
<Header/>
<Content/>
<Footter/>
</div>
複製代碼
第三,最外層DOM(<div id='app'>
)的思路是,撐滿整個可視區域做爲基準容器,並設置絕對定位,爲子容器提供定位參考。
這種寫法的好處是,咱們能夠肯定最外層DOM必定的撐滿的,若是咱們使用body標籤做爲最外層DOM,由於默認樣式的不一樣,咱們是不肯定的。
樣式以下:
#root {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
複製代碼
第四,上和下這2個固定。
經過設置絕對定位的屬性,使得上和下,分別位於基準容器的最上面和最下面。
樣式以下:
#header {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 80px;
}
#footter {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 40px;
}
複製代碼
第五,中自適應。
自適應的前提是不須要設置高度,所以一樣適用絕對定位,經過配置 top 和 bottom 屬性,使得高度自適應。
樣式以下:
#content {
position: absolute;
top: 80px;
bottom: 40px;
left: 0;
width: 100%;
}
複製代碼
總結:
此時你有了一個上下固定中自適應佈局而且寬度100%可視區域的佈局了。而且他們都帶有定位屬性,你下面的佈局能夠基於這三塊進行開發了。
核心有兩步,其餘都不過重要(也就是說,不重要的地方你就本身搞定咯):
@import '~common/css/reset.css';
#root {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
複製代碼
分別表示引入reset.css(這個我預置在腳手架裏了,只要引入就行,全局生效);
和設置根容器撐滿整個可視區域。
這也是一個比較典型的佈局。
以本頁面爲例:
寫法思路以下:
第一,父容器設置定位屬性,不論是absolute或者是relative均可以;
第二,居中元素的思路是很簡單。
以左右居中爲例,經過 left:50%
的屬性,使其相對於最左側半個容器寬度的距離。而後再經過 transform: translateX(-50%);
往回拉自身元素寬度 50%
的距離。這樣天然就實現左右居中。
若是上下居中,思路是同樣的,無非是設置 top:50%
和 transform: translateY(-50%);
第三,相對於最右側必定距離的元素,這個思路也很簡單。
position: absolute;
;right
屬性,設置該元素最右側距離父容器最右側的距離;一樣,若是是相對於左側,頂部,底部,思路是一樣的,只是換個css屬性罷了。
觀察效果:
參考上面的【套路2:定高不定寬,內有居中和相對最右側的元素】,咱們將整個結構變爲:
總體思路以下:
具體代碼見 src/page/main/header.jsx 相關
圖片路徑寫法:
須要注意的是,js和css中,圖片路徑的寫法是不一樣的。
具體來講,以我這個webpack的配置爲例,
一、一樣圖片放在 src/img 文件夾下,css中的寫法是:
background-image: url('~@/logo.png');
複製代碼
根據的配置是:
{
loader: 'css-loader',
options: {
modules: false,
minimize: true,
sourceMap: false,
alias: {
'@': resolve('src/img'), // '~@/logo.png' 這種寫法,會去找src/img/logo.png這個文件
'common': resolve('src/common')
}
}
}
複製代碼
二、js中的寫法是:
state = {
// 注意,css和js中,圖片路徑寫法不一樣
avatarIcon: require('@/img/default-avatar.png')
}
複製代碼
根據的配置是:
resolve: {
// 省略後綴名
extensions: ['.js', '.jsx'],
alias: {
'@': resolve('src'),
'component': resolve('src/components'),
'common': resolve('src/common'),
'api': resolve('src/api'),
'page': resolve('src/page'),
'assets': resolve('src/assets')
}
}
複製代碼
固然,也能夠寫成:avatarIcon: require('../../img/default-avatar.png')
三、若是圖片會上傳到CDN,有固定路徑,那就更好寫了,直接寫成絕對路徑便可;
四、圖片放在static文件夾下,css能夠直接寫爲:background-image: url('/default-avatar.png')
js的話能夠寫爲:
state = {
avatarIcon: 'static/default-avatar.png'
}
複製代碼
文字居中是一個很常見的需求,但狀況又比較多。所以咱們採用固定套路來實現。
要求描述:
font-size
已知,但裏面文字內容數量不定(也就是說寬度不固定),但要求上下居中,左右居中;考慮到要求,所以將文字包含在一個div中,總體考慮,因而HTML代碼以下:
<div id='footter'>
<div className='footter-copyright'>
@Copyright 2019 company
</div>
</div>
複製代碼
思路:
css以下:
.footter-copyright {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
/* 下面三個屬性的px值保持一致
* 另外,除了第三個,其餘2個能夠省略,但我習慣明確寫其高度和行高
* 好處是,若是有特殊需求,調起來很方便。
*/
height: 16px;
line-height: 16px;
font-size: 16px;
}
複製代碼
另外一種寫法(已知高度固定):
.footter-copyright2 {
position: absolute;
left: 50%;
top: 0;
transform: translateX(-50%);
height: 40px;
line-height: 40px;
font-size: 16px;
}
複製代碼
footter 明顯就更簡單了,只有一段居中文字而已。參考【套路3:文字居中,大小不定但高度固定】實現他。
這也是一個典型的狀況。
思路以下:
特殊狀況:
參考上面的 【套路4:不定高,總體居中,左右分欄】
須要注意的是,這個中間總體看似只有1170px寬,實際應該是1200px寬,右側分欄的左右分別有 30px 寬度的空隙(這種須要經驗和交互進行溝通,或者本身量一下)。
所以右側分欄實際應該多寫一層div,即實際內容區域應在右側分欄div區域內。
代碼以下(更詳細代碼參考個人github,連接見【4.5】):
@aside-bk-color: #2d4054;
#content {
position: absolute;
top: 80px;
bottom: 40px;
left: 0;
width: 100%;
background-color: #f3f3f3;
.content {
position: absolute;
left: 50%;
transform: translateX(-50%);
width: 1200px;
height: 100%;
.aside {
position: absolute;
left: 0;
width: 270px;
height: 100%;
background-color: @aside-bk-color;
}
.article-box {
position: absolute;
left: 270px;
right: 0;
height: 100%;
padding: 0 30px;
.article {
position: relative;
width: 100%;
height: 100%;
// 帶上顏色,用於肯定該位置是正確的
background-color: #fff;
}
}
}
}
複製代碼
此時,頁面效果圖以下:
to be continue...
問一下有沒有長三角地區【國企】招前端開發、全棧開發,有的話麻煩私聊