css--------面经

本文详细介绍了CSS选择器的种类,包括基本选择器、层次选择器、结构伪类选择器、属性选择器以及锚伪类,并提供了实例说明。此外,还阐述了CSS样式覆盖的四大规则,解释了如何解决样式冲突。最后提到了CSS中的图标字体引入和元素水平垂直居中的实现方法。
摘要由CSDN通过智能技术生成

1.css选择器

在这里插入图片描述

1.1 基本选择器(重要)

优先级:ID选择器 > 类选择器 > 标签(元素)选择器。
标签(元素)选择器:选择某一个或者某一类元素。
ID选择器 :id不能重复,全局唯一。
类选择器:可以跨标签,类相同,可以复用。

在这里插入图片描述

	// 群组选择器
        h1, #class, .id {
            color: orange;
        }

1.2 层次选择器

在这里插入图片描述
后代选择器

<!-- 后代选择器 选择的是ul所包围的所有元素  -->
    ul li {
        color: red;
    }

子代选择器

 <!--  子选择器 选择的是ul的亲儿子(li)  -->
    ul>li {
        color: red;
    }

相邻兄弟选择器

  <!--相邻兄弟选择器 选择的是ul的下一个同级元素li-->
    ul + li {
        color: red;
    }

通用选择器

    <!--通用选择器 选择的是ul的后面的所有同级li元素-->
ul ~ li {
        color: red;
    }
1.3 结构伪类选择器

在这里插入图片描述
奇数偶数节点选择

element:nth-child(odd){

} //奇数行

element:nth-child(even){

} //偶数行

element:nth-child(2n+1){

} //奇数行

element:nth-child(2n){

} //偶数行

1.4 属性选择器(重要)

在这里插入图片描述
选中包含id属性的a元素

   a[id] {
        background-color: #fff;
    }

选中id为AAA属性的a元素

a[id="AAA"] {
        background-color: #fff;
    }

选中href属性可以包含www.baidu的a元素

 a[href~="www.baidu"] {
        background-color: orange;
    }

选中href属性以world单词开头的a元素,且必须为单词

a[href|="world"] {
        background-color: orange;
    }

选中href属性以https开头的a元素

a[href^="https"] {
        background-color: orange;
    }

选中href属性以.com结尾的a元素

  a[href$=".com"] {
        background-color: orange;
    }

选中href属性包含baidu的a元素

 a[href*="baidu"] {
        background-color: orange;
    }

1.5 补充anchor伪类:

a:link {color:#FF0000;} /* 未访问的链接 */
a:visited {color:#00FF00;} /* 已访问的链接 */
a:hover {color:#FF00FF;} /* 鼠标划过链接 */
a:active {color:#0000FF;} /* 已选中的链接 */

2.css 样式覆盖规则

1.规则一:由于继承而发生样式冲突时,最近祖先获胜。
2.规则二:继承的样式和直接指定的样式冲突时,直接指定的样式获胜。
3.规则三:直接指定的样式发生冲突时,样式权值高者获胜。
4.规则四:样式权值相同时,后者获胜。

CSS的全称叫做“层叠样式表”,其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值,这个过程就叫“层叠”。样式覆盖(这种叫法更大众化些)遵循一定的规则,之前我对这个规则一直似懂非懂的,直到这几天看了”CSS: The Missing Manual”,才豁然开朗。

规则一:由于继承而发生样式冲突时,最近祖先获胜。

CSS的继承机制使得元素可以从包含它的祖先元素中继承样式,考虑下面这种情况:

  <html>
 	<head>
       <title>rule 1</title>
       <style>
       		body {color:black;}
       		p {color:blue;}
       </style>
     </head>
     <body>
        <p>
      		welcome to 
      		<strong>gaodayue的网络日志</strong>
        </p>
      </body>
  </html>       

strong分别从body和p中继承了color属性,但是由于p在继承树上离strong更近,因此strong中的文字最终继承p的蓝色。
规则二:继承的样式和直接指定的样式冲突时,直接指定的样式获胜。
在上面的例子中,假如还指定了strong元素的样式,如:

strong {
        color :red;
        }

那么根据规则二,strong中的文字最终显示为红色。

规则三:直接指定的样式发生冲突时,样式权值高者获胜。

样式的权值取决于样式的选择器,权值定义如下表。

CSS选择器权值
标签选择器1
类选择器10
ID选择器100
内联样式1000
伪元素(:first-child等)1
伪类(:link等)10

可以看到,内联样式的权值>>ID选择器>>类选择器>>标签选择器,除此以外,后代选择器的权值为每项权值之和,比如”#nav .current a”的权值为100 + 10 + 1 = 111。

规则四:样式权值相同时,后者获胜。
考虑下面这种情况:

<html>
 	<head>
       <title>rule 1</title>
       <style>
       		.byline a {
       				 color: red;
       				 }
       		 p .email {
        			color:blue;
        			}
       </style>
     </head>
      <body>
        	<p class="byline">
        		Written by 
        		<a class="email"  
        			href="mailto:jean@cosmofarmer.com">
        			Jean Graine de Pomme
        		</a>
        	</p>
       </body>
  </html>  

“.byline a”与”p .email”都直接指定了上面的a元素,且权值都为11,根据规则四,最终显示蓝色。

由于样式表可以是外部的,也可以是内部的,规则四提醒我们要注意外部样式表引入的顺序(及<link>元素的顺序),以及外部样式表与内部样式表的出现位置。一般来说,内部样式表出现在所有外部样式表的引入之后,一般是在</head>之前。

规则五:!important的样式属性不被覆盖。

!important可以看做是万不得已的时候,打破上述四个规则的”金手指”。如果你一定要采用某个样式属性,而不让它被覆盖的,可以在属性值后加上!important,以规则四的例子为例,”.byline a {color:red !important;}”可以强行使链接显示红色。大多数情况下都可以通过其他方式来控制样式的覆盖,不能滥用!important

3. iconfont怎么引入?雪碧图了解过吗?

iconfont怎么引入

雪碧图:

显示雪碧图的条件:

1)需要一个设置好宽和高的容器

2)需要设置background-position的值(默认为(0,0),也就是图片的左上角),即移动图片到自己想要的图标位置。

调试方法:可以用浏览器自带的调试工具进行调试(如chrome浏览器按f12即可进行调试,慢慢移动background-position的值来达到理想的效果)

4. 元素的水平垂直居中

水平居中
1.行内元素
首先看它的父元素是不是块级元素,如果是,则直接给父元素设置 text-align: center;

<style>
    #father {
        width: 500px;
        height: 300px;
        background-color: skyblue;
        text-align: center;
       }
</style>
 
<div id="father">
    <span id="son">我是行内元素</span>
</div>

如果不是,则先将其父元素设置为块级元素,再给父元素设置 text-align: center;

<style>
    #father {
        display: block;
        width: 500px;
        height: 300px;
        background-color: skyblue;
        text-align: center;
       }
