精通CSS-读书记录 ch1-ch3

2023-10-12 17:10

本文主要是介绍精通CSS-读书记录 ch1-ch3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    本想开始学JS,但是去W3C看了两天语法觉得就此离开CSS去面对这么庞大的语言有点太莽撞。而且想着就算不会JS也得把CSS学扎实了,那边在CSSZENGARDEN才草草仿作了几张简单页面,技术必然不到家。其实我也询问了做前端的前辈,但前辈的说法是,直接上JS,称HTML+CSS入门简单无所谓。可是CSS和JS也没有必然联系啊,静态页面做好也能满足不少需求。

    但是网上瞎逛来精进自己的技术太不靠谱了,所以打算看看《精通CSS》,系统地学一学。没法太急躁


关键词:微格式、选择器、优先级计算规则、文档结构、outline属性、全局reset、外边距叠加、包含浮动元素的div、匿名块框等

第一章

自己还没有使用过的标签
blockquote
code
abbr
acronym
code
fieldset
legend
label
caption
thead
tbody
tfoot

在分配ID和类名时,要尽可能保持名称与表现方式无联系。应该根据“它们是什么”来为元素命名,而不应该根据“它们的外观如何”来命名。

此处,作者推荐使用连字符的命名,而不是camelCase嘻嘻。

只有在绝对确定这个元素只会出现一次的情况下,才应该使用ID。

微格式:有一组开发人员决定开发一套标准的额命名格式和标记模式来表示人、地点或日期等类型的信息。微格式让我们可以以一种特定的方式标记数据,让其它程序和服务可以访问它。查阅其正式规范:http://microformats.org

可以使用W3C验证器(一个验证器bookmarklet)或firefox web developer extension等插件检查HTML是否是有效的。


第二章

选择器回顾:

        常用的选择器:类型选择器(又称元素选择器或简单选择器)和后代选择器。

        寻找更特定的元素:类和ID选择器。

        善用选择器的结合。

        伪类选择器 :link和.visited称为链接伪类,只能应用于锚元素。:hover :active和:focus称为动态伪类。伪类可以结合使用,比如a:visited:hover{color:olive;)

        通用选择器;

        高级选择器;(CSS具有向后兼容性)在对于站点功能或布局很重要的任何元素上,都应该避免使用这些高级选择器。

                子选择器:只选择元素的直接后代 >。书中提到IE7中有个bug, 如果父元素和子元素之间有HTML注释,就会出问题,难以想象注释会影响代码解析。(可以用通用选择器来模拟子选择器的效用,基本思想就是用通用覆盖掉子元素后代上的样式)。

                相邻同胞选择器:可以用于定位同一个父元素下某个元素之后的元素。例如可以使用相邻同胞选择器让顶级标题后面的第一个段落显示为粗体。(也就是邻近的第一个元素吧)

                属性选择器:根据某个属性是否存在属性的值来寻找元素[]

                        <a> 标签的 rel 属性用于指定当前文档与被链接文档的关系。

                用于 <a> 标签的可选属性 rel 和 rev 分别表示源文档与目标文档之间正式的关系和方向。rel 属性指定从源文档到目标文档的关系,而 rev 属性则指定从目标文档到源文档的关系。这两种属性可以在 <a> 标签中同时使用。


 层叠和特殊性

        层叠采用以下重要度次序:

        标有!important的用户样式

        标有!important的作者样式

        作者样式

        用户样式

        浏览器/用户代理应用的样式

        然后根据选择器的特殊性决定规则的次序。具有更特殊选择器的规则优先于具有一般选择去的规则,如果两个规则的特殊性相同,那么后定义的规则优先。

书中给出一个demo,查看两个h2的颜色:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>sound wave effect</title><link rel="stylesheet" media="screen" href="sonicwave_style.css"><style>#content div#main-content h2{color:gray;}#content #main-content>h2{color:blue;}body #content div[id="main-content"] h2{color:green;}#main-content div.news-story h2{color:orange;}#main-content [class="news-story"] h2{color:yellow;}div#main-content div.news-story h2.first{color:red;}</style>
</head><body>
<div id="content"><div id="main-content"><h2>Strange Times</h2><p>Here you can read bizarre news stories.</p><div class="news-story"><h2 class="first">Bog Snorkeling Champion</h2><p>The 2008 bod snorkeling championship</p></div></div></div></body>
</html>

结果为两个h2均显示为灰色。(读CSS实战手册时自己选择跳过这部分的讲解了+ +)

