1. 程式人生 > 實用技巧 >SDL開發筆記(三):使用SDL渲染視窗顏色和圖片

SDL開發筆記(三):使用SDL渲染視窗顏色和圖片

目錄

表格標籤

jason 123 read
egon	123 dbj
tank  123 hecha
...
<table>
        <thead>
  					<tr>  一個tr就表示一行
                <th>username</th>  加粗文字
                <td>username</td>  正常文字
            </tr>
  			</thead>  表頭(欄位資訊)
        <tbody>
        		<tr>
                <td>jason</td>
                <td>123</td>
                <td>read</td>
            </tr>
        </tbody>	 表單(資料資訊)
</table>


<table border="1">  加外邊寬
<td colspan="2">egon</td>  水平方向佔多行
<td rowspan="2">DBJ</td>   垂直方向佔多行

# 原生的表格標籤很醜 但是後續我們一般都是使用框架封裝好的 很好看

表單標籤

"""
能夠獲取前端使用者資料(使用者輸入的、使用者選擇、使用者上傳...)基於網路傳送給後端伺服器
"""
# 寫一個註冊功能
<form action=""></form>  在該form標籤內部書寫的獲取使用者的資料都會被form標籤提交到後端

action:控制資料提交的後端路徑(給哪個服務端提交資料)
  	1.什麼都不寫  預設就是朝當前頁面所在的url提交資料
    2.寫全路徑:https://www.baidu.com  朝百度服務端提交
    3.只寫路徑字尾action='/index/'  
    	自動識別出當前服務端的ip和port拼接到前面
      host:port/index/

<label for="d1">  第一種 直接講input框寫在label內
            username:<input type="text" id="d1">
</label>					第二種 通過id連結即可 無需巢狀
<label for="d2">password:</label>
<input type="text" id="d2">
ps:input不跟label關聯也沒有問題
  
"""
label 和 input都是行內標籤
"""



input標籤 就類似於前端的變形金剛  通過type屬性變形
	text:普通文字
  password:密文
	date:日期	
  submit:用來觸發form表單提交資料的動作
  button:就是一個普普通通的按鈕 本身沒有任何的功能 但是它是最有用的,學完js之後可以給它自定義各種功能
  reset:重置內容
  radio:單選
    	預設選中要加checked='checked'
      <input type="radio" name="gender" checked='checked'>男
      當標籤的屬性名和屬性值一樣的時候可以簡寫
      <input type="radio" name="gender" checked>女
	checkbox:多選
  		<input type="checkbox" checked>DBJ
  
  file:獲取檔案  也可以一次性獲取多個
    	<input type="file" multiple>
  hidden:隱藏當前input框
    	釣魚網站
      	
  


select標籤 預設是單選 可以加mutiple引數變多選 預設選中selected
						<select name="" id="" multiple>
                <option value="" selected>新垣結衣</option>
                <option value="" selected>斯佳麗</option>
                <option value="">明老師</option>
            </select>

textarea標籤  獲取大段文字
	  <textarea name="" id="" cols="30" rows="10"></textarea>

# 能夠觸發form表單提交資料的按鈕有哪些(一定要記住)
		1、<input type="submit" value="註冊">
		2、<button>點我</button>
    
# 所有獲取使用者輸入的標籤 都應該有name屬性
	name就類似於字典的key
  使用者的資料就類似於字典的value
  <p>gender:
            <input type="radio" name="gender">男
            <input type="radio" name="gender">女
            <input type="radio" name="gender">其他
  </p>

驗證form表單提交資料

# 接下來的框架程式碼無需掌握  看一下效果即可
pip3 install FLASK

form表單預設提交資料的方式 是get請求  資料是直接放在url後面的
	http://127.0.0.1:5000/index/?username=sdadasdsda&gender=on
你可以通過method指定提交方式
	<form action="http://127.0.0.1:5000/index/" method="post">
  
針對使用者選擇的標籤 使用者不需要輸入內容 但是你需要提前給這些標籤新增內容value值
<p>gender:
            <input type="radio" name="gender" value="male">男
            <input type="radio" name="gender" checked value="female">女
            <input type="radio" name="gender" value="others">其他
</p>
<p>hobby:
            <input type="checkbox" name="hobby" value="basketball">籃球
            <input type="checkbox" checked name="hobby" value="football">足球
            <input type="checkbox" checked name="hobby" value="doublecolorball">雙色球
</p>
<p>province:
            <select name="province" id="">
                <option value="sh">上海</option>
                <option value="bj" selected>北京</option>
                <option value="sz">深圳</option>
            </select>
