结构伪类

顾名思义,结构伪类是指根据元素位置获取元素
这里我们重点要掌握的就是:分组结构伪类,它用于选择子元素,所以它有一个查询起点
我们以一个无序列表为例,来看一下分组结构伪类的具体用法。

  1. <ul class="list">
  2. <li class="first">item1</li>
  3. <li>item2</li>
  4. <li>item3</li>
  5. <li>item4</li>
  6. <li>item5</li>
  7. <li>item6</li>
  8. <li>item7</li>
  9. <li>item8</li>
  10. </ul>

首先这样一个列表,我们想获取他的第一个元素,可以有以下几种方式

  1. .list.first {}
  2. .list > li:nth-of-type(1) {}
  3. .list :first-of-type {}

举一反三,获取最后一个元素也有相似的语法:

  1. .list > li:nth-of-type(8) {};
  2. .list :last-of-type {};

那么获取任意一个元素就是:.list >li:nth-of-type(n),还有一种写法,倒序查找:.list >li:nth-last-of-type(8-n)相当于倒数第几个;

实际上,结构选择器是一个nth-of-type(an+b)的函数,那么函数的各个参数有什么含义呢

a:系数(0,1,2……)
n:(0,1,2……)
b:偏移量,从0开始
括号里的数遵循一个原则:计算出来的数必须是有效的,从1开始,也就是括号里最小是1;

选择元素只有两种情况:选择一个、选择一组;
例如我们选择第三个元素,正常的写法是系数=0,偏移量=3:nth-of-type(0n+3)即nth-of-type(3);
那我们要选择一组的时候,比如选择第四个以后的元素,系数=1偏移量=4:nth-of-type(1n+4)即nth-of-type(n+4);
实际来运算一遍上面的过程,n从0开始,n+3匹配的全过程为:
n=0时,n+4=0+4=4 选中第4个
n=1时,n+4=1+4=5 选中第5个
n=2时,n+4=2+4=6 选中第6个
n=3时,n+4=3+4=7 选中第7个
n=4时,n+4=4+4=8 选中第8个
n=5时,n+4=5+4=9 索引越界,匹配失败,计算结束
n+4 => [4,5,6,7,8] 匹配到从第4个开始到结束的5个元素

nth-of-type(-n+3):从第三个开始匹配向前取,展开运算过程来看以下:
n=0时 -0+3=3 匹配第3个
n=1时 -1+3=2 匹配第2个
n=2时 -2+3=1 匹配第1个
n=3时 -3+3=0 匹配失败,计算结束
-n+3 => [3,2,1] 返回前三个

同理,匹配后三个的写法是:nth-last-of-type(-n+3)

若系数a=2时,即nth-of-type(2n+b)会出现什么神奇结果呢?

  1. .list > :nth-of-type(2n) {
  2. background-color: lightgreen;
  3. }


是的,2n会匹配偶数行

  1. .list > :nth-of-type(2n + 1) {
  2. background-color: rgb(224, 60, 101);
  3. }


2n+1匹配奇数行
因为奇偶行经常用,所以可以简写为:
奇数行:nth-of-type(odd)
偶数行:nth-of-type(even)

状态伪类

状态伪类,即根据状态来获取元素

表单伪类就是很典型的状态伪类

写一个简单的表单

  1. <input type="text" />
  2. <input type="text" disabled />
  3. <input type="radio" name="sex" id="m" value="0" />
  4. <label for="m"></label>
  5. <input type="radio" name="sex" id="f" value="1" />
  6. <label for="f"></label>
  7. <p>
  8. <button>提交</button>
  9. </p>

我们现在给所有disabled的表单添加一个样式

  1. input:disabled {
  2. background-color: yellow;
  3. }

然后我们给所有未禁用的表单一个背景色

  1. input:enabled {
  2. background-color: yellowgreen;
  3. }

我们给这个单选按钮加上一个点击后选项变为红色的效果:

  1. input:checked + label {
  2. color: red;
  3. }

给按钮一个悬停变色的样式,鼠标移动到按钮上,按钮就变色并变成小手的样子:

  1. button:hover {
  2. background-color: coral;
  3. cursor: pointer;
  4. }

上图中可编辑的文本框底色是黄绿色的,我们加个状态样式为光标选中文本框时,底色变为白色:

  1. input:focus {
  2. background-color: #fff;
  3. }


以上只是一部分状态伪类的展示,以后用到了再整理

盒模型