为了计算规则的特殊性,给每种选择器分配一个数字值。然后将规则的每个选择器的值加在一起。选择器的特殊性分成4个称为等级:a, b, c, d。

        如果样式时行内样式,那么a=1

        b等于ID选择器的总数

        c等于类,伪类和属性选择器的数量

         d等于类型选择器和伪元素选择器的数量

 #content div#main-content h2{color:gray;}//包含两个ID选择器两个类型选择器:0202
    #content #main-content>h2{color:blue;}//包含两ID选择器 似乎子选择器没有优先级?:0201 经检验 >也只算一个类型选择器吧
    body #content div[id="main-content"] h2{color:green;}//包含一个ID选择器 一个属性选择器 两个类型选择器:0112
    #main-content div.news-story h2{color:orange;}//包含一个ID选择器 一个类选择器 一个类型选择器:0111
    #main-content [class="news-story"] h2{color:yellow;}//包含一个ID 一个属性 一个类型:0111
    div#main-content div.news-story h2.first{color:red;}//一个ID 两个类 一个类型:0121

再来看《CSS实战手册》中的说法:差不多哈哈哈哈

进一步解释:基本上用style属性编写的规则总是比其它任何规则特殊。具有ID选择器的规则比没有ID.........

为了避免过分混乱,我尽量保持一般性样式非常一般,特殊样式尽可能特殊,这样就不需要覆盖特殊样式了

一种有意思的特殊性用法是在主题body标签上应用类或ID,这样做之后,就可以根据页面或在站点范围内覆盖样式,例如,如果希望新的页面具有特殊的布局,那么可以在主页的主题元素上添加一个类名,并且用它覆盖样式。

Firefox中可以使用firebug来查明样式来源。

2.4

2.4.1对文档应用样式

    还可以从另一个样式表导入样式表如@import url(/css/layout.css);但是导入样式表比链接样式表慢。使用结构良好的单一CSS文件可以显著提高下载速度。

    给每个注释添加一个标志@,容易搜寻文档。    

代码结构:

1.最一般的规则 general styles

    1.1.所有全局reset样式

    1.2链接标题和其它元素

2.辅助样式 helper styles

    2.1表单

    2.2通知和错误

    2.3一致的条目

3.页面结构 page structure

    3.1标题、页脚和导航

    3.2布局

    3.3其它页面结构元素

4.页面组件 page components

    各个压面

5.处理覆盖和例外情况 overrides

(在一层样式上构建另一层样式,处理的样式越来越特殊。)

(注释方法:

/*@group general styles

---------------------------------------------------------------------------------*/)

为了方便,可以在文档开头添加一个迷你颜色查询表。为了使注释更有意义,可以使用关键字来区分重要的注释。如@todo来表示某些东西需要完善,@bugfix表示代码或特定浏览器遇到的问题,@workaround表示并不完善的权宜之计。

CSS优化器:www.cssoptimiser.com/



第三章 可视化格式模型

“你要掌握的3个最重要的CSS概念是浮动,定位和盒子模型”

3.1盒模型概述

outline属性:轮廓绘制在元素框之上

