不少人不太会写 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...
问一下有没有长三角地区【国企】招前端开发、全栈开发,有的话麻烦私聊