浏览器对于各个HTML都赋予了默认的样式,并且不同的浏览器默认的样式不同,而通常我们的产品设计中样式都是不同于浏览器默认样式的,所以我们在开发中经常要去覆盖默认的样式,针对不同的浏览器需要写不同的覆盖代码确保兼容性。
假如一开始我们就清理掉浏览器默认的样式,后面的开发即可以完全根据设计进行而不需要考虑浏览器默认样式的影响,从而提高开发效率。
浏览器默认的样式定义在标签上,所以CSS Reset里面也使用标签选择器来覆盖默认样式。
示例:
html,body,h1,h2,h3,h4,h5,h6,div,dl,dt,dd,ul,ol,li,p,blockquote,pre,hr,figure,table,caption,th,td,form,fieldset,legend,input,button,textarea,menu{margin:0;padding:0;}header,footer,section,article,asidejnav,hgroup,address,figure,figcaption,menu,details{display:block;}table{border-collapse:collapse;border-spacing:0;}caption,th{text-align: left;font-weight: normal;}html,body,fieldset,img,iframe,abbr{border:0;}i,cite,em,var,address,dfn{font-style:normal;}[hidefocus],summary{outline:0;} li{list-style:none;}h1,h2,h3,h4,h5,h6,small{font-size:100%;}sup,sub{font-size:83%;}pre,code,kbd,Samp{font-family:inherit;}q:before,q:after{content: none;}textarea{overflow:auto;resize:none;}label,summary{cursor: default;}a,button{cursor:pointer;}h1,h2,h3,h4,h5,h6,em,strong,b{font-weight: normal;} del, ins,u,s,a,a:hover{text-decoration:none;}body,textarea,input,button,select,keygen,legend{font:12px/l.14 arial,simsun;color:#333;outline:0;} body{background: #fff;}a,a:hover{color:#333;}
示例html代码
<div class="parent"> <div class="child">Hello Word</div></div>
.parent{ text-align: center; } .child{ display: inline-block; }
.child{ display: table; margin: 0 auto;}
.parent{ position: relative;}.child{ position: absolute; left: 50%; transform: translateX(-50%);}
.parent{ display: flex; justify-content: center;}
.parent{ display: flex;}.child{margin: 0 auto;}
只设置父元素(代码片段1)或者者同时设置子元素的margin(代码片段2),都可以达到效果
.parent{ display: table-cell; vertical-align: middle;}
.parent{ position: relative;}.child{ position: absolute; top: 50%; transform: translateY(-50%);}
.parent{ display: flex; align-items: center;}
.parent{ text-align: center; display: table-cell; vertical-align: middle;}.child{ display: inline-block;}
.parent{ position: relative;}.child{ position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);}
.parent{ display: flex; justify-content: center; align-items: center;}
示例html:
<div class="parent"> <div class="left"> <p>Left</p> </div> <div class="right"> <p>right</p> <p>right</p> </div></div>
.left{ float: left; width: 100px;}.right{ margin-left: 120px;}
.left{ float: left; width: 100px; margin-right: 20px; } .right{ overflow: hidden; }
.parent{ display: table; width: 100%; // 假如不设置,宽度默认根据内容自适应 table-layout: fixed; // 设置布局优先,否则宽度会受内容影响,即便设置了宽度}.left,.right{ display: table-cell;}.left{ width: 100px; // 默认单元格是根据内容比例分配的 padding-right: 20px; // margin对单元格不起作用}
.parent{ display: flex; // 子元素默认宽度自适应 } .left{ width: 100px; // 设置定宽,不参加缩放分配 margin-right: 20px; } .right{ flex: 1; // left不参加分配,剩余空间都分配给right }
.left{ float: left; margin-right: 20px; } .right{ overflow: hidden; }
.parent{ display: table; width: 100%; }.left,.right{ display: table-cell;}.left{ width: 0.1%; // 默认单元格会根据内容宽度按比例分配,设置一个很小的宽度使得单元格宽度刚刚包裹内容,没有设置table布局优先,所以尽管宽度很小,但是会被内容撑开 padding-right: 20px;}
.parent{ display: flex;}.left{ margin-right: 20px;}.right{ flex: 1;}
示例HTML:
<div class="parent"> <div class="column"> <p>1</p> </div> <div class="column"> <p>2</p> </div> <div class="column"> <p>3</p> </div> <div class="column"> <p>4</p> </div></div>
.parent{ margin-left: -20px;}.column{ float: left; width: 25%; padding-left: 20px; box-sizing: border-box; }
.parent-fix{ margin-left: -20px;}.parent{ display: table; width:100%; table-layout: fixed;}.column{ display: table-cell; padding-left: 20px;}
.parent{ display: flex;}.column{ flex: 1;}//选择前面还有一个column的元素.column+.column{ margin-left:20px;}
.left{border-right: 20px solid transparent;background-clip:padding-box;}
.left{ float: left; width: 100px; margin-right: 20px; } .right{ overflow: hidden; } .left, .right{padding-bottom: 9999px;margin-bottom:-9999px;}.parent{overflow: hidden;}
外观类似,语义相同的模块,看成一个模块,通过扩展的方式改变样式,扩展方法,通过模块class加后缀的形式,如图中.nav-1
<span class="button button-1">按钮</span><span class="button button-1 disabled">按钮</span>
.button{}.button:hover{}.button.disabled{}.button-1{}
模块,组件以及其扩展应该写在一起,方便后期维护
模块化和组件化在团队中实施时,必需要靠规范来落地
规范文件位置结构,可分为通用类,业务类
-- 通用类可以放置全局base文件(如reset.css)和第三个框架css文件
-- 业务类根据自己产品的业务来区分
1.定义,文本格式,属性定义顺序等
单行注释星号前后需要后空格,否则假如出现编码问题会影响css生效