outline (轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。不影响页面布局注释:轮廓线不会占据空间,也不一定是矩形。outline 简写属性在一个声明中设置所有的轮廓属性。可以按顺序设置如下属性:outline-color
outline-style
outline-width

全局reset

相当于我之前所称的“预处理”吧。目前比较全的CSS重设(reset)方法总结

3.1.2 外边距叠加:当两个或更多垂直外边距相遇时,它们将形成一个外边距,这个外边距的高度等于两个发生叠加的外边距的高度中的较大者。而且外边距甚至可以与本身发生叠加。假设有一个空元素,它有外边距,但是没有边框和内边距,在这种情况下,顶部外边距与底部外边距就碰到了一起,它们会发生叠加。(元素的顶外边距与父元素的顶外边距发生叠加;元素的顶外边距和底外边距发生叠加(空元素吧);空元素中已经叠加的外边距与另一个空元素的外边距发生叠加)。只有普通文档流中块框的垂直外边距才会发生外边距叠加。行内框,浮动框或绝对定位框之间的外边距不会叠加。

3.2定位概述

3.2.1 可视化格式模型

display属性取值none时,不占用文档空间,但是opacity要吧...

CSS中有三种基本的定位机制:普通流,浮动和绝对定位。那其实我都掌握得还行了,所以以后就大胆用吧!我就喜欢这种总结性的语句。

行内框可以使用水平内边距,边框和外边距调整它们的水平间距,但是垂直内边距,边框和外边距不影响内框的高度。相当于行内元素只在水平方向有变化。修改行内框尺寸的唯一方法是修改行高或者水平边框,内边距和外边距。

匿名块框:将一些文本添加到一个块级元素的开头时,即使没有把这些文本定义为块级元素,它也会被当成块级元素对待。它不与专门定义的元素相关联。块级元素内的文本行也会发生类似情况。假设有一个包含3行文本的段落。每行文本形成一个匿名块框,无法直接对匿名块或行框应用样式。

3.2.2 相对定位

相对于它的起点移动。无论是否移动,元素仍然占据原来的框。因此,移动元素会导致它覆盖其他框。因为对于其它框来说它仍然在最初的位置。实际上呗看做普通流定位模型的一部分,因为元素的位置是相对于它在普通流中的位置的。

3.2.3绝对定位

绝对定位使元素的位置与文档流无关,因此不占据空间。普通文档流中其它元素的布局就像绝对定位的元素不存在一样。

刚刚尝试了div嵌套,一共三层,最外层设置了absolute,中间层设置了relative,最里层设置了relative。接着我将中间层相对最外层定位,最里层相对于中间层定位。结果却不如我所料。

代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>sound wave effect</title><link rel="stylesheet" media="screen" href="sonicwave_style.css"><style>*{padding:0;margin:0;}#box1{height:200px;width:200px;background-color:antiquewhite;position:absolute;}#box2{height:100px;width:100px;background-color:aquamarine;position:relative;top:30px;left:40px;}#box3{height:50px;width:50px;background-color:azure;position:relative;bottom:5px;left:5px;}</style>
</head><body>
<div id="box1"><div id="box2"> <div id="box3"></div></div>
</div></body>
</html>

结果为:


真不懂了。(啊,我蠢,把绝对相对写反了!)

3.2.4 浮动

浮动的框可以左右移动,直到它的外边缘碰到包含框或另一个浮动框的边缘。因为浮动框不在文档的普通流中,所以文档中的普通流中的块框表现得就像浮动框不存在一样。

此处《精通CSS》也讲了div包含浮动元素时没有高度的情况:浮动元素不占据空间


a.空元素如:<br class="clear"/> clear:both 这个原理不太懂。元素声明这个之后时表示忽略它之前元素的浮动属性吧?

b.也可以选择浮动容易但是下一个元素会收到这个浮动元素的影响。

c.(讲到)overflow属性定义在包含的内容对于指定的尺寸太大的情况下元素应该怎么样。在默认情况下,内容会溢出到框外,进入相邻的空间。应用值为hidden或者auto的overflow属性有一个有用的副作用,这会自动地清理包含的任何浮动元素。但是这种方法在某些情况下会产生滚动条或截断内容。

d.《精通CSS》中还提到用:after伪类,运用到包含框在其后加个小点但是不显示它,然后对小点清除浮动。如下:


(待续)

第三章 可视化格式模型

“你要掌握的3个最重要的CSS概念是浮动,定位和盒子模型”

3.1盒模型概述

outline属性:轮廓绘制在元素框之上

这篇关于精通CSS-读书记录 ch1-ch3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197250

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

vue, 左右布局宽,可拖动改变

1:建立一个draggableMixin.js  混入的方式使用 2:代码如下draggableMixin.js  export default {data() {return {leftWidth: 330,isDragging: false,startX: 0,startWidth: 0,};},methods: {startDragging(e) {this.isDragging = tr

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

记录AS混淆代码模板

开启混淆得先在build.gradle文件中把 minifyEnabled false改成true,以及shrinkResources true//去除无用的resource文件 这些是写在proguard-rules.pro文件内的 指定代码的压缩级别 -optimizationpasses 5 包明不混合大小写 -dontusemixedcaseclassnames 不去忽略非公共

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现    💬 系统登录注册 系统登录 登录界面   用户添加  💬 抗疫列表展示模块     区域信息管理 添加物资详情 抗疫物资列表展示 抗疫物资申请 抗疫物资审核 ✒️ 源码实现 💖 源码获取 😁 联系方式 📚 前言 📑博客主页:

vue+el国际化-东抄西鉴组合拳

vue-i18n 国际化参考 https://blog.csdn.net/zuorishu/article/details/81708585 说得比较详细。 另外做点补充,比如这里cn下的可以以项目模块加公共模块来细分。 import zhLocale from 'element-ui/lib/locale/lang/zh-CN' //引入element语言包const cn = {mess