H5学习笔记14 常见单位 响应式布局 rem+vw推导过程 定位移动端布局 flexible.js 布局 跑马灯 网格布局 反转背面不可见 视角 双飞翼布局

响应式布局靠的是媒体查询
 1 <style>
 2         *{
 3             margin:0;
 4             padding:0;
 5         }
 6         div{
 7             width: 100%;
 8             height: 200px;
 9         }
10         /* 媒体查询关键字  @media  */
11         /* a>1200 */
12         @media screen and (min-width:1200px){
13             div{
14                 background: red;
15             }
16         }
17 
18         /* 700<a<1200 */
19         @media screen and (min-width:700px) and (max-width:1200px){
20             div{
21                 background: yellow;
22             }
23         }
24 
25         /* a<700 */
26         @media screen and (max-width:700px){
27             div{
28                 background: cyan;
29             }
30         }
31     </style>
32 </head>
33 <body>
34     <div>我的颜色变变变</div>
35 </body>

常见单位

<!-- 常见单位
1、px   是一个固定值  不可以跟随设变大小的变化而变化  不建议使用在移动端

2、pt   9pt==12px   同上

3、em  默认情况下 1em==16px     
em和父元素的font-size有关  如果父元素font-size:40px;  则1em==40px
多用于首行缩进  不建议使用在移动端

4、rem 默认情况下  1rem==16px     
rem的大小与根节点html的font-size相关  
如果html{font-size:100px;} 则1rem==100px; 一般用于移动端rem+vw布局


5、vw   他是设备宽度百分之一的大小    是一个单位  可以修饰宽度 高度  文字大小 间距等
他是可以根据设备的大小变化而变化的    用于移动端

6、vh  他是设备高度的百分之一大小     是一个单位  可以修饰宽度 高度 文字大小 间距等、

7、vmin   他是设备宽高中 较小的一方的百分之一大小  是一个单位  可以修饰宽度 高度 文字大小 间距等、
比如说 w1000   h400   此时 1vmin=4px  
如果说 w600    h1000  此时 1vmin=6px


8、vmax   他是设备宽高中 较大的一方的百分之一大小  是一个单位  可以修饰宽度 高度 文字大小 间距等、
比如说 w1000   h400   此时 1vmax=10px  
如果说 w600    h1000  此时 1vmax=10px
-->


<!-- 
当前设备宽度1080px   高度720px
此时   1vw=10.8px
      1vh= 7.2px -->

 

rem+vw推导过程

 

<style>
        *{
            margin:0;
            padding:0;
        }
        header{
            设计图是二倍图   量出的大小要除以2  
            h88    写的时候就是 h44 
            我们页面中 px这个单位是不能用的   为什么   因为他是一个固定值  不会跟随页面大小的变化而变化

            所以 我们使用rem+vw布局
            这个时候  我们知道 1rem默认是16px  他的大小根据html{font-size:}变化而变化
            如果我现在想把44px转换为rem   44px/16 有点难  我不能一下子算出来

            那如果1rem是1px呢    那么44px  就是44rem  是不是很好算  
            但是 这个数有点大  也不是不可以  你可以这样子规定  

            现在  我想规定   1rem==100px    这样子 44px----0.44rem    这是我规定的 
            因为  rem大小和html文字大小相关    所以这个时候  我需要做一件事情   在页面中声明
            html{font-size:100px} 
            此时  1rem==100px     但是还有一个问题   刚说过移动端不建议使用px这个单位   到头来  这不还是用了px吗
            我们需要将px换成可以根据设备而等比例缩放的单位   是什么呢?   vw 

            已知当前的设计图是640px      所以我们当前是以320px的设备为标准    

            那这个时候   100vw = 320px    (设备宽度是320px   1vw是设备宽度百分之一)

            所以  1vw = 3.2px 
            我们之前规定了 html{font-size:100px}
            100px = ?vw

            100px=31.25vw  

            所以此时  html{font-size:31.25vw}    此时1rem==100px 

            所以  640的设计图   你测量大小后   除以2(dpr)   得到的值  再除以100    就变成了对应的rem
            比如  测量高度88px    88/2/100=0.44rem


            现在  已知设计图为750px    我如果希望1rem==100px   求html{font-size:26.67vw}

            

        }
    </style>
</head>
<body>
    <header></header>
