前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了。然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司,事情不算多,于是拿起《CSS权威指南》进行"基础学习"+"查漏补缺",本篇文章主要是总结了些自己认为CSS中值的注意的几个知识点(本文知识点仅限本书范围内,若要讲CSS全部样式,那本兽还是选择慢慢懵逼去~)。
选择器
这里要说明的是类选择器的嵌套选择与多类选择器的差别,顺便捎上了一级子元素的选择
类选择器基本写法:
.your-class{/*...*/}
类选择器的嵌套选择写法:
.first-class .second-class{/*...*/}
多类选择器基本写法:
.first-class.second-class{/*...*/}
一级子元素的选择写法:
.first-class > .second-class{/*...*/}
从代码看它们之间的区别:
<style> .first-style.second-style{ color: blueviolet} .first-style .third-style{ font-style: italic} .first-style > .fourth-style{ font-weight: bold}</style> <div class="first-style second-style">HELLO</div><div class="first-style third-style">hello</div><div class="first-style"><div class="second-style">HELLO</div></div><div class="first-style"><div class="third-style">hello</div></div><div class="first-style"><div><div class="third-style">Hello World</div></div></div><div class="first-style"><div class="fourth-style">Hello World</div></div><div class="first-style"><div><div class="fourth-style">Hello World</div></div></div>
得出结论:
· 类选择器的嵌套选择,选择的是first-style类下的所有包含second-style类的子元素(不论几级子元素)
· 一级子元素的选择,选择的是first-style下的一级子元素中包含second-style类的元素,再往里层嵌套的元素不算
· 多类选择器的选择,选择同时包含first-style和second-style类的元素
样式优先级
样式的优先级由选择器本身的组件确定,我们将优先值表述为4个部分,如:0.0.0.0
注意:前一部分的优先级大于后一部分的优先级,请无视他们的值之间的大小。如:0.0.1.0 大于 0.0.0.12,规则以此类推。
选择器的具体优先级如下:
· 对于选择器中给定的各个ID属性值,加 0.1.0.0;
· 对于选择器中给定的各个类属性值、属性选择或伪类,加 0.0.1.0;
· 对于选择器中给定的各个元素和伪元素,加 0.0.0.1;
· 结合符和通配符选择对优先级没有任何贡献。
用代码说明优先级:
div{ color: black} /* 0.0.0.1 */div p{ color:black} /* 0.0.0.2 */.my-div{ color:black} /* 0.0.1.0 */div.my-div{ color: black} /* 0.0.1.1 */.my-div .my-p{ color: black} /* 0.0.2.0 */.my-div p.my-p{ color: black} /* 0.0.2.1 */div.my-div p.my-p{ color: black} /* 0.0.2.2 *//*... 以此类推*/#div-id{ color: black} /*0.1.0.0 *//*... 继续类推*/
那么有人会注意到,在0.0.0.0的4个部分中,第一个始终没使用到。它是怎么用的呢?
一般来说,第一个0是为内联样式声明保留的,它比其他声明的特殊性都高。
如:
<div style="/*...*/"></div> <!--1.0.0.0 - ->
本节还存在"!important"问题
"!important"放在样式声明之后,即分号之前。并且它没有特殊的优先级值。那么它的优先如何处理呢?看以下代码:
<style> .impt{color: black !important}</style><div class="impt" style="color:red">hello world</div>
得出结论:
"!important"声明的重要性超出了所有其他声明。
CSS正常流及元素
正常流
这里指西方语言文本从左向右、从上向下显示,也是我们熟悉的传统HTML文档的文本布局。要让一个元素不在正常流中,唯一的方法就是使之成为浮动/定位元素。
非替换元素
如果元素内容包含在文档中,则称之为非替换元素。如:
替换元素
指用作为其他内容占位符的一个元素。如:、
块级元素
在正常流中,会在其框之前或之后生成"换行",通过声明"display:block"可以让元素生成块级框。
行内元素
这些元素不会在之前或之后生成"行分隔符",它们是块级元素的后代,通过"display:inline"可以让元素生成一个行内框。
margin 外边距
1.外边距垂直合并
垂直相邻的外边距会进行合并。两个外边距中较小的一个会被较大的一个合并(你也可以理解为"重叠")。
具体效果看例子:
<style> .first-div{ margin-bottom:50px;} .second-div{ margin-top:20px;}</style><div class="first-div">this is div-1</div><div class="second-div">this is div-2</div>
2.margin样式顺序
.your-class{ margin:<top> <right> <bottom> <left> }
顺序可以这样记:从12点钟开始,顺时针一圈。
缩写规则:
· 如果缺少左外边距的值,则使用右外边距的值
· 如果缺少下外边距的值,则使用上外边距的值
· 如果缺少右外边距的值,则使用上外边距的值
缩写代码:
.first-margin{ margin: 50px;} /* 50px 50px 50px 50px */.second-margin{ margin: 50px 20px ;} /* 50px 20px 50px 20px */.third-margin{ margin: 50px 30px 10px;} /* 50px 30px 10px 30px */
3.margin应用于行内元素的效果
当margin应用于行内元素,则对水平面有影响,对垂直面无任何影响。
效果代码:
<style> .mar-strong{ margin:20px 0}</style><div><strong class="mar-strong">hello world</strong>
既然这里提到margin与行内元素之间的关系,我们也顺便看下padding与行内元素的关系吧。
当padding应用于行内元素,则对水平面有影响,对垂直面无影响(在没有设置background的情况下)。
看例子:
<style> .mar-strong{ padding:20px 0px; background: red}</style><p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<strong class="mar-strong">hello world</strong>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
以上例子可以去掉padding或者background看看布局上有什么影响来验证。请慎重处理这三者之间的关系哦。
background-attachment
这里稍微提下这个属性。
background: scroll || fixed || inherit
初始值:scroll
看效果代码:
<style> .div-bg{ width: 100%; height: 3000px;} .bg-attachment{ background-image: url(img/1.jpg); background-attachment: fixed; background-repeat: no-repeat; background-position: center}</style><div class="div-bg bg-attachment"></div>
从上面例子可以看到,当滚动页面的时候,背景图始终居中跟随滚动。
浮动与清除
元素浮动
· CSS允许所有元素浮动
· 浮动元素周围外边距不会合并
<style> .div-float{float: left;margin: 50px}</style><div class="div-float">HELLO WORLD</div><div class="div-float">hello world</div>
· 浮动元素会生成一个块级框,不论这个元素本身是什么。
<style> .span{ margin: 50px} .span-float{ float: left;} </style><span class="span span-float">HELLO WORLD</span><span class="span span-float">hello world</span>
清除浮动
清除浮动可由clear属性完成。
clear: left || right || both || none || inherit
初始值: none
这里我们主要说明下left、right和both。分别是清除左边浮动元素(左边不让你浮动)、清除右边浮动元素(右边不让你浮动)和清除左右两边的浮动(两边都不让存在浮动元素)。
<style> .div-mar{ width: 100px;padding: 50px} .div-red{ background: red} .div-yellow{ background: yellow} .div-float-left{ float: left} .div-float-right{ float: right} .div-clear-both{ clear: both} .div-clear-left{ clear: left} .div-clear-right{ clear: right}</style><div class="div-mar div-red div-float-left">HELLO WORLD</div><div class="div-mar div-yellow div-float-left div-clear-right">Hello World</div>
可以对以上[class*="div-red"]元素进行左右浮动,再用[class*="div-yellow"]元素进行清除浮动。
元素定位
元素的定位可以通过使用position属性。
positon: static || relative || absolute || fixed || inherit
初始值: static
static(静态/正常定位)
正常生成元素框。
relative(相对定位)
元素偏移某个距离,元素仍保持其未定位之前的形状。
absolute(绝对定位)
元素从文档流完全删除,并相对其包含块定位。
fixed(固定定位)
元素框的表现类似于absolute,不过其包含块是视窗本身。
元素relative/absolute/fixed定位的同时,会为其后代元素建立一个包含块。
什么是包含块?
在HTML中,根元素就是html元素。
· "根元素"的包含块由用户代理建立
· 对于一个非根元素,如果其position值为relative或static,则包含块由最近的块级框、表单元格或行内块祖先框的内容边界构成
· 对于一个非根元素,如果其position值为absolute,包含块设置为最近的position值不是static的祖先元素
"visibility:hidden"与"display:none"的区别
当我们设置一个元素visibility为hidden的时候,元素处于不可见状态,但元素仍然会影响到文档的布局(元素仍存在,只是看不见)。
当我们设置一个元素display为none的时候,元素不显示,并从文档流中删除(元素不存在,可用于渲染优化)。
"content" 生成内容
使用content属性插入内容或属性值。
<style> .div-content:before{ content: "[ "attr(value)" ] "} .div-content:after{content:" hello world"}</style><div class="div-content" value="H">ello World</div>
附上在写的时候突然想到的一个问题
在不同元素内的子元素使用z-index的时候受不受父(祖先)元素之间关系的影响?
<style> .div-out{width: 400px; height: 200px; background: black;border-bottom: 1px solid white; position: relative;} .div-index-1{ width: 200px; height: 100px; background: red; position: absolute; bottom: -50px; z-index: 1} .div-index-2{ width: 200px; height: 100px; background: yellow; position: absolute; top: -50px; left: 20px; z-index: 1}</style> <div class="div-out"> <div class="div-index-1"></div> </div> <div class="div-out"> <div class="div-index-2"></div></div>
得出结论:不受影响。
新手文章,有问题可交流讨论,不喜勿喷~~~ 觉得本文还行的就小手点个赞给个鼓励吧~

HTML代码可以通过在线验证器、集成工具和自动化流程来确保其清洁度。1)使用W3CMarkupValidationService在线验证HTML代码。2)在VisualStudioCode中安装并配置HTMLHint扩展进行实时验证。3)利用HTMLTidy在构建流程中自动验证和清理HTML文件。

HTML、CSS和JavaScript是构建现代网页的核心技术:1.HTML定义网页结构,2.CSS负责网页外观,3.JavaScript提供网页动态和交互性,它们共同作用,打造出用户体验良好的网站。

HTML的功能是定义网页的结构和内容,其目的在于提供一种标准化的方式来展示信息。1)HTML通过标签和属性组织网页的各个部分,如标题和段落。2)它支持内容与表现分离,提升维护效率。3)HTML具有可扩展性,允许自定义标签增强SEO。

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Atom编辑器mac版下载
最流行的的开源编辑器

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。