</p>



"""
form表單提交檔案需要注意
	1.method必須是post
	2.enctype="multipart/form-data"
		enctype類似於資料提交的編碼格式
			預設是urlencoded 只能夠提交普通的文字資料
			formdata 就可以支援提交檔案資料
"""
<form action="http://127.0.0.1:5000/index/" method="post" enctype="multipart/form-data">


"""下面的程式碼無需掌握 你只需要關心form表單即可"""
from flask import Flask, request


app = Flask(__name__)


# 當前url既可以支援get請求也可以支援post請求  如果不寫預設只能支援get請求
@app.route('/index/',methods=['GET','POST'])
def index():
    print(request.form)  # 獲取form表單提交過來的非檔案資料
    # ImmutableMultiDict([('username', 'jason'), ('password', '123132131231233'), ('gender', 'on')])
    print(request.files)  # 獲取檔案資料
    file_obj = request.files.get('myfile.png')
    file_obj.save(file_obj.name)
    return 'OK'

app.run()


# 針對使用者輸入的標籤。如果你加了value 那就是預設值
<label for="d1">username:<input type="text" id="d1" name="username" value="預設值"></label>
disable 禁用
readonly只讀

CSS

什麼是css?

css全稱Cascading Style Sheet層疊樣式表,是專門用來為HTML標籤新增樣式的,讓它變的更加的好看

為何要用css?

解決以下缺點

1,記憶困難:需要記憶每個標籤的所有樣式相關屬性,如果標籤沒有某個樣式相關的屬性,那麼設定了也沒有效果

2,程式碼耦合度高:HTML語義與樣式耦合在一起

3,擴充套件性差:當某一類樣式需要修改時,我們需要找到所有設定了該樣式標籤進行修改


# 註釋
/*單行註釋*/
/*
多行註釋1
多行註釋2
多行註釋3
*/

通常我們在寫css樣式的時候也會用註釋來劃定樣式區域(因為HTML程式碼多所以對呀的css程式碼也會很多)
/*這是部落格園首頁的css樣式檔案*/
/*頂部導航條樣式*/
...
/*左側選單欄樣式*/
...
/*右側選單欄樣式*/
...


# css的語法結構
選擇器 {
  屬性1:值1;
  屬性2:值2;
  屬性3:值3;
  屬性4:值4;
}

# css的四種引入方式
1.嵌入式
style標籤內部直接書寫(為了教學演示方便我們用第一種)
  	<style>
        h1  {
            color: burlywood;
        }
    </style>
2.外聯式
link標籤引入外部css檔案(最正規的方式 解耦合)
      <link rel="stylesheet" href="mycss.css">
3.行內式(一般不用)
  		<h1 style="color: green">老闆好 要上課嗎?</h1>
4,匯入式
<head>
	<style>
    /*形式一:*/
        /*@import "css/mystyle.css";*/
        /*形式二:*/
        @import url("css/mystyle.css");
    </style>
</head>
    	

CSS選擇器

基本選擇器

# id選擇器

# 類選擇器

# 元素/標籤選擇器

# 通用選擇器
<style>
        /*id選擇器*/
        /*#d1 {  !*找到id是d1的標籤 將文字顏色變成綠黃色*!*/
        /*    color: greenyellow;*/
        /*}*/
        /*類選擇器*/
        /*.c1 {  !*找到class值裡面包含c1的標籤*!*/
        /*    color: red;*/
        /*}*/
        /*元素(標籤)選擇器*/
        /*span {  !*找到所有的span標籤*!*/
        /*    color: red;*/
        /*}*/
        /*通用選擇器*/
        /** {  !*將html頁面上所有的標籤全部找到*!*/
        /*    color: green;*/
        /*}*/
</style>

組合選擇器

"""
在前端 我們將標籤的巢狀用親戚關係來表述層級
	<div>div
        <p>div p</p>
        <p>div p
            <span>div p span</span>
        </p>
        <span>span</span>
        <span>span</span>
  </div>
  div裡面的p span都是div的後代
  p是div的兒子
  p裡面的span是p的兒子 是div的孫子
  div是p的父親
  ...
"""

