【基础-2】CSS基础整理

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/qq_41922702/article/details/87183449

本文是对CSS基础的简单整理。
参考教程:基础知识一基础知识二NEC方案CSS规范
布局演变史瀑布流布局 flexbox相关布局分类

一、NEC规范

========================================================================

第一节:样式分类

1、CSS文件的分类和引用顺序:global公共样式、index特殊样式、skin皮肤样式

2、CSS内部的分类及其顺序:重置和默认、统一处理、布局、模块、元件、功能、皮肤、状态,示例
重置:div,p,ul,ol,li{margin:0;padding:0;}
默认:strong,em{font-style:normal;font-weight:bold;}
统一调用背景图:.m-logo a,.m-nav a,.m-nav em{background:url(images/sprite.png) no-repeat 9999px 9999px;}
统一清除浮动:.g-bdc:after,.m-dimg ul:after,.u-tab:after{ display:block;visibility:hidden;clear:both;height:0;overflow:hidden;content:'.';}.g-bdc,.m-dimg ul,.u-tab{zoom:1;}
布局:.g-sd{float:left;width:300px;}
模块:.m-logo{width:200px;height:50px;}
元件:.u-btn{height:20px;border:1px solid #333;}
功能:.f-tac{text-align:center;}
皮肤:.s-fc,a.s-fc:hover{color:#fff;}

第二节:命名规则

1.使用类选择器,放弃ID选择器
2.NEC特殊字符:"-“连字符
3.分类的命名方法:使用单个字母+”-"为前缀
4.后代选择器命名
5.命名应简约而不失语义
6.相同语义的不同类命名
7.模块和元件的扩展类的命名方法
8.模块和元件的后代选择器的扩展类
9.分组选择器有时可以代替扩展方法
10.防止污染和被污染

第三节:代码格式

1.选择器属性和值都使用小写
2.单行写完一个选择器定义
3.最后一个值也以分号结尾
4.省略值为0时的单位
5.使用单引号
6.使用16进制表示颜色值
7.根据属性的重要性按顺序书写:定位布局、盒子模型、文本修饰

显示属性:display、visibility、position、float、clear、list-style、top
自身属性:width、height、margin、padding、border、overflow、min-width
文本属性和其他修饰:font、text-align、text-decoration、vertical-align、white-space、color、background

8.私有在前,标准在后
9.注释格式:注释统一
10.原则上不允许使用Hack
11.统一Hack方法
12.建议并适当缩写值、注意选择器顺序等级

第四节:优化方案

1.值缩写:并增加可读性和可维护性
2.避免耗性能的属性:expression、filter
3.选择器合并
4.背景图优化合并:图片本身、多张图片、分类合并、Hack的避免
5.如果CSS可以做到,就不要使用JS
6.便于阅读修改
7.清晰的CSS模块
8.文件压缩

附录:最佳选择器写法(模块)
.m-nav{}模块容器
.m-nav li,.m-nav a{}先共性  优化组合
.m-nav li{}后个性  语义化标签选择器
.m-nav a{}后个性中的共性 按结构顺序
.m-nav a.a1{}后个性中的个性
.m-nav a.a2{}后个性中的个性
.m-nav .z-crt a{}交互状态变化
.m-nav .z-crt a.a1{}
.m-nav .z-crt a.a2{}
.m-nav .btn{}典型后代选择器
.m-nav .btn-1{}典型后代选择器扩展
.m-nav .btn-dis{}典型后代选择器扩展(状态)
.m-nav .btn.z-dis{}作用同上,请二选一(如果可以不兼容IE6时使用)
.m-nav .m-sch{}控制内部其他模块位置
.m-nav .u-sel{}控制内部其他元件位置
.m-nav-1{}模块扩展
.m-nav-1 li{}
.m-nav-dis{}模块扩展(状态)
.m-nav.z-dis{}作用同上,请二选一(如果可以不兼容IE6时使用)
附录:统一语义理解和命名:语义 命名 简写
1.布局(.g-)
	文档:doc	doc
	头部:head	hd
	主体:body	bd
	尾部:foot	ft
	主栏:main	mn
	主栏子容器:mainc	mnc
	侧栏:side	sd
	侧栏子容器:sidec	sdc
	盒容器:wrap/box	wrap/box

2.模块(.m-)、元件(.u-)
	导航:nav	nav
	子导航:subnav	snav
	面包屑:crumb	crm
	菜单:menu	menu
	选项卡:tab	tab
	标题区:head/title	hd/tt
	内容区:body/content	bd/ct
	列表:list	lst
	表格:table	tb
	表单:form	fm
	热点:hot	hot
	排行:top	top
	登录:login	log
	标志:logo	logo
	广告:advertise	ad
	搜索:search	sch
	幻灯:slide	sld
	提示:tips	tips
	帮助:help	help
	新闻:news	news
	下载:download	dld
	注册:regist	reg
	投票:vote	vote
	版权:copyright	cprt
	结果:result	rst
	标题:title	tt
	按钮:button	btn
	输入;input	ipt

3.功能(.f-)
	浮动清除:clearboth	cb
	向左浮动:floatleft	fl
	向右浮动:floatright	fr
	内联块级:inlineblock	ib
	文本居中:textaligncenter	tac
	文本居右:textalignright	tar
	文本居左:textalignleft	tal
	垂直居中:verticalalignmiddle	vam
	溢出隐藏:overflowhidden	oh
	完全消失:displaynone	dn
	字体大小:fontsize	fs
	字体粗细:fontweight	fw

4.皮肤(.s-)
	字体颜色:fontcolor	fc
	背景:background	bg
	背景颜色:backgroundcolor	bgc
	背景图片:backgroundimage	bgi
	背景定位:backgroundposition	bgp
	边框颜色:bordercolor	bdc

5.状态(.z-)
	选中:selected	sel
	当前:current	crt
	显示:show	show
	隐藏:hide	hide
	打开:open	open
	关闭:close	close
	出错:error	err
	不可用:disabled	dis

二、网站布局

========================================================================

第一节:主要用到的属性:定位、浮动、布局、盒子模型
position:static | relative | absolute | fixed
z-index: auto | <integer>
方向值 top right bottom left
float:left | right;
clear:left | right | both;
display:none | inline-block | block | flex;
visibility:visible | hidden;
overflow:hidden | scroll | auto;
传统:content + padding + border + margin
弹性:box-sizing ie8+
第二节:布局模式:按类型分类

1、无任何布局
时间:1990.12.20
内容:文字和图片为主
技术:基于HTML,Document

2、表格布布局模式:使用 DW 技术生成

3、定位布局
优点:快速达到想要的布局效果
局限:需要明确指定元素的大小、需要明确计算元素位置坐标、难于维护

4、浮动布局
曾经的主流布局,知道flexbox布局的出现和移动端的兴起
2004年 《网站重构》 带来的局限性

1.有table标签,就不符合 W3C 规范
2.div+css泛滥,整个页面都是div几乎找不到p、span等

*演变:静态布局、流式布局、自适应布局、响应式布局
*经典:实现三栏布局的“圣杯”和“双飞翼”

圣杯布局
左、中、右。中间的宽度为100%,独占一行。
使用负边距(margin-left)把左右两列拉到和中间列同一行。
左列使用margin-left:-100%。右例使用margin-left: -右列宽度。
同时左、中、右三列的容器设置左右padding来给左右两列留下相应宽度(左、右列宽度)

双飞翼布局
双飞翼布局和圣杯布局类似,也是左,中,右三列,中列里面会再套一个容器。
中列宽度设置为100%。使用负边距margin-left把左右两列拉到和中列同一行。
在中列内的容器div设置margin-left和margin-right给左右两列留下对应的空间。

5、多列布局:Multi-column 布局模块
功能:定义栏目的最大宽度、定义在多栏目之间的间距、在多个栏目中平均分配好显示的内容
*应用:瀑布流布局

*6、Flexbox 布局
解决:尤其移动端,内容的伸缩与扩展、垂直居中、等分列、等高列

*7、Grid 布局(网格布局)
思路来源:表格
最早网格系统:960gs,基于浮动布局

8、不规则布局: Shapes 模块
作用于印刷媒体

第三节:布局模式:按功能分类
1、静态布局 Static Layout

介绍:传统web设计,使用px做单位

特点:不管浏览器尺寸具体是多少,网页布局始终按照最初写代码时的布局来显示

PC端:居中布局,所有样式使用绝对宽度/高度(px),设计一个Layout,在屏幕宽高有调整时,
使用横向和竖向的滚动条来查阅被遮掩部分,设置min-width。

移动端:另外建立移动网站,单独设计一个布局,使用不同的域名如wap.或m.

方式1:在viewport meta标签上设置width=320,页面的各个元素也采用px作为单位。
通过用JS动态修改标签的initial-scale使得页面等比缩放,从而刚好占满整个屏幕

方式2:设在viewport meta标签上设置content"width=640,user-scalable=no,页面的各个
元素也采用px作为单位。由于640px超出了手机宽度,浏览器会自动缩小页面至刚好全屏。

优点:最简单的,没有兼容性问题

缺点:不能根据用户的屏幕尺寸做出不同的表现

2、流式布局 Liquid Layout

说明:页面元素的宽度按照屏幕分辨率进行适配调整,但整体布局不变。代表作栅栏系统(网格系统)
主要划分区域的尺寸用百分比,搭配min-、max-

*如网页主体 宽度80%,min-width为960px
*图片类似处理 width:100%;max-width:图片本身的尺寸;防止被拉伸而失真

布局特点:屏幕分辨率变化时,页面里元素的大小会变化而但布局不变

设计方法:使用%百分比定义宽度,高度大都是用px来固定住,可以根据可视区域 (viewport) 和父元素
的实时尺寸进行调整,尽可能的适应各种分辨率。往往配合 max-width/min-width 等属性控制尺寸流动
范围以免过大或者过小影响阅读

*缺点:如果屏幕尺度跨度太大,那么在相对其原始设计而言过小或过大的屏幕上不能正常显示

3、自适应布局 Adaptive Layout

说明:分别为不同的屏幕分辨率定义布局,即创建多个静态布局,每个静态布局对应一个屏幕分辨率范围

布局特点:屏幕分辨率变化时,页面里面元素的位置会变化而大小不会变化

设计方法:使用 @media 媒体查询给不同尺寸和介质的设备切换不同的样式

4、响应式布局 Responsive Layout

目标:确保一个页面在所有终端上(各种尺寸的PC、手机、手表、冰箱的Web浏览器等等)都能显示出令人满意的效果,流体和自适应的融合

布局特点:每个屏幕分辨率下面会有一个布局样式,即元素位置和大小都会变

设计方法:媒体查询+流式布局,通常使用 @media 媒体查询 和网格系统 (Grid System) 配合相对布局单位进行布局

优点:适应pc和移动端,如果足够耐心,效果完美

缺点:媒体查询是有限的,也就是可以枚举出来的,只能适应主流的宽高。要匹配足够多的屏幕大小,
工作量不小,设计也需要多个版本。

5、弹性布局 rem/em布局

1.单位选择:rem,em区别,em是相对其父元素,rem是相对于根元素
使用这种单位进行相对布局比%更加灵活,支持浏览器的字体大小调整和缩放等的正常显示
2.布局特点:使用rem做单位,可以使包裹文字的元素随着文字的缩放而缩放
3.使用rem控制字体,先要设置根节点html的字体大小,浏览器默认16px,多设置成62.5%
4.能适应缩进/以字体单位padding或margin/浏览器设置字体尺寸等情况(因为em/rem相对于字体大小,会同步改变)
5.使用rem单位的弹性布局在移动端也很受欢迎

第四节:常用布局实现

1.一列布局
web端:内容过少时底部固定,过多时正常排列
wap端:上下固定,中间滚动

2.两列布局
方法1.Float + BFC
方法2.Flexbox: 弹性布局的方法

3.三列布局
基础:实现PC端一列布局
方法1.BFC:BFC不会和浮动元素重叠,只有该方法主体放在最后
方法2.绝对定位:简单,均使用绝对定位
方法3.圣杯:配合relative使用,然后通过负值margin进行调整
方法4.双飞翼布局:与圣杯布局的差别在于多了一个div,实现的思路不一样

第五节:建议

1.其实在移动端使用所谓的弹性布局,是比较勉强的,使用vw、vh等后起之秀的单位,可以实现完美的流式布局
2.只做pc端,那么静态布局(定宽度)是最好的选择
3.做移动端,且设计对高度和元素间距要求不高,那么弹性布局(rem+js)是最好的选择,一份css+一份js调节font-size搞定
4.pc,移动要兼容,而且要求很高那么响应式布局还是最好的选择

附录:简单布局实现

一列布局两列布局三列布局

猜你喜欢

转载自blog.csdn.net/qq_41922702/article/details/87183449