CSS3

2022-12-17 0 852

CSS3

1.如是说

| prefix | browser | | :——: | :————: | | -webkit- | chrome,safari | | -moz- | mozila | | -ms- | IE | | -o- | opera |

预CPU pre-processor

less/sass :尔后的可移植性相对较低(即使早已透过sass校对后的.css标识符难以消亡)

cssNext应用程序:用以同时实现许多今后的国际标准的(未全然在数十家应用程序同时实现的)

后CPU post-processor

autoprefixer:补上CSS相容性标识符,因此尔后的可移植性高(即使撤除该应用程序后补上的标识符也跟著手动消亡)

post+应用程序(充分反映可扩展性,200数个)

postCss:用JS同时实现的CSS的抽象化的句法树(AST Abstract Syntax Tree),下面的预CPU和后CPU都是身居该句法树展开同时实现的,因此postCss既算不上是后CPU,也算不上是预CPU,须要相互配合应用程序展开采用同时实现。

2.示例类别(selector)

2.1. 亲密关系形示例(Relationship Selectors)

2.1.1 E + F(css2)

现阶段原素的下两个任一的兄妹原素结点

<style> /* E + F :现阶段原素的下两个任一的兄妹原素结点*/ div + p{ background-color: red; } </style> <div>div</div> <span class=“demo”>234</span> <p class=“demo”>1</p> <p>2</p> <p>2</p> <ul> <li> <p>4</p> </li> </ul>

div + p的意思是:找到div原素下的下两个兄妹原素结点,看看该原素结点是不是p,很明显不是,div的下两个兄妹原素结点是span,因此,想要匹配第两个p,下面的要改为span + p

2.1.2 E ~ F

现阶段原素的下所有任一的兄妹原素结点

<style> /* E ~ F :现阶段原素的所有任一的兄妹原素结点*/ div ~ p{ background-color: red; } </style> <div>div</div> <span class=“demo”>234</span> <p class=“demo”>1</p> <p>2</p> <p>2</p> <ul> <li> <p>4</p> </li> </ul>

div ~ p的意思是:找到div原素下的所有的兄妹原素结点p,只要存在兄妹原素结点p,就会被选中

2.1.3 E > F

只选择现阶段原素的直接后代(即子原素),而不选择其它后代的示例。

<style> /* E + F:现阶段原素下所有任一的子原素结点,不包括孙子结点*/ div > p{ background-color: red; } </style> <div> <p>222</p> <p>333<h6><p>hp2</p></h6></p> <h6><p>hp22</p></h6> </div> <span class=“demo”>234</span> <p class=“demo”>1</p> <p>2</p> <p>3</p>

下面的只有div下面的两个p被选中,不包括p里面的后代

2.2. 属性示例(Attribute Selectors)

2.2.1 E[attr~=”val”](css2)

选择属性的值是用空格分隔的数个单词,其中两个单词的值等于 val的E原素

<style> div[class~=“a”]{ background-color: green; } </style> <div class=“a “ >111</div> <div class=“a b”>222</div> <div class=“aa”>333</div>

下面的第一和第二个div被选中

2.2.2 E[attr|=”val”]

选择属性的值是用连字符”-“分隔的单词,并以 val 开头的E原素,主要用于 lang 属性,比如 “en”、”en-us”、”en-gb” 等

<style> div[class~=“a”]{ background-color: green; } </style> <div class=“a “ >111</div> <div class=“a-testb”>222</div> <div class=“b-test”>333</div>

下面的第二个div被选中

2.2.3 E[attr^=”val”]

选择属性的值以 val 开头的E原素,val 为完整的单词或单词的一部分

<style> div[class^=“a”]{ background-color: green; } </style> <div class=“a “ >111</div> <div class=“a-test”>222</div> <div class=“b-test”>333</div>

下面的第一和第二个div被选中

2.2.4 E[attr$=”val”]

选择属性的值以 val 结尾的E原素,val 为完整的单词或单词的一部分

<style> div[class$=“t”]{ background-color: green; } </style> <div class=“a “ >111</div> <div class=“a-test”>222</div> <div class=“b-test”>333</div>