# 後代選擇器
# 兒子選擇器
# 毗鄰選擇器
# 弟弟選擇器

				/*後代選擇器*/
        /*div span {*/
        /*    color: red;*/
        /*}*/

        /*兒子選擇器*/
        /*div>span {*/
        /*    color: red;*/
        /*}*/

        /*毗鄰選擇器*/
        /*div+span {  !*同級別緊挨著的下面的第一個*!*/
        /*    color: aqua;*/
        /*}*/

        /*弟弟選擇器*/
        div~span {  /*同級別下面所有的span*/
            color: red;
        }

屬性選擇器

"""
1 含有某個屬性
2 含有某個屬性並且有某個值
3 含有某個屬性並且有某個值的某個標籤
"""
# 屬性選擇器是以[]作為標誌的

/*[username] {  !*將所有含有屬性名是username的標籤背景色改為紅色*!*/
        /*    background-color: red;*/
        /*}*/

        /*[username='jason'] {  !*找到所有屬性名是username並且屬性值是jason的標籤*!*/
        /*    background-color: orange;*/
        /*}*/

        /*input[username='jason'] {  !*找到所有屬性名是username並且屬性值是jason的input標籤*!*/
        /*    background-color: wheat;*/
        /*}*/

分組與巢狀

div,p,span {  /*逗號表示並列關係*/
            color: yellow;
        }
#d1,.c1,span  {
            color: orange;
        }

偽類選擇器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            background-color: black;
        }
        a:link {  /*訪問之前的狀態*/
            color: red;
        }
        a:hover {  /*需要記住*/
            color: aqua;  /*滑鼠懸浮態*/
        }
        a:active {
            color: black;  /*滑鼠點選不鬆開的狀態  啟用態*/
        }
        a:visited {
            color: darkgray;  /*訪問之後的狀態*/
        }
        p {
            color: darkgray;
            font-size: 48px;
        }
        p:hover {
            color: white;
        }
        
        input:focus {  /*input框獲取焦點(滑鼠點了input框)*/
            background-color: red;
        }
    </style>
</head>
<body>
<a href="https://www.jd.com/">小軒在不在?</a>
<p>點我有你好看哦</p>
<input type="text">
</body>
</html>

偽元素選擇器

p:first-letter {
            font-size: 48px;
            color: orange;
        }
p:before {  /*在文字開頭 同css新增內容*/
            content: '你說的對';
            color: blue;
        }
p:after {
            content: '雨露均沾';
            color: orange;
        }
ps:before和after通常都是用來清除浮動帶來的影響:父標籤塌陷的問題(後面馬上講)

選擇器優先順序

