首先在HTML体系结构里面,CSS样式的位置
1.写在<style>里面
<style>
p{
}
</style>
对于上面这种写法,这种样式表对所有的<p>组件都会生效。
2.除了把样式放在<style>里面之外,还可以选择把所有的样式都写在一个.css文件里面,使用<link>组件引用<link href="mycss.css"></link>
这就类似于微信小程序把css文件与xml文件分开了
3.还可以指定特定标签的样式,即把样式写在标签的style属性里面<p style="width:100px" ></p>
下面说说一些CSS的选择器:
1 .classname
.classname{
}
<p class="classname"></p>
组件里面的定义class,属性值为classname,那么只有类名为classname的组件才会生效
2.selector.class
div.main{
}
<div class="main"></div>
<p class="main"></p>
使用selector.class,只有特定的类名为class的selector才会生效,如上为<div>生效,<p>不生效
3.selector>selector
<div>
<p>I am feeling blue</p>
</div>
<section>
<p>I just want to be left alone!</p>
</section>
div > p {
color: blue;
}
从右往左读selector1>selector2,只有当selector2是selector1的直接子元素时,才会生效,如果非直接子元素,但是selector1是selector2的祖先,则这样写selector1 selector2
中间留空格
<div>
<div>
<div class="makeMeBlue">
<p>I am feeling blue</p>
</div>
</div>
<section class="makeMeBlue">
<p>I just want to be left alone!</p>
</section>
</div>
div p {
color: blue;
}
如上所示,所有的<p>都会变成蓝色
4.伪类selector:pseudo-class
常用伪类:
:hover
:link
:visited
:active
:nth-child(..)
link和visited是针对链接的,前者是链接尚未点击前的样式,后者是点击链接后的样式
hover是当用户鼠标悬停在上方时触发的样式
active是当用户按下鼠标但还未完全释放的样式,在本视频中不做区分。
a:link, a:visited {
text-decoration: none; //取消默认下划线
background-color: green;
border: 1px solid blue;
color: black;
display: block;
width: 200px;
text-align: center; //在水平方向居中
margin-bottom: 1px;
}
a:hover, a:active {
background-color: red;
color: purple;
}
nth-child()非常强大,可以指定特定的子元素的样式,具体使用方式如下,可以指定第三个子元素,odd:奇数个,或者第四个子元素,那么你所指定的子元素就会呈现你所期望的样式。
header li:nth-child(3) {
font-size: 24px;
}
section div:nth-child(odd) {
background-color: gray;
}
section div:nth-child(4):hover {
background-color: green;
4.Cascading Algorithms
1.Origin
在HTML结构中,执行样式是由上而下的,如果是对同一个tag声明的相同样式,比如color:red;
那么后声明的会覆盖先声明的
2.Merge
如果一个<p>的样式声明是
p{
color:red;
font-size:150%;
}
另一个<p>的声明是
p{
color:blue;
}
那么最后会融合不同的属性,比如最后<p>的效果是color:blue,font-size:150%
3.Inheritance
继承就是对于DOM来说,父亲设置的样式,其子类均会继承它,比如
body{
background-color:blue;
}
那么在<body>中的<p>,<div>等等,即使我没有特别地去设置它的样式,也会从<body>那里继承到background-color:blue
的特性
4.Specificity
Specificity是具体程度,越具体那么样式会越有优先权,如何评价具体,可以以评分的形式来判断
style:当你直接在标签类指定style,则得1000分,
id:当你给标签指定id,得100分,id的写法是id名前加#
如:
#myid{
color:red;
}
<p id="myid"></p>
类与伪类:当标签拥有类与伪类时,加10分
元素个数:当前样式表的元素个数,加相应个位上的分数
5.文本样式
.style {
- font-family: Arial, Helvetica, sans-serif;
字体类型,因为最后是在用户的计算机上显示,取决于该用户是否安装此类字体,因此可以添加多种字体保证能够正常显示 - color: #0000ff;
十六进制显示,前两位是红色,中间两位是绿色,最后两位是蓝色,ff代表最大值 - font-style: italic;
设置字体风格,斜体等等 - font-weight: bold;
字体粗细 - font-size: 24px;
字体大小 - text-transform: uppercase;
字体形式,
uppercase是英文字母全部大写,
capitalize是首字母大写,
lowercase英文字母全小写 - text-align: right;
文本位置,水平居中
}
相对大小单位:em
<style>
body {
font-size: 120%;
}
</style>
</head>
<body>
<div>Regular text</div>
<div style="font-size: 2em;">2em text
<div style="font-size: 2em;">4em text
<div style="font-size: .5em;">2em again!</div>
</div>
</div>
</body>
em相当于当前字体类型的倍数,2em即两倍,而且并非我们上面讲的覆盖特性Origin,em可以叠加,由于我设置body的字体大小是原字体(大多数浏览器默认字体大小为16px)大小的1.2倍,那么在第一个div的作用下,2em text会显示为2.4倍,而第二个div不会覆盖,反而会累加,4em text显示为4.8倍
6.The Box Modal
对于box模型,我们可以给他添加宽度,高度等等,一个box包含以下属性
一个比较重要的问题是,width的值其实是图中的Content部分,也就是说当你想要有一个width为300px的盒子,但是当你添加了margin,padding,border之后,他的大小会超过300px,为了解决这个问题,我们可以设置box-sizing:border-box
这样的话你的总的盒子大小就会是300px,而你再次调整margin,padding等值,只会压缩Content的空间
当然如果你想让Content的值就是300px,box被扩大无所谓,就设为box-sizing:content-box
我的建议是,你应该总是使用边框大小的盒子来作为你所设置盒子的真正大小
关于margin
margin是外边距,需要分两种情况:
- 当margin是左右作用时:
正如你所期望的,第一个盒子的margin设置为40px,第二个盒子的margin设置为50px,那么他们之间的距离将会变成90px - 当margin是上下作用时:
两个盒子之间的margin会被大的一方所覆盖。
星型选择器
正如我刚才所言,对于每个盒子,都应该设置为border-box,但是对于每一个标签,我都要去重复设置一次的话,非常麻烦,能不能利用我们所说的inheritance特性呢?我们在<body>中声明:
body{
box-sizing:border-box;
}
答案是无效,因为box-sizing是不能被继承的特性之一
为此,我们可以使用start selector,具体是:
* {
box-sizing:border-box;
}
start selector的效果是将所有的tag选择并赋值其中的样式,对于一些浏览器自带的样式,我们也可以用start selector覆盖。
盒子内容溢出
当我们没有限制盒子的高度时,无论里面包含多少内容,盒子都会自动适应将其包含在内,但是当我们既限制了宽度,又限制了高度的,而且内容又非常多的时候,就会发生盒子溢出
想要改变这种情况,对应的一个属性值是overflow,默认是visible,也就是上图
其他的值是
- hidden:直接剪掉超出盒子的部分
- scroll:设置可横向滑动和纵向滑动的滑条
- auto:设置纵向滑条
7.Background属性
background具有很多子属性,比如:
- background-color:背景颜色
- background-image:url("path") 背景图片
- background-repeat:图片是否重复,重复的方式
- background-position:背景图片的位置:上下左右
我们可以单一地去取某一项来使用,也可以合并着使用,比如
background-color:red;
background: url('yaakov.png') no-repeat top center blue;
全部写在background里面,位置不分先后,但是下面的background会覆盖上面的red,因为声明的先后原则
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。