</body>

 

 

 

定位移动端布局

 

 1   <!-- 一整屏页面  头尾固定 -->
 2     <style>
 3         *{
 4             margin:0;
 5             padding:0;
 6         }
 7         /* 假设是640的设计图 我希望1rem = 100px */
 8         html{
 9             font-size: 31.25vw;
10         }
11         html,body{
12             height: 100%;
13         }
14         body{
15             /* 重置文字大小 */
16             font-size: 0.12rem;
17         }
18         header{
19             height: 0.5rem;
20             background: rgba(22, 77, 211, .3);
21             /* 定位 一定记得设置宽度 */
22             position: sticky;
23             left:0;
24             top:0;
25             width: 100%;
26         }
27         main{
28             /* 高度百分百 */
29             height: 100%;
30             background: red;
31             padding-bottom: 0.6rem;
32         }
33         
34        
35     </style>
36 </head>
37 <body>
38     <header>头部</header>
39     <main>
40        
41             开头内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域
42        
43     </main>
44     <footer>哈哈哈</footer>
45 </body>

 

flexible.js  布局
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6     <title>flexible.js布局</title>
  7     <link rel="stylesheet" href="../../day5-1/iconfont/iconfont.css">
  8     <style>
  9         *{
 10             margin:0;
 11             padding:0;
 12         }
 13         /* 一整屏页面 */
 14         html,body{
 15             height: 100%;
 16         }
 17         body{
 18             display: flex;
 19             flex-direction: column;
 20             font-size: 0.3rem;
 21         }
 22         header{
 23             height: 0.88rem;
 24             display: flex;
 25             line-height: 0.88rem;
 26             /* 两端环绕对齐 */
 27             justify-content: space-around;
 28             color:#595959;
 29         }
 30         header section:nth-of-type(1){
 31             color:#ff554b;
 32             font-size: 0.36rem;
 33         }
 34         .icon-chazhao{
 35             font-size: 0.3rem;
 36         }
 37         main{
 38             flex:1;
 39             /* 高度占据剩余空间 */
 40             background: #f5f4f9;
 41             overflow: auto;
 42         }
 43         figure{
 44             margin-bottom: 0.21rem;
 45             background: #fff;
 46         }
 47         figure>img{
 48             width: 100%;
 49             height: 4.22rem;
 50             /* 解决图片3px问题 */
 51             display: block;
 52             border:0;
 53         }
 54         figcaption{
 55             height: 0.96rem;
 56             line-height: 0.96rem;
 57             border-bottom: 0.01rem solid #e8e8e8;
 58             /* 设置弹性盒 */
 59             display: flex;
 60             justify-content: space-between;
 61             padding:0 0.3rem;
 62         }
 63         figcaption img{
 64             vertical-align: middle;
 65         }
 66         figcaption span{
 67             font-size: 0.24rem;
 68             color:#9c9c9c;
 69             margin-left: 0.12rem;
 70             margin-right: 0.33rem;
 71         }
 72         .left span{
 73             color:#282828;
 74             font-size: 0.26rem;
 75         }
 76         footer{
 77             background: #f5f5f5;
 78             height: 0.88rem;
 79             /* 设置弹性盒 */
 80             display: flex;
 81             justify-content: space-around;
 82             /* 让项目垂直居中 */
 83             align-items: center;
 84         }
 85         footer a{
 86             text-align: center;
 87             text-decoration: none;
 88             font-size: 0.2rem;
 89             color:#505050;
 90         }
 91         footer .iconfont{
 92             font-size: 0.4rem;
 93             display: block;
 94         }
 95         footer a:nth-of-type(2){
 96             color:#f55b5b;
 97         }
 98     </style>
 99 </head>