"""
id選擇器
類選擇器
標籤選擇器
行內式
	
"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <style>
        /*
            1.選擇器相同 書寫順序不同
                就近原則:誰離標籤更近就聽誰的
            2.選擇器不同 ...
                行內 > id選擇器  > 類選擇器 > 標籤選擇器
                精確度越高越有效
        */
        #d1 {
            color: aqua;
        }
        /*.c1 {*/
        /*    color: orange;*/
        /*}*/
        /*p {*/
        /*    color: red;*/
        /*}*/
    </style>
<!--    <link rel="stylesheet" href="mycss1.css">-->
</head>
<body>
    <p id="d1" class="c1" style="color: blue">賢妻果然很識趣,有前途~</p>
</body>
</html>

css三大特性

1,繼承性

1,定義:給某一個元素設定一些屬性,該元素的後代也可以用,這個我們就稱之為繼承性
2,注意:
	1,只有以color,font-,text-line-開頭的屬性才可以繼承
	2,a標籤的文字顏色和下劃線是不能繼承別人的
	3,h標籤的文字大小是不能繼承別人的,會變大,但是會在原來的字型大小的基礎上變大
	
	ps:開啟瀏覽器審查元素可以看到一些inherited from...的屬性

3,應用場景:
	通常基於繼承性統一設定網頁的文字顏色,字型,文字大小等樣式

2,層疊性

1,定義:css全稱:Cascading StyleSheet層疊樣式表,層疊性指的就是CSS處理衝突的一種能力,即如果有多個選擇器選中了同一個標籤那麼會有覆蓋效果
2,注意:
	1,層疊性只有在多個選擇器選中了同一個標籤,然後設定了相同的屬性,
	才會發生重疊
	ps:通過谷歌瀏覽器可以檢視到,一些屬性被劃掉了

3,優先順序

1,定義:當多個選擇器選中同一個標籤,並且給同一個標籤設定相同的屬性時,如何層疊就有優先順序來確定
2,優先順序
	整體優先順序從高到低:行內樣式>嵌入樣式>外部樣式
	行內樣式並不推薦使用,所以我們以嵌入為例來介紹優先順序
	
1.大前提:直接選中>間接選中(繼承而來的)

2.如果都是間接選中,那誰離目標標籤最近就聽誰的

3.如果都是直接選中,並且都是同類型的選擇器,那麼就是誰寫的在後面就聽誰的

4.如果都是直接選中,並且是不同型別的選擇器,那麼就會按照選擇器的優先順序來層疊
id>類>標籤>萬用字元>繼承>瀏覽器預設(沒有設定任何屬性)

5.優先順序 !importtant
#1、作用:還有一種不講道理的!import方式來強制指定的屬性的優先順序提升為最高,但是不推薦使用。因為大量使用!import的程式碼是無法維護的。
  
#2、注意:
    1、!important只能用於直接選中,不能用於間接選中
    2、!important只能用於提升被指定的屬性的優先順序,其他屬性的優先順序不會被提升
    3、!important必須寫在屬性值分號的前面
    
    
    
6.優先順序之權重計算
#1、強調
如果都是直接選中,並且混雜了一系列其他的選擇器一起使用時,則需要通過計算機權重來判定優先順序

#2、計算方式
#1、id數多的優先順序高
#2、id數相同,則判定類數多的優先順序高
#3、id數、class數均相同,則判定標籤數多的優先順序高
#4、若id數、class數、標籤數均相同,則無需繼續往下計算了,誰寫在後面誰的優先順序高

css屬性相關

<style>
        p {
            background-color: red;
            height: 200px;
            width: 400px;
        }
        span {
            background-color: green;
            height: 200px;
            width: 400px;
            /*行內標籤無法設定長寬 就算你寫了 也不會生效*/
        }
</style>

字型屬性

p {
            /*font-family: "Arial Black","微軟雅黑","...";  !*第一個不生效就用後面的 寫多個備用*!*/

            /*font-size: 24px;  !*字型大小*!*/

            /*font-weight: inherit;  !*bolder lighter 100~900 inherit繼承父元素的粗細值*!*/

            /*color: red;  !*直接寫顏色英文*!*/
            /*color: #ee762e;  !*顏色編號*!*/
            /*color: rgb(128,23,45);  !*三基色 數字  範圍0-255*!*/
            /*color: rgba(23, 128, 91, 0.9);  !*第四個引數是顏色的透明度 範圍是0-1*!*/

            /*當你想要一些顏色的時候 可以利用現成的工具
                1 pycharm提供的取色器
                2 qq或者微信截圖功能
  							也可以多軟體結合使用 
            */
        }

文字屬性

p {
            /*text-align: center;  !*居中*!*/
            /*text-align: right;*/
            /*text-align: left;*/
            /*text-align: justify;  !*兩端對齊*!*/

            /*text-decoration: underline;*/
            /*text-decoration: overline;*/
            /*text-decoration: line-through;*/
            /*text-decoration: none;*/
            /*在html中 有很多標籤渲染出來的樣式效果是一樣的*/
            font-size: 16px;
            text-indent: 32px;   /*縮排32px*/
        }
        a {
            text-decoration: none;  /*主要用於給a標籤去掉自帶的下劃線  需要掌握*/
        }

背景圖片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        #d1 {
            height: 500px;
            background-color: red;
        }
        #d2 {
            height: 500px;
            background-color: green;
        }
        #d3 {
            height: 500px;
            background-image: url("222.png");
            background-attachment: fixed;
        }
        #d4 {
            height: 500px;
            background-color: aqua;
        }
    </style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="d4"></div>
</body>
</html>

邊框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>

        p {
            background-color: red;

            border-width: 5px;
            border-style: solid;
            border-color: green;

        }
        div {
            /*border-left-width: 5px;*/
            /*border-left-color: red;*/
            /*border-left-style: dotted;*/

            /*border-right-width: 10px;*/
            /*border-right-color: greenyellow;*/
            /*border-right-style: solid;*/

            /*border-top-width: 15px;*/
            /*border-top-color: deeppink;*/
            /*border-top-style: dashed;*/

            /*border-bottom-width: 10px;*/
            /*border-bottom-color: tomato;*/
            /*border-bottom-style: solid;*/
            border: 3px solid red;  /*三者位置可以隨意寫*/

        }
        #d1 {
            background-color: greenyellow;
            height: 400px;
            width: 400px;
            border-radius: 50%;  /*直接寫50%即可 長寬一樣就是圓 不一樣就是橢圓*/
        }
    </style>
</head>
<body>
    <p>窮人  被diss到了  哭泣.png</p>
<div>媽拉個巴子,媽拉個巴子,媽拉個巴子,媽拉個巴子</div>
<div id="d1"></div>
</body>
</html>

display屬性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        /*#d1 {*/
        /*    !*display: none;  !*隱藏標籤不展示到前端頁面並且原來的位置也不再佔有了 但是還存在於文件上*!*!*/
        /*    display: inline;  !*將標籤設定為行內標籤的特點*!*/
        /*}*/
        /*#d2 {*/
        /*    display: inline;*/
        /*}*/
        /*#d1 {*/
        /*    display: block;  !*將標籤設定成塊兒級標籤的特點*!*/
        /*}*/
        /*#d2 {*/
        /*    display: block;*/
        /*}*/
        /*#d1 {*/
        /*    display: inline-block;*/
        /*}*/
        /*#d2 {*/
        /*    display: inline-block;  !*標籤即可以在一行顯示又可以設定長寬*!*/
        /*}*/
    </style>
</head>
<body>
<div style="display: none">div1</div>
<div>div2</div>
<div style="visibility: hidden">單純的隱藏 位置還在</div>  
<div>div4</div>
<!--<div id="d1" style="height: 100px;width: 100px;background-color: red">01</div>-->
<!--<div id="d2" style="height: 100px;width: 100px;background-color: greenyellow">02</div>-->
<!--<span id="d1" style="height: 100px;width: 100px;background-color: red">span</span>-->
<!--<span id="d2" style="height: 100px;width: 100px;background-color: greenyellow">span</span>-->

<!--<div id="d1" style="height: 100px;width: 100px;background-color: red">01</div>-->
<!--<div id="d2" style="height: 100px;width: 100px;background-color: greenyellow">02</div>-->
</body>
</html>

盒子模型

"""
盒子模型
	就以快遞盒為例
		快遞盒與快遞盒之間的距離(標籤與標籤之間的距離 margin外邊距)
		盒子的厚度(標籤的邊框 border)
		盒子裡面的物體到盒子的距離(內容到邊框的距離  padding內邊距)
		物體的大小(內容 content)
	
	
	如果你想要調整標籤與標籤之間的距離 你就可以調整margin
	
	瀏覽器會自帶8px的margin,一般情況下我們在寫頁面的時候,上來就會先將body的margin去除
	