盒模型也就是我们常用的div,他有5个常用属性:width宽,height高,border边框,padding内边距,margin外边距;
我们来写一个简单的div,然后用浏览器直观的看一下这些属性

  1. <div class="box">这是一个盒子</div>
  2. <style>
  3. .box {
  4. box-sizing: border-box; /*锁定边框,使内边距和边框都包含在框内*/
  5. width: 200px;
  6. height: 200px;
  7. padding: 10px; /*内边距,呼吸区*/
  8. margin: 10px; /*外边距,与别的盒子之间的距离*/
  9. border: 6px solid #abc; /*边框,有大小,样式,颜色三个属性,样式和颜色不设置时默认为透明的*/
  10. background-color: aquamarine;
  11. background-clip: content-box; /*背景被裁减的区域,border-box是裁剪到边框,padding-box是裁剪到内边框,content-box是裁剪到内容区域*/
  12. }
  13. </style>

padding、margin内外边距的设置有多种方式,当它有4个参数的时候,就是代表上右下左的各个边的边距,3个参数时就是上(左右)下的边距,2个参数就是(上下),(左右)的边距,1个参数就是表示四条边统一的边距;

  1. <div class="box">这是一个盒子</div>
  2. <style>
  3. .box {
  4. box-sizing: border-box;
  5. padding: 10px 20px 30px 40px; /*内边距上10px,右20px,下30px,左40px*/
  6. background-color: aquamarine;
  7. background-clip: content-box;
  8. }

项目实际应用中,样式重置的简化通用方案为:

  1. * {
  2. padding: 0;
  3. margin: 0;
  4. box-sizing: border-box;
  5. }

常用单位

开发中我们常用到的单位有哪些呢?
绝对单位:px(1in = 96px);
px像素是一个绝对单位,他不会随着浏览器的缩放来扩大缩小字体,所以用px去修饰的页面在缩放时会出现布局错乱,这时就提出了相对长度单位;

相对单位:em,rem,vh,vw;
em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

特点:

1.em的值并不是固定的;

2.em会继承父级元素的字体大小。

注意:任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

所以我们在写CSS的时候,需要注意两点:

  1. body选择器中声明Font-size=62.5%;

  2. 将你的原来的px数值除以10,然后换上em作为单位;

  3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。

也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。

rem是css3新增的一个相对单位,root em根em;

rem与em的区别:

区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。
所以,在实际项目应用中,我们极少数使用px或者基本不再使用,而更多是使用em和rem。
vh 可视窗口高度百比;
vw 可视窗口宽度百比;
通常响应式布局中vh和vm可以很方便的自适应窗口的大小,使用方法和正常单位一样,如下:

  1. .box {
  2. width: 100vw;
  3. height: 100vh;
  4. }

意思就是设置宽高为可视窗口的100%;

引入外部图标

学完了以上布局的一些小知识点之后,我们再来看一些常用的图标引入。
首先我们要引入的图标的网站是:https://iconfont.cn/

第一步:选择我们喜欢的图标加入购物车,然后添加到项目中,然后下载到本地,解压缩,把解压后的文件夹放到项目中要使用的位置。


第二步:打开字体文件夹中自带的demo_index.html文件,浏览器中可以看到3中引用方式,我们使用最直观的Font class 字体类名引用的方式来引入字体图标。

第三步:在你需要字体图标页面引入字体图标的css文件

  1. <link rel="stylesheet" href="./font_icon/iconfont.css" />

第四步:选择你要使用的图标的class引入

<span class="iconfont icon-xxx"></span>

  1. <span class="iconfont icon-02_huaban1_huaban1"></span>
  2. <p>
  3. <span class="iconfont icon-181_huaban1"></span>
  4. </p>


就是这么简单明了!用起来!!!

更多相关文章

  1. Android应用开发之RelativeLayout (相对布局)+梅花效果案例
  2. AsyncTask实例代码演示Android异步任务
  3. 面试题
  4. Android布局文件的属性值解析
  5. 系出名门Android(2) - 布局(Layout)和菜单(Menu)
  6. 浅谈Android五大布局
  7. gravity和android:layout_gravity区别
  8. Android菜单详解(三)——SubMenu和IconMenu
  9. 浅谈Android五大布局

随机推荐

  1. android图片闪烁或帧动画
  2. Mac下完全卸载干净Android Studio
  3. msm8916 lcd 相关调试点指导
  4. android studio 调试android源码
  5. Android编程权威指南(第二版)— 第10章挑战
  6. 【Android】TV端项目开发挖坑总结
  7. Android的关键的持久数据应该在onPause()
  8. 在学习android + opencv遇到的各种问题
  9. Android加速度传感器实现“摇一摇”,带手
  10. Android软键盘弹出遮挡EidtText的解决方