100 <body>
101     <header>
102         <section>推荐</section>
103         <section>逗比剧</section>
104         <section>社会</section>
105         <section>呆萌</section>
106         <section>娱乐</section>
107         <i class="iconfont icon-chazhao"></i>
108     </header>
109     <main>
110         <figure> 
111             <img src="../images/视频_02.jpg" alt="">
112             <figcaption>
113                 <div class="left">
114                     <img src="../images/视频_05.jpg" alt="">
115                     <span>科技微讯</span>
116                 </div>
117                 <div class="right">
118                     <span>382万次播放</span>
119                     <img src="../images/视频_08.jpg" alt="">
120                     <span>4227</span>
121                     <img src="../images/视频_11.jpg" alt="">
122                 </div>
123             </figcaption>
124         </figure>
125         
126         <figure> 
127             <img src="../images/视频_02.jpg" alt="">
128             <figcaption>
129                 <div class="left">
130                     <img src="../images/视频_05.jpg" alt="">
131                     <span>科技微讯</span>
132                 </div>
133                 <div class="right">
134                     <span>382万次播放</span>
135                     <img src="../images/视频_08.jpg" alt="">
136                     <span>4227</span>
137                     <img src="../images/视频_11.jpg" alt="">
138                 </div>
139             </figcaption>
140         </figure>
141 
142         <figure> 
143             <img src="../images/视频_02.jpg" alt="">
144             <figcaption>
145                 <div class="left">
146                     <img src="../images/视频_05.jpg" alt="">
147                     <span>科技微讯</span>
148                 </div>
149                 <div class="right">
150                     <span>382万次播放</span>
151                     <img src="../images/视频_08.jpg" alt="">
152                     <span>4227</span>
153                     <img src="../images/视频_11.jpg" alt="">
154                 </div>
155             </figcaption>
156         </figure>
157 
158     </main>
159     <footer>
160         <a href="javascript:;">
161             <i class="iconfont icon-shouye2"></i>
162             首页
163         </a>
164         <a href="javascript:;">
165             <i class="iconfont icon-play-fill"></i>
166             视频
167         </a>
168         <a href="javascript:;">
169             <i class="iconfont icon-xihuan"></i>
170             关注
171         </a>
172         <a href="javascript:;">
173             <i class="iconfont icon-wode1"></i>
174             未登录
175         </a>
176     </footer>
177 </body>
178 <!-- 引入js  -->
179 <script src="../js/flexible.js"></script>
180 </html>
181 <!-- rem+vw布局  -->
182 <!-- 1、要写很完全的meta name="viewport"
183 2、640的设计图 要规定html{font-size:31.25vw}
184    750的设计图 要规定html{font-size:26.67vw}
185 3、测量的大小 要除以2   再转换为rem  -->
186 
187 
188 
189 <!-- flexible.js  布局    建议应用于750的设计图
190 引入js文件即可
191 1、不要写meta 删掉!!!
192 2、不需要给html设置font-size
193 3、测量的大小不需要除以2  直接除以100变为rem -->

 

跑马灯

 

 1     <style>
 2         *{
 3             margin:0;
 4             padding:0;
 5         }
 6         marquee{
 7             background: #0f0;
 8             width: 500px;
 9             height: 200px;
10         }
11     </style>
12 </head>
13 <body>
14     <!-- direction方向  属性值有left  right  up  down  -->
15 
16     <!-- behavior  运动行为   有来回 alternate -->
17     <!-- scrollamount速度   值越大 越快 -->
18     <marquee behavior="" direction="up" scrollamount="100">
19         象鼻山位于桂林市象山区桃花江与漓江汇流处,海拔220米,相对高度55米,因酷似一头舒卷长鼻、畅饮清流的大象而得名。象鼻山与漓江交相辉映,是桂林山水融合的典范之一
20     </marquee>
21 </body>

 