下面的第二和第三个div被选中

2.2.5 E[attr*=”val”]

选择属性的值包含 val 子字符串的E原素

<style> div[class$=“-“]{ background-color: green; } </style> <div class=“a “ >111</div> <div class=“a-test”>222</div> <div class=“b-test”>333</div>

下面的第二和第三个div被选中

2.3. 伪原素示例(Pseude-Element-Selectors)

2.3.1 E::placeholder

只能改变input框placeholder提示文字的样式,相容性极差

<style> input::placeholder{ color: green; } </style> <input type=“text” placeholder=“请输入用户名”>

改变placeholder颜色为绿色

2.3.2 E::selection

改变字体选中后的样式,只能设置三个样式:color、background、text-shadow,相容性挺好

<style> div:nth-of-type(1)::selection{ color: #fff; background-color: yellow; } div:nth-of-type(2)::selection{ color: #fff; background-color: red; } </style> <div>小黄黄</div> <div>小红红</div>

2.4 伪类示例

被选择原素的一种状态

2.4.1 E:not(s)、E:root、E:target

E:not(s)

选择将某个原素排除在外

<style> div:not([class=“demo”]){ background-color: green; } </style> <div class=“demo”>demo1</div> <div class=“demo”>demo2</div> <div>demo3</div>

下面表示找出class不为demo的原素结点,第三个被选中

E:root

根示例,在HTML中根是HTML,在XML中根是note

:root{ background-color: green; } //在HTML中等价于 html{ background-color: green; }

E:target

被标记成锚点之后(localtion.hash = xxx),xxx为id

<style> :target { border: 2px solid #D4D4D4; background-color: #e5eecc; } </style> <h1>这是标题</h1> <p><a href=“#news1”>跳转至内容 1</a></p> <p><a href=“#news2”>跳转至内容 2</a></p> <p>请点击下面的链接,:target 示例会突出显示现阶段活动的 HTML 锚。</p> <p id=“news1”><b>内容 1…</b></p> <p id=“news2”><b>内容 2…</b></p> <p><b>注释:</b>Internet Explorer 8 以及更早的版本不支持 :target 示例。</p>

案例:点击不同的按钮切换不同的背景色

<style> :root, body{ margin: 0; height: 100%; } #red,#green,#gray{ height: 100%; } #red{ background-color: red; } #green{ background-color: green; } #gray{ background-color: gray; } div.button-wrapper{ position: absolute; width: 600px; height: 400px; top: 400px; } div.button-wrapper a{ text-decoration: none; color: #fff; background-color: pink; font-size: 30px; border-radius: 3px; margin: 0 10px; } div[id]:not(:target){ display: none; } </style> <div class=“button-wrapper”> <a href=“#red” class=“bgred”>red</a> <a href=“#green” class=“bggreen”>green</a> <a href=“#gray” class=“bggray”>gray</a> </div> <div id=“red”></div> <div id=“green”></div> <div id=“gray”></div>

div[id]:not(:target)表示找到所有div有id属性的原素并且不等于target的

2.4.2 first-child、last-child、only-child、nth-child、nth-last-child

个这几伪类示例都会考虑其他原素对它们的影响

first-child

示例匹配属于任意原素的第两个子原素的E原素,所谓影响,假设就是如果第两个位置上不是p原素,而是span原素,那么该p原素就不会被选中,即使第两个位置被span原素占了,因此这5个原素都不常用,

<style> p:first-child{ background-color: red; } </style> <body> <p>0</p> <div> <p>1</p> <p>2</p> <p>3</p> </div> <p>4</p> </body>

上面表示选择属于其父原素的首个子原素的每个

原素,并为其设置样式,下面的0和1都会被选中,0作为父原素body的第两个原素,1作为父原素div的第两个原素

last-child

示例匹配属于任意原素的最后一个子原素的E原素

<style> p:first-child{ background-color: red; } </style> <body> <p>0</p> <div> <p>1</p> <p>2</p> <p>3</p> </div> <p>4</p> </body>

下面表示选择属于其父原素的最后个子原素的每个

原素,并为其设置样式,下面的3和4都会被选中,3作为父原素body的第两个原素,4作为父原素div的第两个原素

only-child

示例匹配属于任意原素只有两个子原素的E原素

<style> span:first-child{ background-color: red; } div:first-child{ background-color: red; } </style> <body> <div> <span>1</span> <p>2</p> </div> </body>

下面表示选择属于其父原素的仅有的两个子原素(div),并为其设置样式,其中body下面的div会被选中,即使只有body下仅有两个原素div,而div下有两个原素。

nth-child(n)

匹配父原素中的第 n 个子原素,原素类别没有限制。n 可以是两个数字,一个关键字,或者两个公式。

<style> p:nth-child(2n){ background-color:red } </style> <body> <div> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> </div> </body>

下面的第二个(2)和第四个(4)会被选中

nth-last-child

逆匹配父原素中的第 n 个子原素,原素类别没有限制。n 可以是两个数字,两个关键字,或者两个公式。

<style> p:nth-last-child(1){ background-color: red; } </style> <body> <p>0</p> <div> <p>1</p> <p>2</p> <p>3</p> </div> <p>4</p> </body>

下面的几个伪类示例都会考虑其他原素对它们的影响,所谓影响,假设就是如果第两个位置上不是p原素,而是span原素,那么该p原素就不会被选中,即使第两个位置被span原素占了,因此下面这些原素都不常用,

2.4.3 first-of-type、last-of-type、:nth-of-type(n)、nth-last-of-type(n)

first-of-type

匹配原素其父级是特定类别的第两个子原素。

<style> p:first-of-type{ background-color: red; } </style> <body> <div> <span>0</span> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> </div> <p>7</p> <p>8</p> </body>

下面的1和7会被选中,因为对于body来说,第两个p类别的就是7,对于div来说,头两个p类别是1

last-of-type

匹配原素其父级是特定类别的第两个子原素。

<style> p:last-of-type{ background-color: red; } </style> <body> <div> <span>0</span> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> </div> <p>7</p> <p>8</p> </body>

下面的6和8会被选中,即使对于body来说,最后两个p类别的就是8,对于div来说,最后p类别是6

nth-of-type(n)

匹配同类别中的第n个同级兄妹原素。

<style> p:nth-of-type(1){ background-color: red; } </style> <body> <div> <span>0</span> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> </div> <p>7</p> <p>8</p> </body>

下面的1和7会被选中,即使对于body来说,第两个p类别的就是7,对于div来说,头两个p类别是1

nth-last-of-type(n)

匹配同类别中的倒数第n个同级兄妹原素。

<style> p:nth-last-of-type(1){ background-color: red; } </style> <body> <div> <span>0</span> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> <p>6</p> </div> <p>7</p> <p>8</p> </body>

下面的6和8会被选中,即使对于body来说,最后两个p类别的就是8,对于div来说,最后p类别是6

2.4.4 E:empty、checked、disabled、read-only、read-write

E:empty

看原素结点内部是否为空(没有其他结点),在这里注释结点被认为算不上结点,也是空

<style> div:empty{ border: 1px solid #000; height: 100px; } </style> <div><span>123</span></div> <div></div> <div>234</div> <div><!– –></div>

E:checked

匹配每个选中的输入原素(仅适用于单选按钮或复选框)。

<style> input:checked + span{ background-color: green; } input:checked + span::after{ content: “隔壁老王 电话xxx,请务必小心行事”; color: #fff; } </style> <label for=“”> 两个小惊喜 <input type=“checkbox”> <span></span> </label>

下面表示点击复选框时会弹出一段话

E:disabled

匹配每个禁用的的原素(主要用于表单原素)。

<style> input{ border:1px solid #999 } input:enabled{ backgroud-color:green } input:disabled{ border:1px solid #f20; backhround-color:#fcc; box-shadow: 1px 2px 3px #f20 } </style> <input type=“text”> <input type=“text” disable>

E:read-only

用于选取设置了 “readonly” 属性的原素。

<style> input:read-only{ color:red } </style> <input type=“text”> <input type=“text” readonly value=“逆只能瞅着,真干不了别的”>

E:read-write

用于匹配可读及可写的原素。

<style> input:read-write{ color:red } </style> <input type=“text” value=“你别瞅着,有种干点什么”> <input type=“text” readonly value=“逆只能瞅着,真干不了别的”>

同时实现手风琴和选项卡

3. Border&background

3.1. Border-radius

CSS3
CSS3
CSS3

通过下面的图片我们可以看出,随着圆的水平半径和垂直半径的增大,越来越接近我们定义的盒子的宽高度,当圆的水平半径和垂直半径等于盒子宽高度的一半时,此时该盒子正好容纳两个完整的圆,当圆的水平半径和垂直半径等于盒子宽高度时,此时盒子只能容纳1/4圆的圆

圆半径:盒子长度 = 1:4

<style> div{ width: 100px; height: 100px; background-color: pink; border-top-left-radius: 25px 25px; border: 3px solid #000; } </style> <div></div>

![css3 (14)](D:/Typora/typora-user-images/CSS3/css3 (14).png)

圆半径:盒子长度 = 1:2

<style> div{ width: 100px; height: 100px; background-color: pink; border-top-left-radius: 50px 50px; border: 3px solid #000; } </style> <div></div>

![css3 (15)](D:/Typora/typora-user-images/CSS3/css3 (15).png)

圆半径:盒子长度 = 1:1

<style> div{ width: 100px; height: 100px; background-color: pink; border-top-left-radius: 100px 100px; border: 3px solid #000; } </style> <div></div>
CSS3

同时实现两个半圆

<style> div{ width: 200px; height: 100px; background-color: pink; border-top-left-radius: 100px 100px; border-top-right-radius: 100px 100px; border: 3px solid #000; } </style> <div> </div>
CSS3

由于盒子宽度不能装下两个完整的半圆,因此须要扩大盒子的宽度。

总结

所谓圆角,就是切割盒子的四个角,每两个角对应圆的水平半径和垂直半径,4个角对应圆的4个水平半径和垂直半径,顺序是左上、右上、右下、左下

表示方法有:

​ 1. border-radius: 10px 20px 30px 40px / 10px 20px 30px 40px

border-top-left-radius:10px 10px

border-top-right-radius:20px 20px

border-bottom-right-radius:30px 30px

border-bottom-left-radius:40px 40px

![css3 (13)](D:/Typora/typora-user-images/CSS3/css3 (13).png)

border-radius:10px 20px 顺序表示是左上、右下 / 右上、左下

border-radius:10px 20px 30px 顺序表示是 左上 / 右上、左下/ 右下

3.2. Border-shadow

box-shadow:[阴影模式] 水平偏移量 垂直偏移量 模糊范围 传播距离 颜色

阴影模式:盒子阴影分为内阴影(inset)和 外阴影(outset),默认情况下是外阴影

水平偏移量:阴影往左或右偏移,正数往左,负数往右

垂直偏移量:阴影往上或下偏移,正数往下,负数往上

模糊范围(blur):高斯模糊,阴影的大小是基于原来边框的的位置向边框的两边同时去模糊

传播距离:表示在四个方向扩展阴影的距离

阴影可以同时设置数个,可以用(,)隔开

效果一:发光多彩盒子

![css (4)](D:/Typora/typora-user-images/CSS3/css (4).png)

<style> body{ background-color: #000; } div{ position: absolute; width: 200px; height: 200px; border: 1px solid #fff; top: calc(50% 50px); left: calc(50% 50px); box-shadow: inset 0px 0px 10px #fff, 0px -3px 10px #f0f, 3px 0px 10px #ff0, 0px 3px 10px #0ff, -3px 0px 10px #00f; } </style> <div></div>

效果二:阴影重叠之发光彩球

![css (3)](D:/Typora/typora-user-images/CSS3/css (3).png)

<style> body{ background-color: #000; } div{ position: absolute; width: 300px; height: 300px; top: calc(50% 150px); left: calc(50% 150px); border-radius: 50%; box-shadow: inset 0px 0px 50px #fff, inset 10px 0px 80px #f0f, inset -10px 0px 80px #0ff, inset 10px 0px 150px #f0f, inset -10px 0px 150px #0ff, 0px 0px 50px #fff, -10px 0px 80px #f0f, 10px 0px 80px #0ff; } </style> <div></div>

效果三:spread应用之小太阳

![css (2)](D:/Typora/typora-user-images/CSS3/css (2).png)

<style> body{ background-color: #000; } div{ position: absolute; width: 50px; height: 50px; left: calc(50% 25px); top: calc(50% 25px); border-radius: 50%; border: none; background-color: #fff; box-shadow: 0px 0px 100px 50px #fff, 0px 0px 250px 125px #ff0; } </style> <div></div>

效果四:鼠标hover盒子出现阴影和放大

<style> div{ position: absolute; width: 100px; height: 50px; top: calc(50% 25px); left: calc(50% 50px); background-color: #fff; box-shadow: 0px 1px 2px rgba(0,0,0,.1); transition: all .6s; } div::after{ content: “”; position: absolute; left: 0; top: 0; width: 100%; height: 100%; border-radius: 5px; box-shadow: 0px 5px 15px rgba(0,0,0,.3); opacity: 0; transition: all .6s; } div:hover{ transform: scale(1.25,1.25); } div:hover::after{ opacity: 1; } </style> <div></div>

总结:背影在文字的下面,在阴影的下面

​ 文字在一切的下面

3.3. Border-image

给border加上背景颜色

border-image-source:给背景添加资源,支持URL引入图片跟渐变色(linear-Gradient(颜色1,颜色2))默认由上往下填充

border-image-slice:有1到4值,分别是top,right,bottom,left,只能填数字或百分比,顺序是上右下左,不添值的话默认100%。最后还有两个fill值,填了fill最中间的就不会被忽略

情况一:图片为300 X 300; top、right、bottom、left 等于100

![css3 (2)](D:/Typora/typora-user-images/CSS3/css3 (2).png)

下面的最中间的9会被忽略掉,每个方向对应每个方块展开填充

1:top-left

2:top-right

3:bottom-right

4:bottom-left

5:top-left-right

6:top–right-bottom

7:right-bottom-left

8:top-bottom-left

9:top-right-bottom-left(该区域会被忽略)如果添加了fill该区域就不会被忽略

图片为300 X 300,默认情况:100% 100% 100% 100%

![css3 (3)](D:/Typora/typora-user-images/CSS3/css3 (3).png)

top-left:整个方块

top-right:整个方块

bottom-right:整个方块

bottom-left:整个方块

5:top-left-right:

6:top–right-bottom

7:right-bottom-left

8:top-bottom-left

border-image-outset:可以让背景图片往外衍生,超出定义的border值,不能为负值,没有效果border-image-width:设置border里面的图片的宽度占整个border宽度的多少,默认为1表示border里面图片的宽度与border的宽度比例为1:1,也可设置px值,如果填auto的话,默认会与slice看齐,如果slice为100,width就为100px,如果不加pxborder-image-repeat:解决5678区域宽度增大的时候这部分的图像如何填充的问题,默认值为stretch,可选值有【stretch|repeat|round|space】,可以同时填两个参数,表示水平的和垂直的stretch:将被分割的图像采用拉伸的方式来填充满边框图像区域repeat:将图片砍半在图像的左右填充round:先拉伸,等到宽度满足达到图像的1.5倍宽度时会复制两个平均放到右边,此时图像会有点压缩感,等到宽度达到图像的2倍时会是两个完整的图像space:不拉伸,拿空白补,等到宽度满足达到图像的2倍宽度时会复制两个平均放到右边

联合写法:border-image:source slice width outset repeat;

总结:slice不能写px的原因是在联合写法中易与width混淆,不易区分

3.4. background

background用于设置背景,有数个属性:

background-image

可以添加图片或渐变色作为背景颜色,该属性在CSS2中就存在,在CSS3中新增了可以同时添加多占图片(URL)作为背景图片,用逗号(,)隔开默认下前一张图片的Z-index值大于后面的,会覆盖后面的

应用场景一·:在网速不佳的时候展示占位图片,占位图片一般是像素很低的,等到高清图片加载完后再展示高清图片,前面一张的z-index值大于后面的图片,因此占位图片一般在后面

两个盒子展示两张图片

<style> div{ position: absolute; width: 300px; height: 300px; border: 1px solid #000; left: calc(50% 150px); top: calc(50% 150px); background-image: url(./images/pic2.jpeg),url(./images/pic7.jpeg); background-size: 150px 300px,150px 300px; background-repeat: no-repeat; background-position: 0 0 ,150px 0; } </style> <div></div>

![css3 (4)](D:/Typora/typora-user-images/CSS3/css3 (4).png)

background-repeat

设置图片难以填充盒子宽度时是否重复图片展示,有个可选值:repeat,no-repeat,repeat-x ,repeat-y,round,space默认repeat。round,space是CSS3新增的值,该属性可以同时添加两个CSS3值,两个代表水平方向的重复处理,两个代表垂直方向的重复处理,如果是CSS2值只能添加两个

repeat-x:仅在X轴方向重复平铺,Y轴留白repeat-y:仅在Y轴方向重复平铺,X轴留白repeat:repeat-x与repeat-y的结合,XY轴都重复平铺no-repeat:round:首先重复平铺图片,如果盒子宽度难以容纳一张新图片时,会拉图片,等到盒子宽度达到可以再容纳一张新图片时再把新图片补进来space:重新重复平铺图片,因此图片与图片之间有空隙,不会拉伸图片,等到各个图片间的水平(或垂直)空隙达到一张图片的宽度时再把新图片补进来

background-origin

设置图片展示的起始位置(左上),有3个可选值,content-box,padding-box,border-box,默认padding-box,但没有设置图片展示的结束位置(右下)

<style> div{ position: absolute; width: 200px; height: 200px; left: calc(50% 100px); top: calc(50% 100px); background-image: url(./images/pic4.jpeg); padding: 20px; border: 20px solid transparent; background-repeat: no-repeat; background-origin: padding-box; <!– 默认值 –> background-clip: border-box; <!– 默认值 –> } </style> <div></div>

![css3 (6)](D:/Typora/typora-user-images/CSS3/css3 (6).png)

![css3 (7)](D:/Typora/typora-user-images/CSS3/css3 (7).png)

background-position

设置图片的绝对位置,该属性相对于background-origin的值作为原点展开定位,换句话说origin直接决定了position从哪个地方开始定位,可选值有三种类别:百分比,px,还有center、left、right、top、bottom ,默认值0% 0% ,效果等同于left top

background-clip

设置图片展示的结束位置(右下),有4个可选值,content-box,padding-box,border-box,text,默认border-box,text 表示用文字内容区域 反切背景图片,就是文字颜色用背景填充,该值仅在-webkit-中好使,因此须要相互配合两个属性采用,该属性也是webkit的私有属性

![css3 (7)](D:/Typora/typora-user-images/CSS3/css3 (7).png)

-webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; text-fill-color:transparent;

文字遮罩效果

<style> .fontBg{ position: absolute; width: 400px; height: 200px; border: 1px solid #000; left: calc(50% 200px); top: calc(50% 100px); font-size: 80px; font-weight: 1000; text-align: center; line-height: 200px; -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; background-image: url(./images/pic2.jpeg); background-position: 10px 100px; transition: all .6s; } .fontBg:hover{ background-position: center center; } </style> <div class=“fontBg”>成哥很帅</div>

![css3 (5)](D:/Typora/typora-user-images/CSS3/css3 (5).png)

background-attachment

设置背景图像相对于容器(盒子)展开定位,不跟容器里的内容文字展开定位,有点类似于相对于视口展开fixed定位,默认值是:scroll

local:背景图片相对于内容区里的文字展开定位

fixed:背景图片相对于视口展开定位,但超出容器后部分依旧会消亡

“`html

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务