CSS进阶
十小结
一.css目标选择器
(1)设置需要的div、p、ul、li
HTML:
<div> <p>Lorem ipsum dolor sit amet.p> <ul> <li>item 1li> <li> <p>Item 2p> li> <li>item 3li> ul> <p> Lorem ipsum dolor sit amet. p> div> <p>Lorem ipsum dolor sit amet.p>
设置背景颜色:
div>p { background: #ddd; }
效果图:
为什么item 2 并没有背景颜色?
原因:div>p
指的是所有父级元素为div的p标签,包裹item的p标签父级元素为li 所以它并没有被选择上 因此也就没有背景颜色
(2)HTML不变
增加新的CSS
div+p { background: #333; color: #FFF; }
效果图:
原因:div+p
指的是div和div后面紧跟着的p标签 表示的是div标签的下一个兄弟元素 并不是div和p标签
直接元素的后一个兄弟元素 (3)选择属性 在HTML页面增加三个a标签 前两个无需跳转 最后一个跳转百度<a href="#">第一页a> <a href="#">第二页a> <a href="http://baidu.com" target="_blank">百度a>
CSS:
/* 属性选择 */ a[target] { background: #ff0000; color: #FFF; }
效果图:
原因:a[target] 是通过选择a标签的一个属性来给设置样式
那如果 有重复属性的a标签呢
<a href="#">第一页a> <a href="#" target="_self">第二页a> <a href="http://baidu.com" target="_blank">百度a>
解决方法: 添加属性值
CSS:
/* 属性选择 */ a[target="_blank"] { background: #ff0000; color: #FFF; }
效果图:依旧只给第三个百度跳转页面添加了样式
input标签修改
HTML:
<form> <input type="text" placeholder="姓名"> <input type="email" placeholder="邮箱"> <input type="submit" placeholder="提交"> form>
CSS:
input[type="text"], input[type="email"] { width: 100%; margin-bottom: 5px; }
效果图:
二、nth.child伪类选择器
基础HTML:
<ul> <li>Item 1li> <li>Item 2li> <li>Item 3li> <li>Item 4li> <li>Item 5li> <li>Item 6li> <li>Item 7li> <li>Item 8li> <li>Item 9li> <li>Item 10li> <li>Item 11li> <li>Item 12li> <li>Item 13li> <li>Item 14li> <li>Item 15li> <li>Item 16li> <li>Item 17li> <li>Item 18li> <li>Item 19li> <li>Item 20li> ul>
CSS:
li { padding: 0.25rem; margin: 0.25rem; list-style: none; }
效果图:
first-child以及last-child的使用
1.first-child 只选择父元素的第一个子元素 CSS;li:first-child { background: #ff0000; }
效果图:
2.last-child 只选择父元素的最后一个子元素CSS:
li:last-child { background: #ff0000; }
效果图:
3.如果要选择第三个li标签:
CSS:
/* 选择第三个li */ li:nth-child(3) { background: #ff0000; }
需要用到:nth-child(需要设置样式的序号)
指定序号进行样式设置
如果:
4.nth-child(3n)的效果:
li:nth-child(3n) { background: orange; }
效果图:
变色的行数都是3的倍数
5.:nth-child(3n+7)
从7开始 三行一变色 CSS:li:nth-child(3n+7) { background: yellow; }
效果图:
6.奇数选择
CSS:
li:nth-child(odd) { background: blue; }
效果图:
7.偶数行变色
CSS
li:nth-child(even) { background: pink; }
效果图:
三、伪元素:after&before
当我们添加伪元素后并不会文档中生成
基础HTML:
<label for="name" class="is-required ">姓名label> <input type="text">
css样式:
.is-required:after { content: '*'; color: red; padding-left: 2px; }
用到的伪类 :after (单冒号)
效果图:
把:after改为:before
效果图:
before应用场景:图片覆盖:
基础HTML:
<header> <h1>欢迎来到秋裤在线h1> <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Enim, culpa?p> header> <section> <h3>Lorem, ipsum dolor.h3> <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Voluptatibus vel dignissimos sunt sapiente atque. Tempore quam harum sequi, nostrum maiores itaque quidem vero officiis ab, voluptates temporibus qui obcaecati. Atque. p> section>
基本CSS样式:
body { font-family: Arial, Helvetica, sans-serif; background-color: #333; color: #fff; margin: 0; } header { display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; height: 100vh; } header>h1 { font-size: 4rem; margin: 1rem; }
效果图:
:before最主要的
content: ; CSS:header { display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; height: 100vh; } header:before { content: ''; background: url('./img/111.jpg') no-repeat no-repeat center center/cover; opacity: 0.4; position: absolute; width: 100%; height: 100%; z-index: -1; }
效果图:
四、盒子阴影
基本HTML:
<div class="container"> <div class="box"> <h3>Headingh3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum, harum.p> div> <div class="box"> <h3>Headingh3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum, harum.p> div> <div class="box"> <h3>Headingh3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum, harum.p> div> div>
CSS:
外阴影:
水平方向 垂直方向 模糊半径 扩散半径 颜色 offset-x |offset-y | blur-radius spread-radius |color box-shadow: 3px 3px 10px 1px rgb(0, 0, 0, 0.6); 效果图:内阴影: 正负数值相反
水平方向 垂直方向 颜色 内阴影 offset-x/offset-y/ color/inset box-shadow: 10px 10px teal inset: 效果图:双重阴影:
box-shadow: 3px 3px 10px blue, -3px -3px 10px greenyellow;五、文字阴影:
基本HTML:
<h1 class="a">欢迎来到秋裤在线h1> <h1 class="b">欢迎来到秋裤在线h1> <h1 class="c">欢迎来到秋裤在线h1> <h1 class="d">欢迎来到秋裤在线h1>1.水平方向 垂直方向 颜色 h-shadow |v-shadow | color;
text-shadow: 0.2rem 0.2rem steelblue;
效果图:
2.水平方向 垂直方向 模糊半径 颜色 h-shadow|v-shadow | blur| color; text-shadow: 0.4rem 0.4rem 0.7rem olivedrab;
效果图:
3.白色字体:
CSS:
h1.c { /* white text */ color: #fff; text-shadow: 0.2rem 0.2rem 1rem tomato; }
效果图:
4.负值
text-shadow: -0.4rem -0.3rem 0.7rem olivedrab;
效果图:
六、CSS变量自定义属性
HTML:
<header> <h1>欢迎来到秋裤在线h1> header> <div class="container"> <div class="box box-1"> <h3>标题h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Inventore nesciunt quo libero possimus aperiam repellat.p> div> <div class="box box-2"> <h3>标题h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Inventore nesciunt quo libero possimus aperiam repellat.p> div> div>
CSS:
:root { /* 定义方法实例 */ --primary-color: #333; --light-color: #ccc; --secondary-color: #f4f4f4; --max-width: 768px; --box-1-width: 3; --box-2-width: 2; } * { padding: 0; margin: 0; } header { background-color: var(--primary-color); color: #fff; border-bottom: 5px var(--secondary-color) solid; text-align: center; } body { font-family: Arial, Helvetica, sans-serif; line-height: 1.4; background: var(--light-color); } .container { display: flex; margin: 0 auto; width: var(--max-width); } .box { background-color: var(--primary-color); border-bottom: 5px var(--secondary-color) solid; color: #fff; padding: 1rem; margin: 1rem; } .box-1 { flex: var(--box-1-width); } .box-2 { flex: var(--box-2-width); }
效果图:
最重要的是: :root
七:css动画01
HTML:
<div class="box">div>
CSS:
body { background: #333; } .box { background: white; height: 200px; width: 200px; position: relative; /* animation-name: animate1; */ /* 动画时间 */ /* animation-duration: 2s; */ /* 动画次数 */ /* 循环 */ /* animation-iteration-count: infinite; */ /* animation-iteration-count: 1; */ /* 在播放完或播放后的动画效果是否可见 */ /* 在播放完停留 展示最终效果 */ /* animation-fill-mode: forwards; */ /* 动画的延迟时间 */ /* animation-delay: 1s; */ /* 奇数次正向播放 偶数次反向播放 */ /* animation-direction: alternate; */ /* 动画反向播放 */ /* animation-direction: reverse; */ /* 结合 */ /* 奇数次反向播放 偶数次正向播放 */ /* animation-direction: alternate-reverse; */ /* 速度曲线 */ /* 先慢后快 */ /* animation-timing-function: ease; */ /* 缓慢开始 */ /* animation-timing-function: ease-in; */ /* 缓慢结束 */ /* animation-timing-function: ease-out; */ /* 结合 缓慢开始缓慢结束 */ /* animation-timing-function: ease-in-out; */ animation: animate1 2s infinite forwards alternate-reverse ease-in-out; } @keyframes animate1 { form { width: 200px; top: 0; } to { width: 600px; background: red; top: 300px; } }
八:CSS动画02
HTML:
<div class="box">div>
CSS:
body { background: #333; } .box { background: #fff; width: 200px; height: 200px; position: relative; top: 0; left: 0; animation: animate1 5s forwards ease-in-out; } @keyframes animate1 { 25% { top: 0; left: 300px; background: red; border-radius: 50% 0 0 0; } 50% { top: 300px; left: 300px; background: blue; border-radius: 50% 50% 0 0; } 75% { top: 300px; left: 0; background: green; border-radius: 50% 50% 50% 0; } 100% { top: 0; left: 0; background: white; border-radius: 50%; } }
九:过渡
HTML:
<div class="box">div>
CSS:
body { background: #333; display: flex; justify-content: center; align-items: center; height: 100vh; } .box { background: white; width: 100px; height: 100px; /* transition-property: background; */ /* 过渡周期 */ /* transition-duration: 1.5s; */ /* 过渡延迟 */ /* transition-delay: 1s; */ /* 时间曲线 */ /* transition-timing-function: ease-in-out; */ /* all代替所有属性 */ transition: all 2s ease-in-out; } .box:hover { background: red; border-radius: 50%; height: 300px; width: 300px; }
十:旋转平移
HTML:
<div class="box">div>
body { background: #333; display: flex; justify-content: center; align-items: center; height: 100vh; } .box { background: white; width: 300px; height: 300px; /* 旋转 25° */ /* transform: rotate(25deg); */ /* 扭曲 */ /* transform: skew(25deg); */ /* 放大两倍 */ /* transform: scale(2); */ transition: all 1s ease-in-out; } .box:hover { transform: rotate(25deg); transform: skew(25deg); transform: scale(2); /* 平移 */ /* 正数向下 负数向上 */ transform: translateY(100px); /* 正数向右 负数向左 */ transform: translateX(100px); /* 斜着平移 */ /* 正数右下 负数左上 */ transform: translate(100px, 100px); /* 3D */ transform: translate3d(100px, 100px, 100px) }