网格布局 容器属性(给父元素加)
  1     <style>
  2         main{
  3             width: 80%;
  4             height: 800px;
  5             background: pink;
  6             /* 设置网格布局 */
  7             display: grid;
  8             /* 你要分成几行几列呢 */
  9             /* 分成三列  分别为100px 400px 300px */
 10             /* grid-template-columns:100px 400px 300px ; */
 11             /* 分成几行   分成4行  分别为200px 200px  200px  200px */
 12             /* grid-template-rows: 200px 200px 200px 200px; */
 13 
 14 
 15 
 16             /* 还可以将行列的宽度大小设置成百分比 */
 17             /* grid-template-columns: 25% 25% 25% 25%;
 18             grid-template-rows: 33.33% 33.33% 33.33%; */
 19 
 20 
 21             /*还可以将行列的宽度大小设置 repeat(参数1,参数2)
 22             参数1 : 重复的次数
 23             参数2 : 重复的数值或者重复的模式 */
 24             /* grid-template-columns:repeat(4,25%);
 25             grid-template-rows:repeat(2,30%); */
 26 
 27 
 28             /* 还可以设置自动填充 auto-fill关键字( 自动填充 )
 29             当项目宽高固定,容器不固定的情况下,自动填充网格列数 */
 30             /* grid-template-columns:repeat(auto-fill,300px); */
 31 
 32 
 33             /* fr关键字(列宽片段)    等分 */
 34             /* grid-template-columns: 1fr 2fr 3fr; */
 35 
 36 
 37 
 38             /* minmax() 功能函数 
 39             minmax(100px, 1fr)表示列宽不小于100px,不大于1fr */
 40             /* grid-template-columns: 2fr minmax(400px,2fr) 1fr; */
 41 
 42 
 43             /* auto 关键字  自动填充 */
 44             /* grid-template-columns: 100px 200px auto; */
 45 
 46 
 47             /* 列间距 */
 48             /* grid-column-gap: 20px; */
 49 
 50             /* 行间距 */
 51             /* grid-row-gap: 30px; */
 52 
 53 
 54             grid-template-columns: 100px 100px 100px;
 55             grid-template-rows: 100px 100px 100px;
 56             /* grid-template-areas: 'h b c'
 57                      'd e f'
 58                      'g a i'; */
 59 
 60             
 61          /* 规划子元素放置的顺序(默认为先排行后排列) */
 62          /* grid-auto-flow: column; */
 63 
 64 
 65          /* 设置单元格内容在单元格内 水平 | 垂直 的对齐方式 */
 66          /* 水平 */
 67          /* justify-items: start;靠左 */
 68          /* justify-items: center; 每一个单元格中间 */
 69          /* justify-items: end;靠右 */
 70          /* justify-items: stretch; 当项目没有设置大小  则宽度和列宽一样 */
 71          /* 垂直 */
 72          /* align-items: stretch;当项目没有设置大小  则高度和列高一样 */
 73          /* align-items: center; 居中 */
 74          /* align-items: start;靠上 */
 75          /* align-items: end; */
 76         /* place-items:  <justify-items>  <align-items>   复合式写法*/
 77 
 78 
 79 
 80             /* 设置整个内容区域在容器里面的水平 | 垂直 对齐方式 */
 81             /* 可以理解为项目们整体在 父元素区域的排列 */
 82             /* justify-content: start;整体靠左 */
 83             /* justify-content: center;整体居中 */
 84             /* justify-content: end;整体靠右 */
 85             /* justify-content: space-around;两端环绕对齐 */
 86             /* justify-content: space-between; 两端顶格对齐 */
 87             /* justify-content: space-evenly;等距对齐 */
 88             /* 垂直 */
 89             /* align-content: start;整体靠左 */
 90             /* align-content: center;整体居中 */
 91             /* align-content: end;整体靠右 */
 92             /* align-content: space-around;两端环绕对齐 */
 93             /* align-content: space-between;两端顶格对齐 */
 94             /* align-content: space-evenly;等距对齐 */
 95             /* place-content:  <justify-content>  <align-content>   复合式写法 */
 96 
 97         }
 98         section{
 99             background: #0f0;
100             border:1px solid #000;
101         }
102         section:nth-of-type(3){
103             /* grid-column-start属性:左边框所在的垂直网格线
104             grid-column-end属性:右边框所在的垂直网格线
105             grid-row-start属性:上边框所在的水平网格线
106             grid-row-end属性:下边框所在的水平网格线 */
107 
108             grid-column-start: 1;
109             grid-column-end: 4;
110             grid-row-start: 1;
111             grid-row-end: 3;
112 
113             /* grid-column属性是grid-column-start和grid-column-end的合并简写形式
114             grid-row属性是grid-row-start属性和grid-row-end的合并简写形式。
115             注意  / 前后空格隔开 */
116         }
117     </style>
118 </head>
119 <body>
120     <main>
121         <section>1</section>
122         <section>2</section>
123         <section>3</section>
124         <section>4</section>
125         <section>5</section>
126         <section>6</section>
127         <section>7</section>
128         <section>8</section>
129         <section>9</section>
130     </main>
131 </body>

 

反转背面不可见

 

 1 <style>
 2         h1{
 3             width: 300px;
 4             height: 300px;
 5             background: pink;
 6             transition: 1s;
 7             /* 背面不可见  也就是说 翻转180deg  啥也看不见 */
 8             backface-visibility: hidden;
 9         }
