当前位置: 首页 > Web前端 > CSS

CSS学习笔记

时间:2023-03-30 15:37:32 CSS

CSS学习笔记在学习CSS的过程中做的一些记录,用于未来的快速回忆。HTML常见元素和理解head中的元素<meta charset="utf-8">指定字符集meta name="viewport" content="..."定义视图大小与设备屏幕大小的比例,用户是否可缩放<base href="/">指定基准路径body中的元素a[href, target]img[src, alt]table td[colspan, rowspan]form[target, method, enctype]input[type, value]button[type]select > option[value]label[for]如何理解HTMLHTML用于描述网页的结构,负责页面整体的结构可以使用http://h5o.github.io/来分析一个页面的结构HTML要强调语义化使用https://validator.w3.org/check来检查HTML语法HTML5新增内容新的区块标签:section、article、nav、aside表单增强:添加日期时间搜索类型、表单验证、Plaveholder自动聚焦新增语义:header/footer头尾、section/article区域、nav导航、aside不重要的内容、em/strong强调、i为iconHTML元素分类按默认样式分:块级block、行内inline(没有尺寸属性width/height等)、inline-blockHTML元素嵌套关系块级元素可以包含行内元素块级元素不一定能包含块级元素,例如<p></p>行内元素一般不能包含块级元素(a >div 元素例外)HTML元素默认样式使用CSS Reset清除一些默认样式使用Normalize.css来修正默认样式(例如修正各浏览器对宽高定义的不一致)HTML面试题doctype的意义是什么?让浏览器以标准模式渲染让浏览器知道元素的合法性HTML XHTML HTML5之间的关系?HTML属于SGMLXHTML属于XML,是HTML进行XML严格话的结果HTML5不属于SGML或XML,比XHTML宽松HTML5有什么变化?新的语义化元素、表单增强、新的API(离线、音视频、图形、实时通信、本地存储、设备能力)em与i有什么区别?em 是语义化的标签,表强调i 是纯样式的标签,表斜体(一般不在HTML5中用)语义化的意义是什么?开发者容易理解机器容易理解结构(搜索引擎、读屏软件)有助于SEO哪些元素可以自闭合?input、img、br、hr、meta、linkHTML和DOM的关系?HTML是静止的DOM是由HTML解析而来的,是活的JS可以维护DOMform的作用有哪些?直接提交表单使用submit/reset按钮便于浏览器保存表单第三方库可以整体提取值CSS(Cascading Style Sheet)基础浏览器在解析选择器时是从右到左的。选择器分类元素选择器 a{}伪元素选择器 ::before()类选择器 .link{}属性选择器 [type=radio]{}伪类选择器 :hover{}(伪元素是真实存在的,而伪类是一种状态)ID选择器 #id{}组合选择器 [type=checkbox] + label{}否定选择器 not(.link){}通用选择器 *{}选择器权重权重计算,相加时不进位ID选择器:+100类、属性、伪类:+10元素、伪元素:+1其他选择器:+0!important优先级最高元素属性 优先级高相同权重 后写的生效非布局样式字体字体族(使用时不能加引号):serif(衬线体)、sans-serif(非衬线体)、monospace(等宽字体)、cursive(手写体)、fantasy(花体)多字体(使用时需要对每个字体用引号,fallback机制是针对每个字)网络字体、自定义字体/* 自定义字体 *//* url可使用在线url,若跨域,需要对方服务器允许跨域(对方服务器展示CORS头) */@font-face { font-family: "JC"; src: url("./define.ttf")}.custom-font { font-family: JC}iconfont行高line-height会撑起line-box的高度,以line-height最大的为准字体渲染时默认以base-line(基线)为准,可通过修改vertical-align来修改对齐方式或基线位置图片空白原因:img行内元素,以inline的方式排版,渲染时默认以字体对齐的base-line为准偏差大小:以字体大小为依据修正:①将图片style设置为vertical-align: bottom;②display: block;背景纯色背景:使用颜色名或rgb或rgba(带透明度)或hsl(色相)或hsla(带透明度的色相)指定渐变色背景:线性渐变简单写法:linear-gradient(to right, red, green),to right指明从左到右,也可使角度30deg也可添加多颜色以及控制颜色位置linear-gradient(30deg, red 0, green 10%, yellow 50%, green 100%)放射性渐变多背景叠加背景①:linear-gradient(135deg, transparent 0, transparent 45.5%, green 45.5%, green 55.5%, transparent 55.5%, transparent 100%)背景②:linear-gradient(45deg, transparent 0, transparent 45.5%, red 45.5%, red 55.5%, transparent 55.5%, transparent 100%)设定背景大小可以让背景颜色循环出现background-size: 30px 30px背景图片和属性(雪碧图)使用backgorund-repeat可以控制图片是否平铺以及在哪个方向循环平铺使用background-position来指定图片的位置,如background:center center为居中,也可是使用像素使用background-size来控制图片大小雪碧图(性能优化的一种)制作就是将很多图片合成一张图片(下载时只需要一次http请求),使用时将某部分显示出来即可使用div来放置图片,使用background来引入图片,使用width/height来拟合图标的大小,使用backgroung-position来在雪碧图中找到图标,使用background-size来缩放图标大小base64和性能优化常用于小图标文件会增大(①图片体积会增大1/3;②CSS文件会变大)会变慢(浏览器需要将base64解码)多分辨率适配对于高分辨率的屏幕,需要制作更大尺寸的图标,然后使用background-size将其缩小,以解决高分屏模糊的问题边框边框的属性:线型、大小、颜色边框背景图border-img: url(./border.png) 30 round边框衔接(CSS实现三角形).div-class { width: 0px; height: 200px; border-bottom: 30px solid red; border-left: 30px solid transpatrnt; border-right: 30px solid transpatrnt; /* 添加圆角可以将三角形变成扇形 */}滚动滚动行为与滚动条visivle: 滚动条隐藏(会超出容器)hidden: 滚动条隐藏(不会超出容器)scroll: 滚动条显示auto: 滚动条自动显示文本折行overflow-wrap(旧写为word-wrap,通用换行控制):是否保留单词word-break(针对多字节文字):是否把单词/中文句子/文字看作一个单位white-space:空白处是否断行/* 这是一个示例,不对单词换行、单个中文字为单位 */.div-class { overflow-wrap: normal; word-break: normal; white-space: normal;}装饰性属性字重:font-weight斜体: font-style:itatic下划线: text-decoration指针: cursorhackhack(不合法但生效的写法):在特定浏览器生效,为了处理兼容性hack写在标准属性后面缺点:难理解、难维护、易维护替代方案:特性检测、针对性添加class面试题CSS样式(选择器)的优先级?权重的计算(叠加不进位)!important优先级最高内联样式高后写的优先级高雪碧图的作用减少HTTP请求数,提高加载性能在一些情况下可以减少图片的大小自定义字体的使用场景宣传/品牌/banner等固定文案字体图标base64的使用将图片变成文本减少HTTP请求数适用于小图片伪元素与伪类的区别伪类表状态伪元素是真的有元素前者单冒号,后者双冒号(由于历史问题,考虑兼容性时before/after可能需要使用单冒号)如何美化checkboxlabel[for]和id隐藏原生inputinput:checked + labelCSS(Cascading Style Sheet)布局CSS布局历史早期以table为主(简单)后来以技巧性布局为主(难)现在有flexbox/grid布局(偏简单)响应式布局是必备知识常用布局方法table表格布局float浮动 + margininline-block布局flexbox布局table表格布局<!-- 常规表格布局 --><table> <tr> <td class="left">左</td> <td class="right">右</td> </tr></table><!-- 模拟表格布局 --><div class="table"> <div class="table-row"> <div class="left table-cell">左</div> <div class="right table-cell">右</div> </div></div>.table { display: table; width: 900px; height: 100px;}.table-row { display: table-row;}.table-cell { display: table-cell; vertical-align: center;}一些布局属性盒子模型content、 padding、border、margin两种:W3C标准模型、IE标准模型display/positiondisplay确定元素的显示类型:block/inline/inline-blockposition确定元素的位置:static(默认)/relative/absolute/fixedstatic默认值,文档流relative相对位置,是相对于元素本身原来的位置,该值不会改变元素原来占用的空间absolute绝对位置,脱离文档流,不影响文档流的其他元素,相对于最近的relative或absolute元素fixed,脱离文档流,不影响文档流中的其他元素,相对于屏幕可视区域来固定层级使用z-index来设置层级(relative,absolute,fixed这三种可以设置z-index)默认后出现的元素在上层flexbox布局(现代化布局)基本知识是弹性盒子盒子本来就是并列的指定宽度即可(可使用flex:1与width:20px两种方式)兼容性问题:IE完全不支持flexfloat布局特性元素“浮动”脱离文档流,不脱离文本流对自身的影响形成“块(block)”(BFC)位置尽量靠上位置尽量靠左(右)对兄弟元素的影响上面贴非float元素,旁边贴float元素不影响其他块级元素的位置,影响其他块级元素的文本对父级元素的影响从布局上“消失”高度塌陷float三栏布局示例.left { float: left; width: 200px;}.right { float: right; width: 200px;}.middle { margin-left: 200px; margin-right: 200px;}/* 注意,这里应该将left与right元素放在上面,然后再放middle */inline-block布局特性像文本一样排列block元素没有清除浮动的问题需要处理间隙问题处理inline-block的间隙问题(就好比文字之间有间隙,inline-block同样有这个问题)父元素中将font-size设置为0;子元素中再将font-size设置回来(推荐使用这种方式)间隙是因为两个div尾部与头部之间的空间造成的,解决方式:<!-- 解决方式① --><div> <div>left</div><div> right</div></div><!-- 解决方式② --><div> <div>left</div><!-- --><div>right</div></div>响应式布局在不同设备上正常使用一般主要处理屏幕大小问题主要方法第一步在head中添加viewport的内容为width=device-width隐藏 + 折行 + 自适应空间rem / viewport / media query媒体查询中,范围大的放在上面面试题实现两栏/三栏布局的方法表格布局float + margin布局inline-block布局flexbox布局position:absolute/fixed有什么区别?前者相对最近的absolute后者相对于屏幕(viewport)display:inline-block的间隙原因:字符间隙处理:消灭字符或者消灭字符如何清除浮动?为什么需要清除:浮动的元素不会占据父元素的布局空间让盒子负责自己的布局overflow: hidden(auto)::after(clear:both)(或者使用单独一个元素)如何适配移动端的页面?添加viewportrem / viewport / media query设计上:隐藏 折行 自适应CSS(Cascading Style Sheet)效果box-shadow图片来源:慕课网默认为外阴影末尾添加inset表示外阴影阴影的形状与原来的图形一致作用营造层次感(立体感)充当没有宽度的边框实现特殊效果text-shadow作用:立体感 / 品质感text-shadow:Apx Bpx Cpx #000A-向右偏移;B-向下偏移;C-模糊border-radius作用:圆角矩形 / 圆形(50%) / 半圆 / 扇形有边框时,使用百分数更合理,使用像素时计算的是添加边框宽度后的半径border-radius: A B C D / E F G H:ABCD为水平方向的半径,EFGH为垂直方向的半径扇形示例.container { width: 100px; height: 100px; background: red; border-top-left-radius: 100px; border-top-right-radius: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0;}左上角水平方向10px,垂直方向20px:border-top-left-radius: 10px 20pxbackground作用:纹理 / 图案 / 渐变小技巧:雪碧图动画 / 背景图尺寸适应雪碧图动图将两个图标放在同一个图片中,利用:hover在鼠标飘过时改变background-position的值并添加过度background-repeat指定是否循环background-sizecover保持图片长宽比不变,覆盖整个容器,多余的部分不显示contain保持图片长宽比不变,显示整个图片,容易多余的部分变为空白clip-path对容器进行裁剪(常见几个图形 / 自定义路径)clip-path: inset(100px, 50px)裁剪成长100px宽50px的矩形 =clip-path不改变容器内的定位3D-transform属性有:translate / scale / skew / rotate9属性出现的顺序会影响效果面试题如何用一个div画XXX?box-shadow无限投影::before::after如何产生不占空间的边框box-shadowoutline如何实现圆形元素border-radius:50%如何实现IOS图标的圆角clip-path:(svg)如何实现半圆、扇形等图形border-radius组合 :有无边框 / 边框粗细 / 圆角半径如何实现背景图居中显示 / 不重复 / 改变大小background-positionbackground-repeatbackground-size(cover / contain)(如果是百分数,则其是相对于容器的大小)如何实现3D效果perspective:500pxtransform-style:preserve-3dtransform: translate / rotateCSS(Cascading Style Sheet)动画概述原理大脑暂存动画作用愉悦感 / 引起注意 / 反馈 / 掩饰transition补间动画位置-平移(left / right / margin / transform)方位-旋转(transform)大小-缩放(transform)透明度(opacity)其他-线性变换(transform)属性transition-delay:延迟多久才执行补间动画transition-timing-function:定义动画进度和时间的关系可在devtools/elements/animatiom查看动画可在https://www.w3cways.com/css3-...上定制动画keyframes关键帧动画相当于多个补间动画,与元素状态的变化无关,定义更加灵活属性名:animation具体属性名animation-direction定义方向animation-iteration-count定义动画循环次数animation-play-state设置动画状态(可结合JS来实现更加酷炫的应用)animation-fill-mode设置动画完成后的状态定义动画/* from/to可以使用百分数 */@keyframes animation-run{ from{ width:100px; } to{ width:800px }}逐帧动画特点:适用于无法补间计算的动画 / 资源较大使用animation- timing-function:steps(1)面试题CSS动画的语法参考以上笔记CSS动画的实现方式有几种transitionkeyframes(animation)过渡动画与关键帧动画的区别过渡动画需要有状态变化关键帧动画不需要状态变化关键帧动画能控制得更精细CSS动画的性能性能不坏部分情况下优于JS但JS可以做得更好部分高危属性性能较差,如bax-shadowCSS(Cascading Style Sheet)预处理器概述特点基于CSS的另一种语言可以通过工具将其编译成CSS添加了很多CSS不具备的特性,如变量等能提升CSS文件的组织目前主流:Less / Sass功能嵌套,反映层级和约束变量和计算,减少重复代码Extend和Mixin,代码片段循环,适用于复杂有规律的样式import,CSS文件模块化Sass嵌套后缀名为.scss。.outter { background: red; .inner{ background: green; }}Sass变量变量是可以计算的。/* 变量定义 */$fontSize: 20px;$bgColor: red;/* 变量使用 */.content { background: $bgColor; font-size: $fontsize;}Sass Mixin类似于JS的方法。$fontSize: 20px;/* Mixin 定义 */@mixin block($fontSize) { font-size: $fontSize; color: red;}/* Mixin 使用 */.content { @include block($fontSize); .inner { @include block($fontSize + 5px); }}Sass extend复用代码块$fontSize: 20px;@mixin block($fontSize) { font-size: $fontSize; color: red;}/* extend 定义 */.block { font-size: $fontSize; color: red;}/* extend 使用 */.content { @extend .block; background: green;}Sass loop循环/* 示例生成网格系统 *//* 循环 定义(利用mixin递归) */@mixin gen-col($n) { @if $n > 0 { @include gen-col($n - 1); .col-#{$n} { width: 1000px / 12 * $n; } }}/* 循环 使用 */@include gen-col(12);/* 循环 定义(利用for)并使用 */@for $i from 1 through 12 { .col-#{$i} { width: 1000px / 12 * $i; }}Sass import/* Sass中使用 @import 引入文件 *//* 不同文件的变量、mixin等在被import到同一个文件后可以跨文件调用 */@import "./a-scss"@import "./b-scss"CSS预处理器框架SASS - CompassLess - Lesshat / EST提供现成的mixin面试题预处理器的作用帮助开发者更好的组织CSS代码提高代码复用率提升可维护性预处理器的能力嵌套,反映层级和约束变量和计算,减少重复代码Extend和Mixin,代码片段循环,适用于复杂有规律的样式import,CSS文件模块化预处理器的优缺点优点:提高代码复用率和可维护性缺点:需要引入编译过程,有学习成本