zoukankan      html  css  js  c++  java
  • 前端基础知识之html和css全解

    前端回顾

    前端就是展示给用户并且与用户进行交互的操作界面。

    前端包括包括三部分:

    1. html:网页的骨架,没有任何样式,比较丑
    2. css:相当于一些装饰品,给骨架添加样式。
    3. js:控制网页的动态效果。

    前端也有很多框架,只需要按照固定的语法进行调用即可。

    基础知识

    软件的开发架构分为两种:

    1. CS:拥有客户端和服务端。
    2. BS:用浏览器代替客户端,其本质也是BS架构,但是客户端不需要我们自己写。

    忽略掉进行域名解析的过程,当我们在浏览器的窗口中输入网址后的过程:

    1. 浏览器向服务器发出请求
    2. 服务端接受请求
    3. 服务端返回响应。
    4. 浏览器接受响应,然后将数据按照特定的规则进行渲染,展示给用户。

    如果要想浏览器当做很多服务端的客户端,那么就需要浏览器熟练掌握各种各样的服务端的规则,对于浏览器来说压力很大,因此,浏览器决心变得傲娇:你要是想让我给你打工(当做客户端),那么你就遵守我的规则,不然的话,不好意思了,你自己去开发自己的客户端吧。因此,产生了浏览器制定的协议。

    HTTP协议

    首先说一下HTTP协议。

    它是超文本传输协议,用来规定服务端和浏览器之间的数据交互的格式,有四大特性:

    1. 基于请求响应。
    2. 基于TCPIP作用于应用层之上的协议
    3. 无状态:不保存用户状态信息。脸盲症重度患者,即使见你千百遍,依旧像是从未见。
    4. 无链接/短链接:请求来就响应,响应完就结束。

    既然是基于请求响应的,那肯定也都有各自的请求响应的数据格式。

    请求数据格式 = 请求首行 + 请求头 + 空行 + [请求体]

    1. 请求首行:当前请求方式 url和HTTP版本号,如 GET /index/ HTTP/1.1
    	当前请求方式在HTTP/1.1中有8种,只学了get和post最基本的请求方式。
        	url:统一资源定位符,可以理解为网址
        	get:请求指定的页面,要求服务端将请求的url页面在响应的时候返回。地址中?后可添加传送数据,但是一般只能传送1024个字符,不能太大。
            post:浏览器可以通过post请求将大量数据发送给服务端,无大小限制。
    
    2. 请求头:主要由大量键值对组成,包含客户端的一些请求信息
    	如:User-Agent:浏览器类型。
    3. 空行
    	最后一个请求头之后使一个空行,发送回车符和换行符,主要是作为标识,告诉服务端请求头结束了
    4. 请求体:主要在post中使用,get请求没有。一般post适用于请求展示数据时候使用
    

    响应数据格式 = 响应首行 + 响应头 + 空行 + 响应体。

    1. 响应首行:服务器HTTP协议版本 响应状态码 状态码的文本描述,例:HTTP/1.1 200 OK
    	状态码是由三位数字组成的,代表某些固定含义
        	1XX:表示请求已被服务端接受,继续处理。
            2XX:请求已被成功接受理解。
            3XX:重定向,要完成请求需要完成某些前置条件
            4XX:客户端错误,请求有错误,如资源不存在(404)等等
            5XX:服务端炸了,服务端着火了等等,就是服务端不能工作了
    
    2. 响应头:大量键值对
    3. 空行
    4. 响应体:返回的是服务端返回的数据。
    

    认识HTML

    HTML是一种用于创建网页的标记语言,并不是编程语言。本质就是浏览器识别的格式,我们按照该格式书写,然后浏览器能认识并加以渲染,达到我们想要的效果。

    注意:不同的浏览器对相同的标签有不一样的认识,这里是浏览器的兼容问题。

    HTML组成

    HTML主要是由4部分组成:
    	1.<!DOCTYPE html>:声明为html5的文档
        2.<html></html>:是文档的开始和结束标志。其余三部分也是在这个标签内。
        3.<head></head>:内部数据不会再页面上展示,只是定义一些配置让浏览器识别。
        4:<body></body>:被浏览器渲染给用户看的数据内容。
    其实1和2是第一层结构,而3和4是在2内部定义的。
    结构如下:
    <!DOCTYPE html>
    <html>
    	<head></head>
    	<body></body>
    </html>
    

    HTML标签

    标签代表的某些固定的含义,像乐高积木一样,把这些各种各样的积木堆起来,就能完成一个杰出的作品。

    按照标签是否是单身可分为以下两种:

    1. 单标签:语法为<标签名 属性1=值1 属性2=值2 ...../>
    2. 双标签:语法为<标签名 属性1=值1 属性2=值2 .....>前面表开始,中间是内容,后边表结束</标签名>

    一些常见的HTML标签

    首先是注释:<!--注释内容-->
    
        
    <!--head标签内部常用的标签-->
    <title>网页标题</title>  
    
    <style>内部用来书写css代码</style>  
    
    <link rel='stylesheet' href='外部css文件'></link>   引入外部css文件
    
    <script src='外部文件'></script>
    
    <meta name='keywords' content='被浏览器搜索的关键字'>
    <meta name='description' content='网页的描述性信息'>
    
    <!--body内部常用的标签-->
    
    <h1> 1级标题 改变数字可以进行1~6级标题的替换</h1>
    <u>下划线</u>
    <i>斜体</i>
    <s>删除线</s>
    <b>加粗</b>
    <p>段落</p>
    <br>  换行
    <hr>  水平分割线
    
    <!--特殊符号表示方法-->
    &nbsp;  空格
    &gt;   大于号
    &lt;   小于号
    &amp;  &
    &yen;  ¥
    &copy;		©
    商标&reg;  ®
    
    上述标签在浏览器中的显示所占的位置是不一样的,据此,对不同的标签又进行了分类。
    
    1. 块级标签:独占一行,不受本身文本的大小限制。
    	-块级标签可以修改长宽。
        -其内部可以嵌套块级标签。
    	-只有一个比较页数的标签:p标签只能内嵌行内标签
        
    2.行内标签:其所占位置大小被自身文本所决定,文本多大,占多大。
    	-行内标签不能嵌套块级标签
    

    div和span标签

    块级标签的典型代表就是<div>标签,行内标签代表就是<span>标签,为什么要单独拉出来说呢?因为这两个标签是我们专门用来在初期构造html骨架的。在设计页面初期,我们可以首先使用div标签来进行整体页面的一个规划,然后其中的文本内容可以使用span标签占位。后期我们添加内容都是在div和span组成的简易结构中进行的。

    特殊的属性

    1. id:该页面不能重复,用来标识标签唯一身份。
    2. class:类似于Python的继承,会按照class内的css样式进行渲染标签。

    常用标签

    1. img标签:可以插入图片
    	<img src="图片的路径" alt="图片未加载成功时的提示" title="鼠标悬浮在图片上的提示信息" width="自定义宽" height='自定义高'>
    如果宽和高只定义一个的话,那么就会等比例改变
    
    2. a标签:传送门标签
    	<a href='传送地址'></a>
    	target='_self/_blank'  打开新页面的方式,前者表示本页面打开,后者是新建页面打开,默认前者
    	
    tip:本页面跳转的功能
    a标签具有锚点功能,这时候就要说到一个特殊的属性了:id='',这个id必须是本页面唯一,作为每个标签的身份标识,我们可以通过查找某标签的id直接定位到该标签,所以a标签中的href属性就可以写为本页面的id值,完成点击之后即跳转到该标签。
    
    3. 列表标签
    列表标签有三种,这里只记录一下无序列表。
    	<ul>
        	<li>默认是带小黑点的子集排列</li>
        	<li>如下展示</li>
    	</ul>
    
    • 无序列表就是这样
    • 可以有多行
    4. 表格标签
    <table>  # 声明一个表格
        <thead>  # 表头
            <tr>  # 每一个tr标签代表一行数据
                <th>加粗的字段1</td>
                <td>字段2</td>
                <td>字段3</td>
            </tr>
        </thead>
    
        <tbody>  # 表身
            <tr>
                <td>一行数据的第一个字段值</td>
                <td>一行数据的第二个字段值</td>
                <td>一行数据的第三个字段值</td>
            </tr>
        </tbody>
    </table>
    
    html本身子代的表格是比较丑的,但是仍然可以添加一些属性的变化使其稍微好看点。
    border='数字':表格的边框样式
    rowspan='数字':向下的单元格合并几行
    colspan='数字':向右的单元格合并几行
    
    1. 表单元素

    这个表单属性可以实现向服务端发送数据,如果我们填写一部分数据向后端提交,就要使用到这个表单元素。

    <form action="数据提交地址" method='请求方式' enctype='multipart/form-data'>
        <input type="text" name=''>			输入文本
        <input type="password" name=''>		密码输入
        <input type="date" name=''>			日期输入
        <input type="radio" name=''>		单选框:从给出的选项进行选择
        <input type="checkbox" name=''>		多选框:从给出的选项中可以进行多选
        <input type="submit" name=''>		提交按钮,触发提交动作
        <input type="button" name=''>		可以进行自定义功能按钮,空白的只能点着玩
        <input type="reset" name=''>		重置按钮:刷新本页面
        <input type="file" name=''>			选择文件,可进行上传,但有前提条件
    	<label for="">
            <input type="text" name=''>		input标签在label内,能让用户再点到文本提示信息的时候自动进入到数据输入状态,即获得焦点。
        </label>
        
    </form>
    
    
    

    action的3种状态:

    1. 不填:默认是向本页面所在的url提交数据。
    2. 写全路径:向该url提交数据。如’www.baidu.com‘。
    3. 只写路径后缀:自动识别当前的ip和port,然后拼接。如:'/index/'

    主要记得就是当在内部输完数据准备进行提交的时候,action决定了提交的方向。

    几个特殊状态:

    1. checked:对于给出的选项(针对radio和check)问题,可使用这个值作为设定默认值。
    2. disabled:不能获得焦点(不能输入)。
    3. readonly:只能读。

    上传文件的前提条件:

    1. 请求方式为POST
    2. 必须定义enctype='multipart/form-data'属性。

    注意事项:

    1. name属性:数据是按k:v进行提交的,因此input内部务必填写一个name属性作为数据的key。
    2. value属性:针对输入文本类型,value为输入文本,针对按钮类为按钮显示文本,针对选项类为传送数据的键值对的值。
    select标签:默认是单选的,下拉式选项。想要多选需添加mutiple  selected为默认选中状态
    <form action="" >
            <select name="" id="" multiple>
                <option value="" selected>1</option>
                <option value="">2</option>
                <option value="">3</option>
            </select>
            
            <textarea name="" id="" cols="30" rows="10"></textarea>
        </form>
        
    textarea标签是获取用户大段文本输入,本身是一个大的可输入多行的文本框。
    

    认识css

    css相当于一个化妆盒,用来给html打造的东东进行华丽大变身。

    既然要进行装饰,那么就首先要找到被装饰的对象。

    css的引入方式有几种:

    1. head内的link标签引入外部css文件
    2. head内的style标签内写入css
    3. 在标签内部直接定义style='{属性:属性值.....}'

    一般情况建议使用第一种方式,方便后期维护,第三种方式不建议大批量使用,耦合度较高。

    选择器

    这个就很好理解,就是通过一些方法精确定位到某一个标签。

    选择器分类:

    /*我是注释语法:选择器是定位某标签,大括号内的内容是定义的css的一些样式*/
    选择器 {属性1:属性值1;属性2:属性值2.....}
    
    /*基本选择器*/
    /*1. id选择器: 关键符号为# */
    #id值 {属性1:属性值1;属性2:属性值2.....}
    
    /*2. 类选择器: 关键符号为点 */
    .类 {属性1:属性值1;属性2:属性值2.....}
    
    /*3. 元素选择器*/
    标签名 {属性1:属性值1;属性2:属性值2.....}
    
    /*4. 通用选择器*/
    * {属性1:属性值1;属性2:属性值2.....}
    
    /*组合选择器:先找到某一个确定的标签,根据这个标签的亲戚关系进行查找*/
    后代选择器:凡是在标签内部的标签都是后代		  #id a {}
    儿子选择器:在标签内部第一层级的标签			   #id>a {}
    毗邻选择器:同级别紧挨着标签的下一个标签		  #id+a {}
    弟弟选择器:同级别下方所有的标签				 #id~a {}
    
    /*属性选择器:以[]为标识,查找含有某属性的标签*/
    [name] {}  			含有name属性的标签都被选择
    [name='tom']  		含有name属性且值为tom的所有标签
    标签名[name='tom']   标签名内含有属性为name的且值为tom的所有标签
    

    分组:多个元素样式相同可通过逗号隔开选择器的方式设置。

    嵌套:多种选择器嵌套使用,可以想想后代选择器

    div,#d1,.c1 {}  选择div标签、id为d1、继承c1类的标签
    #d1 a {}		选择id为下的a标签
    

    伪类选择器

    一般在a标签使用比较频繁

    a:link {color:blue}  		# 未访问链接时的颜色
    a:visited {color:blue}  	# 访问链接之后的颜色
    a:hover {color:blue}  		# 鼠标悬浮在链接时颜色
    a:active {color:blue}  		# 鼠标点击链接不松时的颜色
    input:focus {color:bule}  	# 输入框获得焦点时的样式
    

    伪元素选择器

    p:first-letter {}  设置文本首字母的字体样式
    p:after {content:'content必须定义'}  在p元素之后添加一个不可选中的内容,多用于清除浮动 
    p:before {content:'content必须定义'}  在p元素之前添加一个不可选中的内容,多用于清除浮动
    

    优先级

    在标签内部的所有标签都会默认继承该标签的样式,但是如果内部标签也有自己的样式,这个时候就要考虑优先级的问题了。

    选择器的优先级是按照权重来决定的,谁的权重高那么就听谁的。按照通俗的话说就是哪一个选择器精确就听谁的。

    针对相同的选择器:就近原则。后执行的会将前面执行的覆盖。

    针对不同的选择器:行内选择器》id选择器>类选择器>标签选择器。谁查找的精度高,范围小。就听谁的。

    属性

    宽和高

    这两个属性是块级标签通用的,用来设置高和宽,行内标签是无法生效宽属性的,它的宽是由其本身文本内容决定

    100px;  设置宽
    height:100px; 设置高
    

    字体属性

    font-family: "Microsoft Yahei", "微软雅黑", "Arial";字体的版式,前面不能使用就用备胎
    font-size:10px	字体的大小
    font-weight:250px  字体的粗细
    color:red		颜色的英文
    	#abc456		16进制的6位数
    	rgb(111,222,255)	三基色。范围0~255
    	rgba(111,222,255,0.5)	三基色加透明度,透明度范围0~1
    
    

    文字样式属性

    text-align:left/right/center/justify  水平对齐方式
    text-decoration:none  无样式,常用语去掉a标签默认的下划线
    		underline  文本下的一条线
    		overline  文本上的一条线
    		line-through  穿过文本的一条线
    text-indent:2em	空两个字符大小
    

    背景属性

    background-color:white  背景颜色
    background-image:url('')  背景图片
    background-repead:repead  默认图片会铺满整个网页
    		  no-repead  背景图片不平铺
    		  repead-x  水平平铺
    		  repead-y  垂直平铺
    background-position:center center 确定背景位置
    background-attachment:fixed  背景不会随着文档的向下移动而滚动
    
    对于上述都是以同样开头的属性是支持简写的
    background:White url() no-repead center center
    

    边框

    可以设置整体的边框样式,也可单独设置边框的样式,例如:border-left-width
    border-10px;					边框宽
    border-style:solid/none/dotted/dashed;			边框的样式
    border-color:red;					边框的颜色
    
    简写:border:10px solid red;
    
    border-radius:50%  					可以设置为圆,半径为长与宽的一半
    

    display属性

    display:none;	文档中元素存在,但是不显示
    	block;	将标签设置为块级标签
    	inline; 将标签设置为行内标签
    	inline-block; 标签可以在一行,且可以设置宽和高
    

    css盒子模型

    margin:用于控制元素周围空间的间隔,通俗点就是与邻居标签的距离
    border:本身边框
    padding:标签内部内容与边框的巨鹿
    content:盒子的内容
    
    margin-top:10px;
    margin-right:10px;
    margin-bottom:10px;
    margin-left:10px;
    简写:margin:10px 10px 10px 10px ;
    margin:0 auto;  水平居中
    
    padding方法和margin相似
    

    float浮动

    假设我们看到的页面是一个平面的话,那么浮动就会让元素从平面升到空中,任何元素都可以浮动,浮动之后就会自动成为块级元素,只可以向左或向右浮动,知道碰到边框为止。

    注意:浮动有可能导致父标签塌陷的问题

    float:right  向左浮动
    float:left   向右浮动
    

    clear清除浮动

    在clear规定的属性的某一侧是不允许有浮动元素的。

    clear:left;		该标签的左侧是不能有浮动元素的
    clear:right;	该标签的右侧不能有浮动元素
    clear:both;		两个均不能出现浮动元素
    
    清除浮动的影响,除了使用clear还有两种方式:
    1.自己添加一个有高度的div。
    2.通用的解决方式是继承一个自定义的类clearfix,
    .clearfix:after {
        content:'';
        display:block;
        clear:both;
    }
    

    溢出属性overflow

    overflow:visible;		多出内容默认可见,在框外可见
    overfloe:hidden;		多出部分在框外不可见
    overflow:scroll;		加一个滚动条
    overflow:auto;			内容被修剪的话,就会显示滚动条
    
    最佳案例:原型头像的设置。
    <style>
            p {background-color: gray; padding: 20px;}
            #d1 {
                200px;
                height:200px;
                border-radius: 50%;
                overflow: hidden;
            }
            #d2 {
                max- 100%;
            }
    </style>
    
    <div id="d1">
        <img src="https://i3.mmzztt.com/2020/05/29a105.jpg" alt="" id="d2">
    </div>
    

    position定位

    定位分为四种:
    position:static;	默认值,没有定位过。无法作为绝对定位的参照物
    position:relative;	相对定位。以自己原始位置为参照物定位
    position:absolute;	绝对定位。相对定位过的父元素为原点定位
    position:fixed;	固定定位。固定在某一个位置且不会改变,原点是基于浏览器窗口
    

    验证浮动和定位是否脱离文档流(原来的位置是否保存)

    不脱离文档流:相对定位

    脱离文档流:浮动、相对定位、固定定位

    z-index模态框

    是设置对象的层叠顺序,相当于在平面的文档上,又加了一个z轴,而z-index就是设置z的高度。值高的就会压着值低的,导致值低的元素会被遮挡。

    只能针对已经定位过的元素进行设置,同时,比较数值的时候是看父元素的z-index。

    opacity透明度

    定义透明效果,之前在颜色中rgba()也有一个透明度,但是只能针对颜色,而这个透明度则是针对元素。取值范围是0~1之间。

  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/liqianxin/p/13019199.html
Copyright © 2011-2022 走看看