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

相关文章

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm