相同: 它们都能让元素不可见
区别:
display:none;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见display: none;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;visibility:hidden;是继承属性,子孙节点消失由于继承了 hidden,通过设置 visibility: visible;可以让子孙节点显式修改常规流中元素的 display 通常会造成文档重排。修改 visibility 属性只会造成本元素的重绘读屏器不会读取 display: none;元素内容;会读取 visibility: hidden 元素内容原理:利用不同浏览器对 CSS 的支持和解析结果不一样编写针对特定浏览器样式。常见的 hack 有 1)属性 hack。2)选择器 hack。3)IE 条件注释
IE 条件注释:适用于[IE5, IE9]常见格式如下
<!--[if IE 6]> Special instructions for IE 6 here <![endif]-->选择器 hack:不同浏览器对选择器的支持不一样
/***** Selector Hacks ******/ /* IE6 and below */ * html #uno { color: red } /* IE7 */ *:first-child+html #dos { color: red } /* IE7, FF, Saf, Opera */ html>body #tres { color: red } /* IE8, FF, Saf, Opera (Everything but IE 6,7) */ html>/**/body #cuatro { color: red } /* Opera 9.27 and below, safari 2 */ html:first-child #cinco { color: red } /* Safari 2-3 */ html[xmlns*=""] body:last-child #seis { color: red } /* safari 3+, chrome 1+, opera9+, ff 3.5+ */ body:nth-of-type(1) #siete { color: red } /* safari 3+, chrome 1+, opera9+, ff 3.5+ */ body:first-of-type #ocho { color: red } /* saf3+, chrome1+ */ @media screen and (-webkit-min-device-pixel-ratio:0) { #diez { color: red } } /* iPhone / mobile webkit */ @media screen and (max-device-width: 480px) { #veintiseis { color: red } } /* Safari 2 - 3.1 */ html[xmlns*=""]:root #trece { color: red } /* Safari 2 - 3.1, Opera 9.25 */ *|html[xmlns*=""] #catorce { color: red } /* Everything but IE6-8 */ :root *> #quince { color: red } /* IE7 */ *+html #dieciocho { color: red } /* Firefox only. 1+ */ #veinticuatro, x:-moz-any-link { color: red } /* Firefox 3.0+ */ #veinticinco, x:-moz-any-link, x:default { color: red }属性 hack:不同浏览器解析 bug 或方法
/* IE6 */ #once { _color: blue } /* IE6, IE7 */ #doce { *color: blue; /* or #color: blue */ } /* Everything but IE6 */ #diecisiete { color/**/: blue } /* IE6, IE7, IE8 */ #diecinueve { color: blue\9; } /* IE7, IE8 */ #veinte { color/*\**/: blue\9; } /* IE6, IE7 -- acts as an !important */ #veintesiete { color: blue !ie; } /* string after ! can be anything */如果 display 为 none,那么 position 和 float 都不起作用,这种情况下元素不产生框
否则,如果 position 值为 absolute 或者 fixed,框就是绝对定位的,float 的计算值为 none,display 根据下面的表格进行调整
否则,如果 float 不是 none,框是浮动的,display 根据下表进行调整
否则,如果元素是根元素,display 根据下表进行调整
其他情况下 display 的值为指定值 总结起来:绝对定位、浮动、根元素都需要调整 display
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3B2mljFi-1599126120837)(…/imgs/display关系.png)]
外边距重叠就是 margin-collapse
相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。 这种合并外边距的方式被称为折叠,结合而成的外边距称为折叠外边距
折叠结果遵循下列计算规则:
两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值两个外边距一正一负时,折叠结果是两者的相加的和p:first-of-type 选择属于其父元素的首个
元素的每个
元素。
p:last-of-type 选择属于其父元素的最后
元素的每个
元素。
p:only-of-type 选择属于其父元素唯一的
元素的每个
元素。
p:only-child 选择属于其父元素的唯一子元素的每个
元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每个
元素。
:after 在元素之前添加内容,也可以用来做清除浮动。
:before 在元素之后添加内容
:enabled 选择器匹配每个已启用的元素(大多用在表单元素上)。
:disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中
如果需要居中的元素为常规流中 inline 元素,为父元素设置 text-align: center;即可实现
如果需要居中的元素为常规流中 block 元素,1)为元素设置宽度,2)设置左右 margin 为 auto。3)IE6 下需在父元素上设置 text-align: center;,再给子元素恢复需要的值
<body> <div class="content"> aaaaaa aaaaaa a a a a a a a a </div> </body> <style> body { background: #DDD; text-align: center; /* 3 */ } .content { width: 500px; /* 1 */ text-align: left; /* 3 */ margin: 0 auto; /* 2 */ background: purple; } </style>如果需要居中的元素为浮动元素,1)为元素设置宽度,2)position: relative;,3)浮动方向偏移量(left 或者 right)设置为 50%,4)浮动方向上的 margin 设置为元素宽度一半乘以-1
<body> <div class="content"> aaaaaa aaaaaa a a a a a a a a </div> </body> <style> body { background: #DDD; } .content { width: 500px; /* 1 */ float: left; position: relative; /* 2 */ left: 50%; /* 3 */ margin-left: -250px; /* 4 */ background-color: purple; } </style>如果需要居中的元素为绝对定位元素,1)为元素设置宽度,2)偏移量设置为 50%,3)偏移方向外边距设置为元素宽度一半乘以-1
<body> <div class="content"> aaaaaa aaaaaa a a a a a a a a </div> </body> <style> body { background: #DDD; position: relative; } .content { width: 800px; position: absolute; left: 50%; margin-left: -400px; background-color: purple; } </style>如果需要居中的元素为绝对定位元素,1)为元素设置宽度,2)设置左右偏移量都为 0,3)设置左右外边距都为 auto
<body> <div class="content"> aaaaaa aaaaaa a a a a a a a a </div> </body> <style> body { background: #DDD; position: relative; } .content { width: 800px; position: absolute; margin: 0 auto; left: 0; right: 0; background-color: purple; } </style>简单的方式:
上面的 div 宽 100%,下面的两个 div 分别宽 50%,然后用 float 或者 inline 使其不换行即可行框的排列会受到中间空白(回车\空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为 0,就没有空格了
移除空格、使用 margin 负值、使用 font-size:0、letter-spacing、word-spacing
网上有声称诸如id权重100,class权重10等计算方法,这是不正确的。 实际上应该如下:
如果一个声明来自style属性而不是选择器,计作1或者a=1(在一个html文档中,元素“style”的值是样式表规则,这个规则中没有选择器,所以a=1, b=0, c=0, and d=0)选择器中id属性的个数,计作b选择器中其他属性以及伪类的个数,计作c选择器中元素及伪元素的个数,计作d一些例子:
* {} /* a=0 b=0 c=0 d=0 -> 优先级= 0,0,0,0 */ li {} /* a=0 b=0 c=0 d=1 -> 优先级 = 0,0,0,1 */ li:first-line {} /* a=0 b=0 c=0 d=2 -> 优先级 = 0,0,0,2 */ ul li {} /* a=0 b=0 c=0 d=2 -> 优先级 = 0,0,0,2 */ ul ol+li {} /* a=0 b=0 c=0 d=3 -> 优先级 = 0,0,0,3 */ h1 + *[rel=up]{} /* a=0 b=0 c=1 d=1 -> 优先级 = 0,0,1,1 */ ul ol li.red {} /* a=0 b=0 c=1 d=3 -> 优先级 = 0,0,1,3 */ li.red.level {} /* a=0 b=0 c=2 d=1 -> 优先级 = 0,0,2,1 */ #x34y {} /* a=0 b=1 c=0 d=0 -> 优先级 = 0,1,0,0 */ style="" /* a=1 b=0 c=0 d=0 -> 优先级 = 1,0,0,0 */ [备注] :first-line 伪元素 [rel=up] 其他属性优先级只基与选择器的形式,特殊的,一个“[id=p33]“形式的选择器是按照属性选择器来计算的(a=0, b=0, c=1, d=0),即使用定义中包含ID。
了解了这些 你应该不会再对”11个class与一个id”谁的优先级高“这类的问题有疑问了吧,因为a,b,c,d只是在各自位置数字的累加,而不会越级。
当然权重最高的是!important,会覆盖以上所有。行内样式也高不过它。
有一幅生动的图可以展示这个规则:
浮动的框可以向左或向右移动,直到他的外边缘碰到包含框或另一个浮动框的边框为止。由于浮动框不在文档的普通流中,所以文档的普通流的块框表现得就像浮动框不存在一样。浮动的块框会漂浮在文档普通流的块框上
解决方法
父级 div 定义伪类:after 和 zoom (推荐使用,建议定义公共类,以减少 CSS 代码) .clearfloat:after{ display:block; clear:both; content:""; visibility:hidden; height:0} .clearfloat{zoom:1} 在结尾处添加空 div 标签 clear:both <div class="parent"> <div class="left">Left</div> <div class="right">Right</div> <div class="clearfloat"></div> </div> <style> .left {float:left} .clearfloat{clear:both} </style> 父级 div 定义 height父级 div 定义 overflow:auto父级 div 定义 overflow:hidden父级 div 也一起浮动父级 div 定义 display:table结尾处加 br 标签 clear:both参考链接几种常用的清除浮动方法
content 属性专门应用在 before/after 伪元素上,用于插入额外内容或样式
Flexbox 用于不同尺寸屏幕中创建可自动扩展和收缩布局
要求:三列布局;中间主体内容前置,且宽度自适应;两边内容定宽
好处:重要的内容放在文档流前面可以优先渲染
原理:利用相对定位、浮动、负边距布局,而不添加额外标签
.container { padding-left: 150px; padding-right: 190px; } .main { float: left; width: 100%; } .left { float: left; width: 190px; margin-left: -100%; position: relative; left: -150px; } .right { float: left; width: 190px; margin-left: -190px; position: relative; right: -190px; }双飞翼布局:对圣杯布局(使用相对定位,对以后布局有局限性)的改进,消除相对定位布局
原理:主体元素上设置左右边距,预留两翼位置。左右两栏使用浮动和负边距归位,消除相对定位。
.container { /*padding-left:150px;*/ /*padding-right:190px;*/ } .main-wrap { width: 100%; float: left; } .main { margin-left: 150px; margin-right: 190px; } .left { float: left; width: 150px; margin-left: -100%; /*position: relative;*/ /*left:-150px;*/ } .right { float: left; width: 190px; margin-left: -190px; /*position:relative;*/ /*right:-190px;*/ }reset.css 意为重置默认样式。HTML 中绝大部分标签元素在网页显示中都有一个默认属性值,通常为了避免重复定义元素样式,需要进行重置默认样式
Eric Meyer(CSS Reset)推荐
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } /* remember to define focus styles! */ :focus { outline: 0; } /* remember to highlight inserts somehow! */ ins { text-decoration: none; } del { text-decoration: line-through; } /* tables still need ‘cellspacing=”0″‘ in the markup */ table { border-collapse: collapse; border-spacing: 0; }Normalize.css 只是一个很小的 css 文件,但它在默认的 HTML 元素样式上提供了跨浏览器的高度一致性。相比于传统的 css reset,Normalize.css 是一种现代的,为 HTML5 准备的优质替代方案。
Normalize.css 是一种 CSS reset 的替代方案。经过@necolas 和@jon neal 花了几百个小时来努力研究不同浏览器的默认样式的差异,这个项目终于变成了现在这样。
我们创造 normalize.css 有下几个目的:
保护有用的浏览器默认样式而不是完全去掉它们一般化的样式:为大部分 HTML 元素提供修复浏览器自身的 bug 并保证各浏览器的一致性优化 CSS 可用性:用一些小技巧解释代码:用注释和详细的文档来浏览器解析 CSS 选择器的方式是从右到左
在网页中的应该使用“偶数”字体:
偶数字号相对更容易和 web 设计的其他部分构成比例关系使用奇数号字体时文本段落无法对齐宋体的中文网页排布中使用最多的就是 12 和 14CSS 可以拆分成 2 部分:公共 CSS 和 业务 CSS:
网站的配色,字体,交互提取出为公共 CSS。这部分 CSS 命名不应涉及具体的业务对于业务 CSS,需要有统一的命名,使用公用的前缀。可以参考面向对象的 CSS元素竖向的百分比设定是相对于容器的宽度,而不是高度
实现原理
以 “页面滚动条” 作为 “视差动画进度条”以 “滚轮刻度” 当作 “动画帧度” 去播放动画的监听 mousewheel 事件,事件被触发即播放动画,实现“翻页”效果link > visited > hover > active
伪元素:在内容元素的前后插入额外的元素或样式,但是这些元素实际上并不在文档中生成。它们只在外部显示可见,但不会在文档的源代码中找到它们,因此,称为“伪”元素。例如:
p::before {content:"第一章:";} p::after {content:"Hot!";} p::first-line {background:red;} p::first-letter {font-size:30px;}伪类: 将特殊的效果添加到特定选择器上。它是已有元素上添加类别的,不会产生新的元素。例如:
a:hover {color: #FF00FF} p:first-child {color: red}input [type=search] 搜索框右侧小图标如何美化?
input[type="search"]::-webkit-search-cancel-button{ -webkit-appearance: none; height: 15px; width: 15px; border-radius: 8px; background:url("images/searchicon.png") no-repeat 0 0; background-size: 15px 15px; }设置元素浮动后,该元素的 display 值自动变成 block
font-style: oblique; 使没有 italic 属性的文字实现倾斜
16.7ms 多数显示器默认频率是 60Hz,即 1 秒刷新 60 次,所以理论上最小间隔: 1s / 60 * 1000 = 16.7ms
监听滚轮事件,然后滚动到一定距离时用 jquery 的 animate 实现平滑效果。
对于 CSS 而言,id 和 class 都是选择器,唯一不同的地方在于权重不同。如果只说 CSS,上面那一句话就讲完了。拓展出来,对于 html 而言,id 和 class 都是 dom 元素的属性值。不同的地方在于 id 属性的值是唯一的,而 class 属性值可以重复。id 还一个老特性是锚点功能,当浏览器地址栏有一个#xxx,页面会自动滚动到 id=xxx 的元素上面。
更直接的:id 给 js 用,class 给 css 用(趋势)
其中 media 指定的属性就是设备,显示器上就是 screen,打印机则是 print,电视是 tv,投影仪是 projection。
<link rel="stylesheet" type="text/css" media="print" href="yyy.css" />但打印样式表也应有些注意事项:
打印样式表中最好不要用背景图片,因为打印机不能打印 CSS 中的背景。如要显示图片,请使用 html 插入到页面中。最好不要使用像素作为单位,因为打印样式表要打印出来的会是实物,所以建议使用 pt 和 cm。隐藏掉不必要的内容。(@print div{display:none;})打印样式表中最好少用浮动属性,因为它们会消失。反之
tranform 改变 fixed 子元素的定位对象transform 改变元素层叠顺序 transform 的副作用下面的属性在 SVG 和 CSS 中是一样的,只是在 SVG 的 transformations 和 dimensions 中稍有区别:
font-family, font-size, font-style, font-variant 和 font-weightwidth 和 heightscale, rotate, skew参考链接: 基本的 SVG 样式属性
参考链接:如果设计中使用了非标准的字体,你该如何去实现?