文章目录
selector
selector {property: value; property: value;}
- 注释仅支持/**/,以下仅为了方便
- 块级标签:
div, h1/hr, ul/ol/dl, p/pre, form, table, blockquote/marquee;
块级元素才有width/height
概念(若不指定宽高,则为父亲100%
)! - 优先级(多个选择器给元素设置属性): id选择器 > 类选择器(属性选择器,伪类选择器) > 标签选择器(伪元素选择器)
- 层叠性: 分别统计每个
selector
的上面三元组的个数,然后排序,排序高的使用;相同的,使用代码上后面一个
c1.c2 {} /* 同时含有c1与c2类!*/
/* h1 || h2的所有后代p || h3里面的所有1级p元素 || h4的第1个兄弟 || 含有id1属性及class=a属性的div */
h1, h2 p, h3>p, h4+p, div[class="a"][id1] {
color: red !important; /* important:打破优先级,若有其他设置与本条冲突,则优先使用;不会被继承! */
font-family:"consolas, sans serif";
}
#idname {} /* <p id="idname">..</p>; 与html一起工作时,大小写敏感! */
[attr] {} /* 带有attr属性的所有元素 */
[attr=value] {} /* 属性值='value' */
[attr~=value]{} /* 由空格分隔的多个属性至少匹配一个.类似于'*=' */
[attr|=value]{} /* 属性值以'value-'开头 */
[attr^=value]{} /* 属性值以'value'开头 */
[attr$="val"]{} /* 属性值以'val'结尾 */
[attr*=value]{} /* 属性值以包含'value'子串 */
/* functions */
:not(p) /* 不是p标签 */
a :link /* 链接访问之前; visited; hover; active(点击但不松手时) */
input :focus /* 获得焦点的input元素 */
div :only-child /* 仅有一个子元素的所有 */
div :empty /* tag里面不包含任何内容 */
div :target /* toc切换加外边框 */
div :enabled /* disabled/checked */
div ::selection
div li :nth-last-of-type /* 最后一个li元素 */
div#id1 :nth-child(2n) /* 所有偶数行,2n-1:奇数行; -n+5:前5个; 3n:3的倍数; 注意:名称有些误解,表示的是同级元素! */
div:nth-of-type(2) /* 第2个类型为div的元素 */
xx :nth-last-child(n) /* 倒数第几个. 单独写n表示每一个 */
xx :first-child/of-type
xx :last-child/of-type
p ::first-line/letter
.box :before {
content: "box多出来的内容,可以选择"
}
/* :visited(点击链接后)/:active(点击连接时)/:focus(通过键盘选择或已经被点击过都会获取焦点) */
.box :hover:after{
color: red; /* 要添加内容使用content:"这里面是伪元素,界面上选中不了的" */
}
demos
<head>
<!-- 会并行下载该文件,不会停止对DOM的解析 -->
<link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.min.css" />
</head>
{
// top right bottom(>0表元素或块的下边沿相对于position抬高多少) left
// 下面这个写法表示水平居中(auto表水平自动),注意此时该盒子必须具有width(否则独占整行); float的盒子该设置无法居中!
// 注意: 嵌套的div/p,若外层div无border,则内层的margin-top/bottom会转移给外层div使用,表现怪异! 故:--->
// margin本质上是描述兄弟之间的距离!父子之间的距离应该使用padding来描述!!!
margin: 0 auto; // 使块居中(上下+左右); top right bottom left,缺少一个则最后一个对称相补; 若仅提供一个值则其他值全部由top补齐.
// 解决办法: 父元素添加'overflow: hidden' 或 'position: absolute;' 或 给父元素添加有效的border/padding属性 或 子元素添加'float: left'
padding: 1em 2px;
min-width: 20px;
width: calc(100% - 2*2px); //
// 如果是一段文本,则表示这段文字里最长的单词; max-content:一直不换行!
// flex中,若元素总宽度超过了box宽度,则每个元素的宽度就是min-content
width: min-content;
// flex: css3标准,IE10仅部分支持! https://www.bilibili.com/video/BV1A44y1Z7Bp
// flex盒子是具有默认宽度的(当前viewport宽度),如果元素(默认每个都是min-content)总宽度超过了它,则元素不会换行,会冲破边界!
// flex盒子元素也可以强制指定width多宽!
// grow shrink basis; 默认值('0 1 auto' == initial, auto == 1 == '1 1 auto', none == '0 0 auto')
// grow: 如果box宽度大鱼items总和,则每一个item增加宽度x,满足: n*(flex-basis + flex-grow*x) = box-width; 一般配合nth-child()来单独控制该item是其宽度的几倍!
// basis: 默认auto(item的min-content宽度),可设置固定的item宽度
flex: 1; // == 1 1 auto
// 默认值; column:从上到下垂直排列; row-reverse:从右至左排列子元素
flex-direction: row;
// 将内联标签变为块级标签; inline:变为内联标签(不接受padding的设置,==span) inline-block:内敛但可设置margin,width这些属性 none:delete元素布局也没有了
display: block/flex;
// https://www.runoob.com/cssref/css3-pr-justify-content.html
// 主轴对齐方式; space-bewteen, space-evenly
justify-content: space-around;
// 纵轴对齐方式
// stretch:统一成最大哪个元素的高度,默认值
// flex-start: 交叉轴的起点对齐; flex-end; flex-center
// baseline: 每个item中第一行文字的基线对齐
align-items: baseline;
// https://www.freecodecamp.org/news/css-positioning-position-absolute-and-relative
// 相对/绝对/固定定位都可以使用z-index值!
// sticky: 只能在最近的具有'overflow:scroll'的父容器中使用:滚动条下滑动时,它也下滑.但滑到上方无空间时,就被顶(sticky)在了viewport.此时它不会挤占下方元素的空间,会漂浮在最顶层.
// fixed: 相对于浏览器窗口,亦不受滚动条影响(背景图用的比较多)!
// 参考点要参考已经定位的最近的祖先元素,无时html!
// 完全脱离了正常的文档流.它的坐标系参考html. 如果还是想已parent作为参考系呢? --> 把parent-position设为relative:(relative-absolute)!
// 注意: 与(static-relative:常用组合)的区别: 诞生点是否脱标:是否可以被别人占用!
// 注意: 绝对定位的儿子,无视参考的那个祖先盒子的padding,即还是以祖先的border作为参考点!
// absolute: 会跟随滚动条滚动. 它的位置会被正常的文档流挤走.
// static: 默认值!此时,left/right/top/bottom/clip无效(无坐标系)! 如果此时想微调下某个元素的位置,使用relative! relative是相对于父元素static而言的移动!
// relative: 长用来微调. 以其本身位置,其真实位置还在老家,只不过是影子过去了(定位未脱标:别人不会把它的位置挤走)!
position: relative;
right: 0; // 注意: 非0值必须加单位!
bottom: 0; // bottom定位时,参考点在首屏左下角.top(页面的左上角)
// ----------------- border
// 整个网页的最大盒子是<document>,<body>是<document>的儿子.<body>默认的margin大小是8px.
border: 1px solid red; height:80% // 如果上方有些'border-left'此处会覆盖掉它(一般都是写在大属性下方来覆盖)
border-radius: 8px 20px; // 左上角->右上->顺时针; 8px/6p:水平半径,垂直半径!
border-shadow: 0 1px 0 .., inset 0 1px 0 rgba(0,0,0,.3);
border-style: dotted; // none(default), dashed, solid, double, groove(浅槽), ridge(脊线), inset(凹陷), outset(凸起)
border-width: thin; // medium(default), thick, length
border-color: red;
border-top-width: 2px; // border-top-style, border-top-color, border-top; border-bottom..border-left..border-right
border-collapse: collapse; // 否则每一个table,th,td都有一个边框就有两个边框了
box-sizing: border-box; // padding+border的值不会影响元素的高度,相当于把他们都算在content. 默认是content-box;
// ----------------- text
// 文字的样式属性都具有继承性
color: gray; // CSS规范定义了17个颜色名
mix-blend-mode: difference; // 若背景时图片的话可能比较合适
text-align: justify; // 文本对齐方式, 两端对齐, left, right, center;也可居中img!
line-height: 1.2em; // normal(default), 一般用来居中(设置为height数值); 可作用于p. 行高/字号一般是偶数(保证能被2整除)
text-decoration: underline; // none(缺省值,也可用来去掉链接的下划线), overline, line-through
text-indent: 2em; // 具有继承属性
letter-spacing: normal;
word-spacing: 1cm;
text-transform: uppercase; // 所有文字转换为大写; lowercase,capitalize,none
text-shadow: 2px -2px 2px #ccc; // x-offset y-offset blur color
vertical-align: middle; // 行级元素(inline,inline-block,td)的垂直对齐方式
vertical-align: baseline;
// visiable(默认值,显示多余的内容,不剪切); auto(溢出时有滚动条); scroll:win始终显示滚动条,mac同auto;
// 如果div包裹了一个img,css限定div的width/height,则超出的部分默认会显示出来,好像被撑开了,此时可配合该属性!
overflow: hidden;
box-shadow: 2px 2px 2px 2px #666; // x-offset y-offset blur [spread] color
background: color url(image) pos-x pos-y repeat contain, blue ...
background-color: #99ff00; // default:transparent, blue, rgba(25%,35%,45%,.5)
background-image: url(../image/demo.jpg); // 必须使用url(),不能使用双引号!
background-image: linear-gradient(to right,red,blue) // CSS3; 默认不加方向是中心到四周; 0deg:↑ 90deg:→ 'at top':中心点在最上方中心
background-size: cover // 使img填满(保证长宽比,等比例放大,裁切),contain:全部显示,等比例缩小,其他地方留白; 8px 6px; 50%; 100% auto;
background-repeat: repeat-x; // repeat-y, no-repeat; 不指定时即默认(平铺满): repeat-x + repeat+y
background-position: 50% 50%; // center top; 以图片左上角为操作点!
background-attachment: fixed; // scroll(default:与滚动条一起滚动)
transition: bottom 2s linear 0s; // bottom位置变化的动画(或transform表变换下面的操作),线性2s,延迟0s; 后俩默认可省略!
transform: scale(x,y); // 仅写一个表等比列缩放; 并不会把兄弟元素挤走!
transform: rotate(45deg); // 顺时针
transform: translate(-50%,-50%); // 水平平移,垂直平移; 也有相应的3D版本!
transform-origin: center center; // 操作的中心点:left(0) center(50%:default) right(100%); top(0) center bottom
transform: rotateX(45deg); // 3d旋转,对着x轴箭头方向看,顺时针旋转; 注意:z轴箭头是朝向屏幕外的!
list-style-type: upper-roman; // none,disc,circle,square,decimal,decimal-leading-zero,lower-roman,upper-roman,lower-alpha,upper-alpha,lower-greek,upper-greek,hebrew...
list-style-image: url(img/2.gif); // 注意:url括号里面不加引号!
clip: rect(0,2em,6em,0); // 右下个裁剪2em,6em
visibility: visible; // hidden(仍然会影响元素的布局), collapse, inherit
z-index: 8; // 值越高离读者越近, auto(default)
content: ""; // 由css生成的html内容
cursor: pointer; // default,hand,move,help,text,wait,w-resize...
}
fonts
https://www.iconfont.cn/
http://www.zhaozi.cn/
https://github.com/zenozeng/fonts.css
https://github.com/wordshub/free-font
http://zenozeng.github.io/Free-Chinese-Fonts/
ttf
: True Type Font,raw格式. IE9,Firefox,Chrome,Safari,Operaotf
: Open Type Font,内置在ttf之上. Firefox,Chrome,Safari,Operawoff
: Web Open Font Format,压缩版本. IE9,Firefox,Chrome,Safari,Opera衬线体
: 宋体,楷体,TimesNewRoman
目前衬线体已经很少使用(纸质出版物),非衬线体更符合现代审美(现代设计师很少使用宋体)
https://zhuanlan.zhihu.com/p/139652407?utm_id=0
@font-face {
// 一般会先声明英文字体,中文字体靠后;字体名称是中文时也应该添加引号(单双引号都行)
// Mac/Win一般都会自带Tahoma(比后者清晰些)+Arial字体,而Mac的Helvetica更加好看,故放在开头!
// PingFang为Mac转为中文用户推出的字体,'Hiragino Sans GB'(冬青黑体)+'Heiti SC'也是为了照顾mac用户.
// Yahei一般Win自带. STXihei+SimHei为了照顾旧系统. 文泉驿微米黑为了照顾Linux用户
// sans-serif为最后兜底的无衬线字体!
font-family: Helvetica, Tahoma, Arial, "Microsoft Yahei", "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", STXihei, SimHei, "WenQuanYi Micro Hei", sans-serif;
src: url('font/webfont.eot'); /* IE9 */
src: url('font/webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('font/webfont.woff') format('woff'), /* chrome、firefox */
url('font/webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('font/webfont.svg#webfont') format('svg'); /* iOS 4.1- */
}
.webfont{ // webfont为自声明字体!
font-family: "webfont" !important;
font-size: 16px;font-style:normal;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;
}
font-family: Arial,'New York'; // 当Arial字体不存在的时候使用后面的
font-size: 20px; // 1em(==16px,default), 80%, larger, xx-larger(特大号)
font-weight: bold; // normal(400),bold(700),最细的是100,最粗的900. 注意:并不是所有字体都支持所有级别调节(如微软雅黑只支持400/700,Android类似)!
font-style: italic; // obolique(类似italic), normal(default)
font-variant: small-caps; // 小的大小字母(比正常的大写字母矮一些), normal(default)
font-stretch: wider; // default:normal, narrow..浏览器可能不支持
SASS
Syntactically Awesome Stylesheets
- 兼容css3, 变量,嵌套,混合,函数,控制指令
- 若仅需要导入scss文件,但又不希望将其编译为css.只需给文件命名为:
_name.scss
; 但导入时无需添加’_’!
相当于把一个sass文件分开了编写,那些倍分开的子部分使用@import
引入!
$version: "1.2.3";
// this comment will not appear in css output. '#':插值~宏替换,同时会去掉字符串两边的引号
/* this comment will appear in the css output, version: #{$version} */
#main {
// #{v}: 若v为null则会插入空串
$var: "1.2.#{1+2}" !global !default; // global修饰提升变量为全局作用域; default:若之前已经赋值过了则忽略该句!
&-sidebar { // #main-sidebar
a {
font: {
weight: bold; // <==> font-weight: bold;
family: sans- + "serif"; // sans-serif; "sans-"+serif:"sans-serif"
}
&:hover { // #main a:hover
text-decoration: none;
}
}
.error {
border: 1px #f00;
}
.serious-error { // 本特性仅仅是在error特性基础上添加了特性. 为了避免维护负担,此处使用继承!
@extend .error; // 可继承多个,后写的优先级高; 注意:被继承的只能是一个selector!
border-width: 3px;
}
}
}
// ~inline-block;浮动的元素相互依靠(块级元素不再独占一行,若未设置width则默认为内容宽度),如果用在非块级元素,也可增设宽高.
// 注意: 有高度的盒子才能关住它里面元素的浮动!否则应添加'clear: both;'
// 注意: 无高度的盒子是不能够被浮动的儿子撑出高度的.不过,给盒子增加'overflow: hidden;'打破前面的规则.被撑起来的box也自动具有block属性了!
// 现代css中已经很少使用
float: left;