"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            margin: 0;  /*上下左右全是0
            /*margin: 10px 20px;  !* 第一個上下 第二個左右*!*/
            /*margin: 10px 20px 30px;  !*第一個上  第二個左右  第三個下*!*/
            /*margin: 10px 20px 30px 40px;  !*上 右 下 左*!*/
        }
        /*p {*/
        /*    margin-left: 0;*/
        /*    margin-top: 0;*/
        /*    margin-right: 0;*/
        /*    margin-bottom: 0;*/
        /*}*/

        #d1 {
            margin-bottom: 50px;
        }


        #d2 {
            margin-top: 20px;  /*不疊加 只取大的*/
        }

        #dd {
            margin: 0 auto;  /*只能做到標籤的水平居中*/
        }
        p {
            border: 3px solid red;
            /*padding-left: 10px;*/
            /*padding-top: 20px;*/
            /*padding-right: 20px;*/
            /*padding-bottom: 50px;*/

            /*padding: 10px;*/
            /*padding: 10px 20px;*/
            /*padding: 10px 20px 30px;*/
            /*padding: 10px 20px 30px 40px;*/  /*規律和margin一模一樣*/
        }
    </style>
</head>
<body>
<!--    <p style="border: 1px solid red;" id="d1">ppp</p>-->
<!--    <p style="border: 1px solid orange;" id="d2">ppp</p>-->
<!--<div style="border: 3px solid red;height: 400px;width: 400px">-->
<!--    <div id='dd' style="border: 1px solid orange;height: 50px;width: 50px;background-color: blue;"></div>-->
<!--</div>-->

<p>ppp</p>

</body>
</html>

浮動

"""浮動的元素 沒有塊兒級一說 本身多大浮起來之後就只能佔多大"""
只要是設計到頁面的佈局一般都是用浮動來提前規劃好
<style>
        body {
            margin: 0;
        }
        #d1 {
            height: 200px;
            width: 200px;
            background-color: red;
            float: left;  /*浮動  浮到空中往左飄*/
        }
        #d2 {
            height: 200px;
            width: 200px;
            background-color: greenyellow;
            float: right;   /*浮動 浮到空中往右飄*/
        }
</style>