每次写前端都是一个痛苦的过程,总是静不下来,彻底的研究下前端的技术,导致每次套页面都是直接采用一些封装好的控件,而有时对这些样式不满意时,又得百度一下该怎么用,低效且不愉快,强制自己好好的学习下基本功
<!-- more -->
主要有下面三个使用姿势,其中优先级为 c > b > a
<!-- 方式 a -->
<link rel="stylesheet" type="text/css" href="mystyle.css">
<!-- 方式 b -->
<style>
p {
color: red
}
</style>
<!-- 方式 c -->
<div style="color:red; font-size:12pt">dd</div>
对于标签的样式定义,特别是在引入css文件时,发现一个标签可能多重命中方式,有通过id进行设置的,有class设置的,也有标签设置的,他们之间的优先级是:
1. 内联样式表的权值最高 1000;
2. ID 选择器的权值为 100
3. Class 类选择器的权值为 10
4. HTML 标签选择器的权值为 1
在实际的使用中,经常出现的定义class, 根据id或者直接对标签,来指定css属性
<style>
<!-- 直接通过标签名 + {} 方式来确定标签对应的属性 -->
p {
background-color: yellow;
}
<!-- 通过id来确定css样式: # + id + {} -->
#tabId {
background-color: red;
}
<!-- 通过定义class方式: . + className + {}-->
.clzName {
background-color: blue;
}
</style>
上面是基本的使用姿势,往往我们经常会遇到组合的方式,如希望 设置: div标签内部的 p 标签中的文本颜色等,常见组合有四种
如上面的case, div 标签内部所有的p标签中文本,都设置为红色
<style>
div p {
color: red
}
</style>
<div>
<span>
<p> 红色的文本内容 </p>
</span>
<hr/>
<p> 红色的文本内容 </p>
</div>
这个相比较与后代选择器,区别就是子元素只匹配直接关联的子元素(也就是中间不能有嵌套)
<style>
div > span {
color: red
}
</style>
<div>
<p>
<span> 默认黑色的文本内容 </span>
</p>
<hr/>
<span> 红色的文本内容 </span>
</div>
可选择紧接在另一元素后的元素,且二者有相同父元素
<style>
div+p
{
background-color:yellow;
}
</style>
<p>(默认黑色的内容).</p>
<div>
<h2>My name is Donald</h2>
<p>I live in Duckburg.</p>
</div>
<p>(黄色的内容).</p>
后续兄弟选择器选取所有指定元素之后的兄弟元素。
<style>
div+p
{
background-color:yellow;
}
</style>
<p>(默认黑色的内容).</p>
<div>
<h2>My name is Donald</h2>
<p>I live in Duckburg.</p>
</div>
<p>(黄色的内容).</p>
<p>(黄色的内容).</p>
<span>默认黑色</span>
<p>(黄色的内容).</p>
支持简写方式:
body {
background: #ffffff url('img_tree.png') no-repeat right top;
}
注意: a:hover 必须在 a:link 和 a:visited 之后,需要严格按顺序才能看到效果。
注意: a:active 必须在 a:hover 之后。
在html中,列表主要是 : li, ul, ol 等
默认 ol 是以数字排序; ul 是以符号排序; li 为列表内的元素标签
用的较多的属性
主要是用来控制一个标签和其他标签的位置,比如两个标签之间做间隔区分等,比较有用
padding与margin的区别
主要是标签与周边的距离设置
定义元素边框与元素内容之间的空间
这个有些时候还是挺有用的,设置一个标签四周的边框,一般可以设置线粗细,样式,颜色等
一个非常有意思的点是,边框支持分别设置上下左右四个线的形式,如只设置一个左右有颜色的
<div>
<p style="border-left-style:dashed;
border-left-color:red;
border-right-style:solid;"> 只有左右边框的情况</p>
</div>
outline主要作用在border上,绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用
从实际体验来讲,这个和border的效果差不多
这个主要就是用来控制标签的宽高等相关尺寸的属性,常见的设置如下
控制标签的显示隐藏等
none可以隐藏某个元素,且隐藏的元素不会占用任何空间。也就是说,该元素不但被隐藏了,而且该元素原本占用的空间也会从页面布局中消失。
块元素是一个元素,占用了全部宽度,在前后都是换行
内联元素只需要必要的宽度,不强制换行。
1. 块级元素(block)特性:
总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示;
宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;
2. 内联元素(inline)特性:
和相邻的内联元素在同一行;
宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变,就是里面文字或图片的大小;
3. 块级元素主要有:
address , blockquote , center , dir , div , dl , fieldset , form , h1 , h2 , h3 , h4 , h5 , h6 , hr , isindex , menu , noframes , noscript , ol , p , pre , table , ul , li
4. 内联元素主要有:
a , abbr , acronym , b , bdo , big , br , cite , code , dfn , em , font , i , img , input , kbd , label , q , s , samp , select , small , span , strike , strong , sub , sup ,textarea , tt , u , var
5. 可变元素(根据上下文关系确定该元素是块元素还是内联元素):
applet ,button ,del ,iframe , ins ,map ,object , script
hidden可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间,也就是说,该元素虽然被隐藏了,但仍然会影响布局。
position 属性指定了元素的定位类型。在使用top, bottom, left, right之前,一般需要先确定position属性,明确具体的定位方式
如一个测试
<style>
h2
{
position:absolute;
left:100px;
top:150px;
}
</style>
</head>
<body>
<h2>这是一个绝对定位了的标题</h2>
<p>用绝对定位,一个元素可以放在页面上的任何位置。标题下面放置距离左边的页面100 px和距离页面的顶部150 px的元素。.</p>
</body>
注意
当多个元素在同一个位置时,就会出现重叠的问题,特别是relative这种场景,在网页右下角添加悬浮窗时,经常会出现遮盖的问题,这时可以用 z-index
属性来指定覆盖顺序,越大,则越上面
CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列。
往往是用于图像,但它在布局时一样非常有用。
元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。
一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
浮动元素之后的元素将围绕它。
浮动元素之前的元素将不会受到影响。
如果图像是右浮动,下面的文本流将环绕在它左边
如果你把几个浮动的元素放到一起,如果有空间的话,它们将彼此相邻
<!-- 注意多个浮动的图片时,缩小浏览器窗口大小,布局会发生改变 -->
.thumbnail
{
float:left;
width:110px;
height:90px;
margin:5px;
}
根据前面学习到的几个属性(text-align, margin, position)等来实现各种标签的对齐方式
display:block;margin:auto
,这样才会生效)一个case如下
<div style="width:200px; border: 3px solid blue; padding: 4px">
<div style="width:50%; border:3px solid red; margin: auto; padding: 20px"> 这是一个测试标签居中对其的示例 </div>
</div>
<br/>
<div style="width:200px; border: 3px solid blue; padding: 4px">
<div style="width:50%; border:3px solid red; text-align: center; padding: 20px"> 这是一个测试标签内文本居中对齐的示例 </div>
</div>
前面介绍了边框的设置,主要还是线条类型,粗细以及颜色,现在则可以扩展,设置圆角、阴影,边框图
一个实例,捷足 box-shadow 给图片加上一个白色背景边框
<style>
#boxshadow {
position: relative;
<!-- 添加边框阴影 -->
-moz-box-shadow: 1px 2px 4px rgba(0, 0, 0,0.5);
-webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, .5);
box-shadow: 1px 2px 4px rgba(0, 0, 0, .5);
padding: 10px;
background: white;
}
/* Make the image fit the box */
#boxshadow img {
width: 100%;
border: 1px solid #8a4419;
border-style: inset;
}
#boxshadow::after {
content: '';
position: absolute;
z-index: -1; /* hide shadow behind image */
-webkit-box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
width: 70%;
left: 15%; /* one half of the remaining 30% */
height: 20%;
bottom: 0;
}
</style>
<div id="boxshadow">
<img src="https://raw.githubusercontent.com/liuyueyi/Source/master/img/info/blogInfoV2.png" alt="Norway">
</div>
除了前面说的文本颜色,大小,decorate, transform等之外,这里额外的加了一些特性
5px 5px 5px #FF0000; 阴影,参数说明同 box-shadow
文字逸出时,怎么办( 配合overflow:hidden,将逸出的隐藏掉)
一个实例:
<style>
div.ov {
width: 120px;
white-space:nowrap;
border: 1px solid black;
overflow:hidden;
text-overflow:ellipsis
}
</style>
<div class="ov">
这是一个会移除的文本
</div>
word-wrap 文本太长时,换行的策略
还有一个主要针对英文单词的换行策略 word-break
@Font-face 指定特殊的字体
一般的使用姿势如下:
<style>
@font-face
{
<!-- 字体命名 -->
font-family: myFirstFont;
<!-- 指定字体文件路径 -->
src: url(sansation_light.woff);
}
div
{
font-family:myFirstFont;
}
</style>
实现转换,最常见的就是旋转一定角度了
过渡,配合上面的transform可以实现旋转or放大的动画效果
如一个case,在鼠标放上去时,放大且旋转360°
<style>
div {
width: 100px;
height: 100px;
background: red;
-webkit-transition: width 2s, height 2s, -webkit-transform 2s; /* For Safari 3.1 to 6.0 */
transition: width 2s, height 2s, transform 2s, background 2s;
}
div:hover {
width: 200px;
height: 200px;
background:blue;
-webkit-transform: rotate(360deg); /* Chrome, Safari, Opera */
transform: rotate(360deg);
}
</style>
<div>鼠标移动到 div 元素上,查看过渡效果。</div>
通过 @keyframes
来创建动画的效果,通过 animation
来使用动画
一个实例
<style>
div
{
width:100px;
height:100px;
background:red;
position:relative;
animation:myfirst 5s;
-webkit-animation:myfirst 5s; /* Safari and Chrome */
}
@keyframes myfirst
{
0% {background:red; left:0px; top:0px;}
25% {background:yellow; left:200px; top:0px;}
50% {background:blue; left:200px; top:200px;}
75% {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
@-webkit-keyframes myfirst /* Safari and Chrome */
{
0% {background:red; left:0px; top:0px;}
25% {background:yellow; left:200px; top:0px;}
50% {background:blue; left:200px; top:200px;}
75% {background:green; left:0px; top:200px;}
100% {background:red; left:0px; top:0px;}
}
</style>
<div>哈哈</div>
支持图片圆角设置
常见的文字是横排,从左到右,如果希望改成竖排的,可以怎么办 ?
writing-mode: 适用于:除 <' display '> 属性定义为table-row-group | table-column-group | table-row | table-column之外的所有元素