主人稍等一会喵`(*>﹏<*)

从零开始前端学习笔记 html css


使用vscode选择h5语言,回车,vscode会帮我们新建一个html文件

大致结构如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
                     
</body>
</html>
<!--
    1 html:负责网页结构的
2 css:负责网页样式的
3 html:由标签组成
4 单标签:没有内容
5 双标签:开始标签和结束标签 可以放内容的
6 所有写在元素开始标签之中的都是该标签的属性
7 <!DOCTYPE html>:用来声明文档类型
8 <html></html> 代表了整个网页,这个元素包裹了整个完整的页面,是一个根元素。
9 <head></head>用来写网页的一些配置信息
10 <meta charset="UTF‐8"> 声明文档的编码格式
11 <title></title> 负责网页标题
12 <body></body>负责网页内容
13 格式:标签换行, 开始标签和结束标签要对齐(一条竖线)
14 子父级之间相差一个tab键
-->
标签

标签分为单标签和双标签,其中类似有头有尾的标签为双标签

而这种只有单个的为单标签

div标签

div标签写在body标签内,是body的子标签

作用是把文档分割成独立的,不同的部分

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
    <div>
    </div>                     
</body>
</html>
样式
内联样式

直接写在div标签内,可以定义块级元素的样式,如宽、高、颜色等

<div style="width: 200px;height: 200px;background-color: aqua;">
</div>   
内部样式

使用内联样式定义div样式显得代码可读性很差,当div标签很多时,很不容易分辨

所以可以使用内部样式,将div的样式定义在head中的style标签中

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <style>
        div{width:50px;height:50px;background-color:yellow}
    </style>
</head>
<body>  
	<div></div>               
</body>
</html>

当有很多div标签是可以使用class和id为标签命名,class为类名,id为属性名。

id不可以重复,开发中要做到见名知意

class在style标签内前用.进行调用,id用#调用

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <style>
        .testClass{width:50px;height:50px;background-color:yellow}
        #testId{width:50px;height:50px;background-color:aqua}
    </style>
</head>
<body>  
    <div class="testClass"></div>   
    <div id="testId"></div>
</body>
</html>
外部样式

定义在head中的style标签中其实还是很乱,所以可以使用外部样式,将样式定义在一个单独的css文件中。

在head中使用

<link rel="stylesheet" href="test.css"/>

其中href添加css文件所在路径,可以使用相对路径

相对路径的含义为相对于正在编写的html文件所相对的路径,可以使用../返回上一层文件夹

样式的优先级

样式是有优先级的

!important>内联样式》内部样式(id<class<tag)
权值:10000   1000          100  10    1
写在后面的会覆盖前面的样式

其中!important只对其中一个属性生效,如

.testClass{width:50px;height:50px;background-color:yellow !important}

其中!important只对颜色生效,高度和宽度遇到样式冲突会按照上述规则进行处理

改变元素位置

margin(外边距)

使用margin可以给div上下左右加上外边距

margin-top
margin-bottom
margin-left
margin-right

margin问题:
- margin塌陷:在子父级关系中使用margin-top,会使子父级分不开,把外边距加到了父级身上,这种情况称为margin塌陷。如果父级也有margin-top,并不会叠加而是会取其中较大的数。

  • margin合并:在同级关系中,垂直方向上相邻的margin,会合并为一个。合并后的距离和塌陷问题中相同,会取其中较大的数。
padding(内边距)

使用padding可以给div上下左右加上内边距

padding-top
padding-bottom
padding-left
padding-right

padding问题:

  • 会自动增宽或者增高,保持容积不变。所以用到padding一般会减去padding的数值,保证自己想要的效果。
内联元素的垂直方向的margin和padding都不生效,但左右方向上的margin和padding会生效
position(定位)
  • absolute(绝对定位):想改变谁的位置,就给谁加绝对定位

    绝对定位的元素默认以已定位的父级当参照(既可以是相对定位,也可以是绝对定位,只要被定位了就可以)

  • relative(相对定位):想以谁当作参照,就给谁加相对定位

  • fixed(固定定位):和绝对定位类似,但会固定以显示器为参照

示例代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Lesson3</title>
    <style>
        .top{height: 50px;
            width: 700px;
            background-color: aqua;
            padding-top: 25px;
            padding-bottom:25px;
            padding-left: 50px;
            padding-right: 50px;
            margin-bottom:25px
        }
        .top_cen{height:50px;width: 700px;background-color: pink;}
        .mid{height:500px;width:800px;background-color: aqua;position:relative}
        .mid_left{height: 400px;
            width:300px;
            background-color: pink;
            position: absolute;
            top: 50px;
            left: 50px;}
        .mid_right{height: 400px;
            width:375px;
            background-color: pink;
            position: absolute;
            top: 50px;
            left: 375px;}
        .bottom{width:800px;height:100px;background-color: aqua;margin-top: 25px;}


    </style>

</head>
  <div class="top">
    <div class="top_cen"></div>
  </div>

  <div class="mid">
    <div class="mid_left"></div>
    <div class="mid_right"></div>
  </div>

  <div class="bottom"></div>
    
</body>
</html>
元素的默认宽高

父级的默认宽高:

  • 默认宽度:父级的百分百(脱离文档流的元素,如浮动的元素)
  • 默认高度:由子集+padding+border

浮动元素的默认宽:由子集决定

定位的元素默认宽:由子集决定

首行缩进
text-indent: 2em;

表示首行缩进两个字符

div内描边
box-sizing: border-box
overflow

overflow:hidden 溢出隐藏:自己超出父级的部分不予显示

overflow:auto:超出部分会附加滚动条

overflow-x:scroll/overflow-y:scroll:不管需不需要都添加一个滚动条

清除浮动的方式
  • clear:both
  • overflow:hidden/auto 都可以清除浮动,但会有副作用。会使子元素显示不全
  • 给浮动元素的父级加浮动
  • 伪元素(伪元素就是指通过css插入一个html标签,和实际写html标签的效果是一样的)

其中清除浮动首选还是使用clear:both,overflow只要还是用于处理溢出部分。overflow能清除浮动的原理主要为BFC(块级格式上下文)

伪元素代码示例

.clear:after{display:block;clear:both;content:"";}

在元素中加入这个样式,即是指在元素的最后加入这个标签,和在元素后面自己手动加个标签效果是一样的

margin不塌陷的几种情况
  • 给父级加描边,即子父级不贴合就不会发生margin塌陷(ps:描边可以设置透明 使用 border:transparent 命令设置)
  • 父级加overflow:hidden
  • 父级有padding
  • 父级使用了定位(绝对定位和固定定位,即脱离文档流)
  • 父元素浮动
  • 子元素浮动(ps.子父级一起浮动也不会塌陷)
百分比相关
  • width:参考父级的宽度

  • height:参考父级的高度(如果父级为body,那么不生效)

  • margin:不论任何方向,都是参考父级的宽度

  • padding:不论任何方向,都是参考父级的宽度

  • position:参考定位的父级的宽和高

  • border-radius: 参考自身

css中的单位
  • px 像素
  • em 相对单位,代表一个字符大小
  • rem(root em) 其root即代表相对于整个html,经常用于响应式布局
响应式布局的解决方案
  • 使用百分比—-最常用,最简单的响应式布局解决方案
  • rem—-常使用在移动端布局
  • flex布局
  • 媒体查询 @media screen(css3)
盒模型

![](从零开始前端学习笔记 html css/1.jpg)

在网页的审查元素中可以看到。

使用box-sizing:border-box 可以将border和padding放在盒子内

关于表单
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>input</title>
</head>
<body>
    <!--from表单中action属性填写后端的地址,method规定通信的方式-->
    <form action="" methond="get">
        <input type="text" placeholder="请输入">
        <input type="password" placeholder="请输入">
        <button>button</button>
        <input type="button" value="button">
        <input type="submit"><br>
        <!--多选框,value为传给后端的值,name一般用于后端区分种类-->
        <input type="checkbox" value="sing" name="hobby"><input type="checkbox" value="dance" name="hobby"><input type="checkbox" value="rap" name="hobby">rap
        <input type="checkbox" value="basketball" name="hobby">篮球

        <!--radio为单选框-->
        <input type="radio" name="gender" value="male"><input type="radio" name="gender" value="female"><br>

        <!--下拉框,默认显示第一个,但可以通过selected命令显示后面的元素-->
        <select>
            <option value="sing"></option>
            <option value="dance"></option>
            <option value="rap">rap</option>
            <option value="basketball" selected>篮球</option>
        </select>

    </form>
    
</body>
</html>

现在实际开发中不会使用form表单加地址去和后端通信,而是会使用js中的ajex

使用outline:none可以去掉input标签点击后显示的黑边

其他的表单也不常用原生的,实际项目中会一般会进行封装后再使用。

效果:

![](从零开始前端学习笔记 html css/2.jpg)

关于table
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test-table</title>
    <style>
        /**border-collapse:collapse ;指折叠边框,两个边框会重叠在一起**/
        table{border-collapse:collapse ;margin: auto;width: 1200px;}
        table,th,td{border: 1px solid;text-align: center;}
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>序号</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>电话</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>张三</td>
                <td>18</td>
                <td>111</td>
            </tr>
            <tr>
                <td>2</td>
                <td>张四</td>
                <td>18</td>
                <td>111</td>
            </tr>
            <tr>
                <td>3</td>
                <td>张五</td>
                <td>18</td>
                <td>111</td>
            </tr>
            <tr>
                <td>4</td>
                <td>张六</td>
                <td>18</td>
                <td>111</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

表格在过去会被用来做布局,但现在基本不会使用,表格只作为表格使用,不会应用在布局上

th和td只是样式上有些差别,本质差不多,th会比td看着粗一点,实际使用都用td也是可以的

实际效果:

![](从零开始前端学习笔记 html css/3.jpg)

flex布局

flex布局是独立于常规布局的另一种布局解决方案

优点

  • 简单,界面不容易错乱,语法简单,经常用于移动端布局

缺点

  • flex不太不适用于精准布局

传统布局的解决方案,基于传统的和模型,依赖display+position+float,对于特殊布局稍显复杂,如垂直布局就要通过margin或者定位来进行布局。

采用flex布局的元素,称为flex容器

要开启flex布局,要在要布局的容器中(即父级)写上 display:flex开启flex布局

开启flex布局后,要在容器中添加一些属性

flex-direction规定元素排列方向(即主轴方向),默认为row(水平排列)

  • flex-direction:column 垂直排列
  • flex-direction:row 水平排列
  • flex-direction:row-reverse 水平反转排列
  • flex-direction:column-reverse 垂直反转排列

flex-wrap规定是否换行

在flex布局中,如果子集将要超出父级,flex布局会将元素中的每个子集等比缩小来防止子集超出父级

  • flex-wrap:nowrap 默认值,不会默认换行,如果子集超过父级,会等比缩小子集避免换行
  • flex-wrap:wrap 换行,换行后样式也会自适应父级避免错乱
  • flex-wrap:wrap-reverse 反向换行

flex-flow 是flex-direction和flex-wrap的简写

<!--指在一行上显示,切会自动换行-->
flex-flow: row wrap

justify-content定义在主轴上的对齐方式

传统布局如

<div>
	<div class="test">test</div>
    <div class="test">test</div>
</div>

类似这种布局,如果想要使中间的两个子集div居中对齐,如果在不套一个额外的div的话是非常费劲的,但在flex布局中

使用

justify-content:center

可以轻松实现两个子集元素的居中对齐

  • justify-content: flex-start 左对齐
  • justify-content: flex-end 右对齐
  • justify-content:center 居中对齐
  • justify-content: space-between 等间距对齐(两端会顶头)
  • justify-content: space-around 等间距对齐(两端不会顶头)

align-items定义了垂直轴上的对齐方式

  • align-items: center 居中对齐
  • align-items: flex-start 上对齐
  • align-items: flex-end 下对齐
  • align-items: baseline 基线对齐
  • align-items: stretch 没设置高度的话会默认占满垂直方向的父级

align-content定义多行垂直轴的对齐方式

order定义了子集元素的排列顺序,加在子集上。数值越小,排列越靠前,默认为0

.item{
	order: 0
}

flex-grow定义了元素的放大比例,加载子集上,默认为0,代表如果存在剩余空间,也不会放大

.item{
	flex-grow: 1
}

flex-shrink属性定义了元素的缩小比例,默认为1,即如果空间不足,该项目会缩小

flex-basis属性定义了在分配多余空间之前,元素占据主轴的空间,默认值为auto,即元素本来的大小

flex属性为flex-grow,flex-shrink和flex-basis的简写

align-self属性允许单个元素拥有与其他元素不同的对齐方式

html 5

video:视频标签

html 5之前都必须使用flash插件才可以进行媒体视频的播放。在html 5之后支持视频标签,可以在网页中直接播放视频。


<!--video标签可以不设置宽高,默认为视频的宽高
	controls为唤出视频控件(暂停,音量调节,全屏等),没写值即为布尔值,相当于controls="true" autoplay为自动播放 loop为循环播放-->
<video width="400px" height="240" controls autoplay loop>
    <!--src中为视频的地址 -->
	<source src="xxx.mp4" type="video/mp4">
</video>

audio:音频标签

<audio controls>
	<source src="xxx.mp3" type="audio/mpeg">
</audio>
css 3

边框

  • border-radius 圆角
  • box-shadow 盒阴影
  • border-image 边界图片,即描边可以使用图片,一般没什么用处

背景

  • background-image: url(xxxx.jpg)
  • background-position: right bottom,left top
  • background-repeat: no-repeat,repeat

渐变

  • 线性渐变 (Linear Gradients)- 向下/向上/想做/向右/对角线
  • 径向渐变(Radial Gradients) -由中心定义
#grad{
	height:200px;
	background-image: linear-gradient(to bottom right,red,yellow)
}

文本效果

文本投影

参数分别为水平阴影,垂直阴影,模糊距离,阴影的颜色

h1{
	test-shadow:5px 5px 5px red
}

字体

以前的css中,字体只能选择用户电脑上已经安装的字体。

但在css 3以后,网页设计的时候可以使用任何喜欢的字体。

@font-face{
	font-family:"xxx"
	src: url();
}

p{
	font-family:"xxx"
}

使用的时候使用@font-face将字体引入,在font-family中定义引入字体名字,src中填入字体路径。

之后就可以在别的标签中通过font-family属性将刚才引入的字体加入到该元素的样式之中

2D转换

2D转换可以让元素进行转换,元素中添加transform属性使用

  • rotate —-旋转
div{
	width:200px;height:200px;background-color:red;transform: rotate(-45deg)}

deg为角度,-45deg即为让元素逆时针旋转45度

  • sclae —-缩放
div{
	width:200px;height:200px;background-color:red;transform: scale(2,3)}

scale中的第一个数代表水平放大多少倍,第二个数代表垂直放大多少倍,且放大部分不会占位置,只是视觉效果变大,本身的宽高不会改变

scale中可以给小数,即代表缩小。同理一样只是视觉效果缩小,本身宽高不会改变

  • skew —-倾斜
transform: skew(45deg)
  • translate —-位移
transform:translate(50px,100px)

translate方法可以使元素从当前位置移动,第一个参数代表水平位移,第二个参数代表竖直位移

3D转换

  • rotateX —-沿x轴旋转
transform: rotateX(45deg)
  • rotateY —沿y轴旋转
transform: rotateY(45deg)

过渡

transition: width 1s,margin 1s
/**参数写上all 所有变化都会有过渡效果**/
transition:all 1s

transition是指将来如果元素的样式发生变化(如通过hover),其变化的样式如果在transition所规定,则会添加一个样式变化的过渡效果。

第一个参数规定想要添加过渡效果的属性,如宽度,margin,rotete都可以,如果写all则为所有。第二个参数为过渡需要的时间。

可以使用transition-timing-function规定过渡动画的时间曲线。

默认为linera 匀速

描述
linear 匀速
ease 慢速开始,然后变快,然后再慢速结束
ease-in 慢速开始
ease-out 慢速结束
ease-in-out 慢速开始和结束
cubic-bezier(n,n,n,n) 自己定义数值,可能的值在0-1之间
  • 延迟
transition-delay:1s

动画延迟,可以让变换经过规定的时间后再生效

动画

使用@keyframes定义一个动画

@keyframes myanimate{
	from{width:10px;}
	to{width:100px}
}

也可以定义多端变换

@keyframes myanimate{
	0%{width:10px;}
	50%{width:100px;}
	100%{width:1000px;}
}

定义之后就可以在在其他元素的样式中引用定义好的动画,如

div{
	animation:myanimate 1s
}

如果希望动画播放后不返回初始状态,在@keyframes中添加

animation-fill-mode: forwards

动画延迟

animation-delay: 1s

规定动画播放次数

animation-iteration-count: value

value可以写入数字,也可以使用infinite使动画无限次播放

响应式布局解决方案
  • 使用百分比宽度
  • 使用flex布局
  • rem布局
  • @media screen 媒体查询

css 3提供的@media screen媒体查询,可以针对不同的屏幕尺寸,提供多套不同的样式。

@media screen and (min-width:1200px){
    .box{width:200px;height:200px;background-color:red}
}

以上代码表示这只有在大于1200px的屏幕上,box的样式才会生效。

.box{width:200px;height:200px;background-color:red}
@media screen and (min-width:1200px){
    .box{width:200px;height:200px;background-color:red}
}
@media screen and(min-width:1400px){
	.box{width:200px;height:200px;background-color:red}
}

通过编写顺序,可以实现在想要的区间内获得不同的样式。如上述代码,在1400px之上为一套样式,1200px到1400px为一套样式,1200px以下一套样式。

@media screen and (max-width:1200px){
    .box{width:200px;height:200px;background-color:red}
}

上述代码代表这条样式会在1200px以下时生效

rem布局除了使用js控制之外,同样也可以使用css 3中的媒体查询进行使用

@media screen and (min-width:1200px){
    html{font-size:10px}
}
@media screen and(min-width:1400px){
	html{font-size:20px}
}
.box{width:10rem;height:10rem;background-color: red}
BFC

BFC:块级格式上下文

BFC是一个独立的布局环境,BFC内部和BFC外部的元素互不影响,本质其实就是一个盒子

BFC需要主动开启


BFC的布局规则

  • 内部的元素会在垂直方向上一个接一个排列
  • 盒子在垂直方向上的距离由margin决定,兄弟关系的margin会合并,父子关系会塌陷
  • 每个块左边缘紧贴父级块的左边缘
  • 开启了BFC的盒子不会与浮动的盒子重叠,会贴着浮动元素显示
  • BFC是一个独立的容器,里外不会影响
  • 计算BFC高度时,浮动的子集元素也会算在内

开启BFC

  • 根元素本身就是BFC,即html本身即为BFC
  • 浮动的元素
  • 定位的元素(不包含相对定位)
  • display:inline-block/flex等
  • overflow:hidden/auto

.red{width:200px;height:200px;background-color:red;margin-bottom:200px;}
.blue{width:200px;height:200px;background-color:blue;margin-top:100px}
<div class="red"></div>
<div class="blue"></div>

因为html本身就是一个BFC,red和blue同处于html,也就是同时处于一个BFC中,所以会由于上述的BFC的规则会发生margin合并。

如果想要消除margin合并,可以让两个元素处于不同的BFC中即可

.red{width:200px;height:200px;background-color:red;margin-bottom:200px;margin-top:100px}
.blue{width:200px;height:200px;background-color:blue;margin-top:100px}
.box{overflow:hidden}
<div class="box">
	<div class="red"></div>
</div>
<div class="blue"></div>

同理两个不处于一个BFC中的元素也不会发生margin塌陷


.red{width:200px;height:200px;background-color:red;float:left}
.blue{width:200px;background-color:blue}
<div class="blue">
	<div class="red"></div>
</div>

如果类似这样不给父级高度,子集浮动,那么父级的高度会为0

如果这时将父级设置为BFC容器,会由于BFC的规则,子集的高度就可以被父级计算在内了

因为这个原理,在子集浮动时,父级也设置浮动的话,由于BFC的原则,子集不需要清除浮动


.red{width:200px;height:200px;background-color:red;float:left}
.blue{width:300px;height:300px;background-color:blue}
<div class="blue"></div>
<div class="red"></div>

上述样式,由于浮动的元素会脱离文档流,所以红色块会覆盖在蓝色快的上方显示。

此时如果将蓝色开启BFC,由于BFC的原则,两个盒子就不会重叠,而是会紧贴显示

使用此特性可以实现双流式布局,即左侧固定宽度,右侧自适应

.red{width:200px;height:200px;background-color:red;float:left}
.blue{height:300px;background-color:blue;overflow:hidden}
<div class="blue"></div>
<div class="red"></div>

代码类似以上这种


查缺补漏
box-sizing:border-box

可以忽略border和padding给容器体积带来的影响

其中box-sizing的默认值为content-box


vw 和 vh

vw(view width)

vh(view height)

简单来说vw和vh会将可见的屏幕平均分割成100份

div{
	width:100vw;height:100vh;background-color:red
}

是一个占满全屏的红色块


使用opacity设置透明度,同时opacity可以继承

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>opacity</title>

  <style>

    /*
      opacity
        默认 1, 完全不透明
        0 完全透明
     */

    .box1 {
      width: 100px;
      height: 100px;
      background-color: #FF9500;
      position: fixed;
      z-index: 11;
      /*半透明*/
      opacity: .5;
    }
    .box2 {
      width: 100px;
      height: 100px;
      background-color: #0f88eb;
      position: fixed;
      left: 33px;
      top: 33px;
      z-index: 9;
      opacity: .5;
    }
    .box3 {
      width: 100px;
      height: 100px;
      background-color: #A1D8AD;
      position: fixed;
      left: 66px;
      top: 66px;
      z-index: 8;
      opacity: .5;
    }


  </style>
</head>
<body>

<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>

</body>
</html>

margin-auto只适用于块元素,即使给img设置宽度,margin-auto也是不生效的。要使用的话要设置

display: block

顺带一记,text-align对于img是生效的。

text-align对块元素不生效

图片和文字的对齐方式默认是低对齐,如果要调整起对齐方式,如居中,可以使用

vertical-align:middle

a标签中如果将target属性设置为

target="_blank"

会在新标签页内打开,默认为self,代表当前窗口打开超链接


百分比的参照物

父元素的宽度:padding,margin,width

其中即使是padding-top:10% 参考的一样也是父级的宽,并不会参考父级的高,这点要注意

父元素的高度:height (如果父元素为body的话不会生效)


文章作者: Razuberi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Razuberi !
评论