10         h1:hover{
11             transform: rotateY(180deg);
12         }
13     </style>
14 </head>
15 <body>
16     <h1>好好学习</h1>
17 </body>

 

 

 

视角

 

 1 <style>
 2         html,body{
 3             height: 100%;
 4         }
 5         body{
 6             /* 视角   3D里面使用的 */
 7             perspective: 1200px;
 8         }
 9         /* 视角   是说 你看元素的远近
10         横看成岭侧成峰,远近高低各不同
11         不识庐山真面目,只缘身在此山中 */
12 
13         @keyframes xz {
14             0%{ transform: rotateX(10deg) rotateY(10deg);}
15             100%{ transform: rotateX(10deg) rotateY(1000deg);}
16         }
17        /* 统一图片大小 */
18        img{
19            width: 200px;
20            height: 300px;
21            /* 设置定位  先让图片们都在一个位置 */
22            position: absolute;
23            left:0;
24            top:0;
25        }
26        /* 设置包裹图片的父元素大小和一张图片一样 */
27        div{
28            width: 200px;
29            height: 300px;
30            background: cyan;
31            /* 希望他垂直水平居中浏览器 */
32            position: absolute;
33            left:0;
34            top:0;
35            right:0;
36            bottom:0;
37            margin:auto;
38         animation: xz 30s linear infinite;
39            /* 如果 需要3d界面的样式   一定要给3d元素的 父元素设置3d空间属性 */
40            transform-style: preserve-3d;  /* 默认值flat 平面 */
41        }
42        img:nth-of-type(1){
43            transform: rotateY(30deg) translateZ(400px);
44        }
45        img:nth-of-type(2){
46            transform: rotateY(60deg) translateZ(400px);
47        }
48        img:nth-of-type(3){
49            transform: rotateY(90deg) translateZ(400px);
50        }
51        img:nth-of-type(4){
52            transform: rotateY(120deg) translateZ(400px);
53        }
54        img:nth-of-type(5){
55            transform: rotateY(150deg) translateZ(400px);
56        }
57        img:nth-of-type(6){
58            transform: rotateY(180deg) translateZ(400px);
59        }
60        img:nth-of-type(7){
61            transform: rotateY(210deg) translateZ(400px);
62        }
63        img:nth-of-type(8){
64            transform: rotateY(240deg) translateZ(400px);
65        }
66        img:nth-of-type(9){
67            transform: rotateY(270deg) translateZ(400px);
68        }
69        img:nth-of-type(10){
70            transform: rotateY(300deg) translateZ(400px);
71        }
72        img:nth-of-type(11){
73            transform: rotateY(330deg) translateZ(400px);
74        }
75        img:nth-of-type(12){
76            transform: rotateY(360deg) translateZ(400px);
77        }
78     </style>
79 </head>
80 <body>
81     <div>
82         <img src="images/1.jpeg" alt="">
83         <img src="images/1.jpg" alt="">
84         <img src="images/2.jpg" alt="">
85         <img src="images/3.jpg" alt="">
86         <img src="images/4.jpg" alt="">
87         <img src="images/6.jpg" alt="">
88         <img src="images/7.jpg" alt="">
89         <img src="images/5.jpg" alt="">
90         <img src="images/8.jpg" alt="">
91         <img src="images/9.jpg" alt="">
92         <img src="images/10.jpg" alt="">
93         <img src="images/11.jpg" alt="">
94     </div>
95 </body>

 

双飞翼布局

 

<style>
        *{
            margin:0;
            padding:0;
        }
        .left{
            width: 200px;
            height: 500px;
            background: yellow;
            float: left;
        }
        .right{
            width: 300px;
            height: 600px;
            background: red;
            float: right;
        }
        .center{
            /* 注意!!1中间部分不要设置宽度 */
            height: 900px;
            background: cyan;
            overflow: hidden;
        }
    </style>

</head>
<body>
    <!-- 注意!!!中间区域   一定要写在结构最后    左右部分先写出来 -->
    <div class="left"></div>
    <div class="right"></div>
    <div class="center"></div>
</body>

 

 

 

 

 

 

上一篇:说说em/px/rem/vh/vw的区别?


下一篇:css写多边形边框(clip-path)