精通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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

读书摘录《控糖革命》

又到了每周推荐时间,这周末给大家推荐一本书《控糖革命》。身体是革命的本钱,只有保持健康的身体,才能保证持久的生产力,希望我的读者都可以身体健康,青春永驻。 推荐前,首先申明在《控糖革命》一书中,作者提出了一些颇具争议的观点,这些观点并没有经过系统的科学论证,但这并不妨碍我们从中获取一些有益的控糖建议。作者通过分享作者的个人经验和研究,为我们提供了一种全新的饮食理念,帮助我们更好地控制血糖峰值

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',