</style>
 
<span id="father">
    <span id="son">我是行内元素</span>
</span>

块级元素

方案一:(分宽度定不定两种情况)

定宽度:需要谁居中,给其设置 margin: 0 auto; (作用:使盒子自己居中)

<style>
    #father {
        width: 500px;
        height: 300px;
        background-color: skyblue;
    }
 
    #son {
        width: 100px;
        height: 100px;
        background-color: green;
        margin: 0 auto;
    }
</style>
 
<div id="father">
    <div id="son">我是块级元素</div>
</div>

不定宽度: 默认子元素的宽度和父元素一样,这时需要设置子元素为display: inline-block;display: inline;即将其转换成行内块级/行内元素,给父元素设置 text-align: center;

<style>
    #father {
        width: 500px;
        height: 300px;
        background-color: skyblue;
        text-align: center;
    }
 
    #son {
        background-color: green;
        display: inline;
    }
</style>
 
<div id="father">
    <div id="son">我是块级元素</div>
</div>

方案二:使用定位属性

首先设置父元素为相对定位,再设置子元素为绝对定位,设置子元素的left:50%,即让子元素的左上角水平居中;

定宽度:设置绝对子元素的 margin-left: -元素宽度的一半px; 或者设置transform: translateX(-50%);

<style>
    #father {
        width: 500px;
        height: 300px;
        background-color: skyblue;
        position: relative;
}
 
    #son {
        width: 100px;
        height: 100px;
        background-color: green;
        position: absolute;
        left: 50%;
        margin-left: -50px;
}
</style>
 
<div id="father">
    <div id="son">我是块级元素</div>
</div>

不定宽度:利用css3新增属性transform: translateX(-50%);

<style>
    #father {
        width: 500px;
        height: 300px;
        background-color: skyblue;
        position: relative;
}
 
    #son {
        height: 100px;
        background-color: green;
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
}
</style>
 
<div id="father">
    <div id="son">我是块级元素</div>
</div>

5. margin重叠的原因及解决办法

margin重叠是因为同一个bfc(块级格式化上下文)中的margin会重叠,bfc是单独的一个容器。

2.创建bfc的方法:
float的值不为none
position的值为absolute,fixed
display(inline-block,table-cell,table-caption,flex,inline-flex)
overflow的值不为visible

结论:防止margin重叠有两个方法

  • 不毗邻(用border分开)
  • 创建bfc

6. 事件委托

事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

原理

  • 事件的冒泡;通过父元素监听子元素触发的事件。
  • DOM的遍历:父元素拥有多个子元素,当一个事件触发,那么就触发了某一类型的元素(拥有相同CLASS)

事件流的全过程,从图中我们可以看出:
在这里插入图片描述
一个完整的事件流是从window开始,最后回到window的一个过程
事件流被分为3个阶段:1-5捕获阶段,5-6:目标阶段,6-10:冒泡阶段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值