攜程移動端靜態首頁flex布局(彈性布局)
主要知識點:flex布局&屬性選擇器&陰影&背景漸變
HTML結構
<body>
<!-- 頂部搜索 -->
<div class="search-index">
<div class="search">搜索:目的地/酒店/景點/航班號</div>
<a href="#" class="user">我 的</a>
</div>
<!-- focus模塊 -->
<div class="focus">
<img src="./imgs/focus.jpg" alt="">
</div>
<!-- 局部導航模塊 -->
<div class="local-nav">
<a href="#">
<span class="local-nav-icon1" title="景點·玩樂"></span>
<span>景點·玩樂</span>
</a>
<a href="#" title="周邊游">
<span class="local-nav-icon2"></span>
<span>周邊游</span>
</a>
<a href="#" title="美食林">
<span class="local-nav-icon3"></span>
<span>美食林</span>
</a>
<a href="#" title="一日游">
<span class="local-nav-icon4"></span>
<span>一日游</span>
</a>
<a href="#" title="當地攻略">
<span class="local-nav-icon5"></span>
<span>當地攻略</span>
</a>
</div>
<!-- 主導航欄模塊 -->
<nav>
<div class="nav-common">
<li><a href="#">酒店</a></li>
<li class="two">
<a href="#">海外酒店</a>
<a href="#">特價酒店</a>
</li>
<li class="two">
<a href="#">團購</a>
<a href="#">民宿·客棧</a>
</li>
</div>
<div class="nav-common">
<li><a href="#">機票</a></li>
<li class="two">
<a href="#">火車票</a>
<a href="#">特價機票</a>
</li>
<li class="two">
<a href="#">汽車票·船票</a>
<a href="#">專車·租車</a>
</li>
</div>
<div class="nav-common">
<li><a href="#">旅游</a></li>
<li class="two">
<a href="#">門票</a>
<a href="#">目的地攻略</a>
</li>
<li class="two">
<a href="#">郵輪旅行</a>
<a href="#">定制旅行</a>
</li>
</div>
</nav>
<!-- 生活服務模塊 -->
<div class="life-sevice">
<div class="rol1">
<a href="#">
<span></span>
<span>WiFi電話卡</span>
</a>
<a href="#">
<span></span>
<span>保險簽證</span>
</a>
<a href="#">
<span></span>
<span>外幣兌換</span>
</a>
<a href="#">
<span></span>
<span>購物</span>
</a>
<a href="#">
<span></span>
<span>當地向導</span>
</a>
</div>
<div class="rol2">
<a href="#">
<span></span>
<span>自由行</span>
</a>
<a href="#">
<span></span>
<span>境外玩樂</span>
</a>
<a href="#">
<span></span>
<span>禮品卡</span>
</a>
<a href="#">
<span></span>
<span>信用卡</span>
</a>
<a href="#">
<span></span>
<span>更多</span>
</a>
</div>
</div>
<!-- 熱門活動模塊 -->
<div class="hot">
<h2>
<div class="left">熱門活動</div>
<a class="right" href="#">獲取更多福利></a>
</h2>
<div class="rol1">
<a href="#"><img src="./imgs/pic1.jpg" alt=""></a>
<a href="#"><img src="./imgs/pic2.jpg" alt=""></a>
</div>
<div class="rol2">
<a href="#"><img src="./imgs/pic3.jpg" alt=""></a>
<a href="#"><img src="./imgs/pic4.jpg" alt=""></a>
</div>
<div class="rol3">
<a href="#"><img src="./imgs/pic5.jpg" alt=""></a>
<a href="#"><img src="./imgs/pic6.jpg" alt=""></a>
</div>
</div>
<!-- 底部模塊 -->
<footer>
<div class="banner">
<a href="#">
<span></span>
<span>電話預訂</span>
</a>
<a href="#">
<span></span>
<span>下載客戶端</span>
</a>
<a href="#">
<span></span>
<span>我的</span>
</a>
</div>
<div class="detail">
<a href="#">網站地圖 | Language | 電腦版</a>
<p>@2021攜程旅行 | 滬ICP備08023580號</p>
</div>
</footer>
</body>
思路復盤
頂部搜索模塊:一個.search-index大盒子里有兩個小盒子(.search&.user)
*大盒子設置display:flex;.search盒子設置flex:1;保證頁面拉大時搜索框跟着變大
*小盒子里的圖標使用偽元素選擇器制作,簡化HTML結構
局部導航欄模塊:一個.local-nav的大盒子里放五個a,每個a里面裝兩個span盒子
*大盒子設置display:flex;每個a盒子設置flex:1;使大盒子被平均分成五份,每個a各占一份
*每個a盒子也設置display:flex;&flex-direction:column;&align-items:center;使a盒子里面的內容水平居中
其他的幾個主要的盒子思路都和這個差不多了
CSS代碼
body {
max-width: 540px;
min-width: 320px;
margin: 0 auto;
font: normal 14px/1.5 Tahoma, Verdana;
color: #000;
background: #f2f2f2;
overflow-x: hidden;
-webkit-tap-highlight-color: transparent;
box-sizing: border-box;
}
a {
text-decoration: none;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
li {
list-style: none;
}
.search-index {
display: flex;
width: 100%;
/*固定的盒子要有寬度 */
height: 44px;
position: fixed;
top: 0;
left: auto;
max-width: 540px;
min-width: 320px;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background-color: #f6f6f6;
}
.search-index .search {
flex: 1;
margin: 5px 5px;
height: 28px;
border: 1px solid #ccc;
border-radius: 5px;
margin: 7px 10px;
line-height: 26px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.45);
font-size: 12px;
color: #666;
}
.search-index .search::before {
content: "";
display: inline-block;
width: 15px;
height: 15px;
background: url(../imgs/sprite.png) no-repeat -59px -278px;
background-size: 104px auto;
margin: 5px 8px;
vertical-align: middle;
}
.search-index .user {
width: 44px;
height: 44px;
color: #2eaae0;
font-size: 12px;
text-align: center;
}
.search-index .user::before {
content: "";
display: block;
width: 24px;
height: 26px;
background: url(../imgs/sprite.png) no-repeat -59px -193px;
background-size: 104px auto;
margin: 3px auto 0 auto;
}
/* focus模塊 */
.focus {
margin-top: 47px;
}
.focus img {
width: 100%;
}
/* 局部導航欄 */
.local-nav {
display: flex;
height: 64px;
background-color: #fff;
border-radius: 8px;
margin: 3px 5px;
}
.local-nav a {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
color: #222;
font-size: 12px;
}
.local-nav span[class^="local-nav-icon"] {
width: 32px;
height: 32px;
background: url(../imgs/localnav_bg.png) no-repeat 0 0;
background-size: 32px auto;
margin: 9px 0 5px 0;
}
.local-nav a .local-nav-icon2 {
background-position: 0 -32px;
}
.local-nav a .local-nav-icon3 {
background-position-y: -64px;
}
.local-nav a .local-nav-icon4 {
background-position-y: -96px;
}
.local-nav a .local-nav-icon5 {
background-position-y: -128px;
}
/* 主導航欄模塊 */
nav {
overflow: hidden;
height: 270px;
margin: 0 4px 5px 4px;
border-radius: 8px;
}
nav .nav-common {
display: flex;
height: 90px;
background: -webkit-linear-gradient(left, #FA5A55, #FA994D);
margin-bottom: 5px;
}
nav .nav-common:nth-child(2) {
background: -webkit-linear-gradient(left, #4B90ED, #53BCED);
}
nav .nav-common:nth-child(3) {
background: -webkit-linear-gradient(left, #34C2A9, #6CD559);
}
nav .nav-common li {
flex: 1;
display: flex;
border-left: 1px solid #fff;
border-bottom: 1px solid #fff;
}
nav .nav-common li a {
flex: 1;
text-align: center;
line-height: 45px;
text-shadow: 1px 1px rgba(0, 0, 0, 0.45);
font-size: 12px;
color: #fff;
}
nav .nav-common li:nth-child(1) a {
background: url(../imgs/hotel.png) no-repeat bottom center;
background-size: 121px auto;
}
nav .nav-common:nth-child(2) li:nth-child(1) a {
background: url(../imgs/plane.png) no-repeat bottom center;
background-size: 121px auto;
}
nav .nav-common:nth-child(3) li:nth-child(1) a {
background: url(../imgs/vacation.png) no-repeat bottom center;
background-size: 121px auto;
}
nav .nav-common li:nth-child(n+2) {
display: flex;
flex-direction: column;
}
nav .nav-common li:nth-child(n+2) a {
flex: 1;
height: 45px;
}
nav .nav-common li:nth-child(n+2) a:nth-child(1) {
border-bottom: 1px solid #fff;
}
/* 生活服務模塊 */
.life-sevice {
display: flex;
flex-direction: column;
border-radius: 8px;
background-color: #fff;
margin: 0 4px 5px 4px;
height: 115px;
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
}
.life-sevice .rol1,
.rol2 {
flex: 1;
display: flex;
}
.life-sevice a {
flex: 20%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 8px 0 0 0;
color: #000;
font-size: 12px;
}
.life-sevice div a span {
flex: 1;
}
.life-sevice div a span:nth-child(1) {
width: 28px;
height: 28px;
background: url(../imgs/subnav-bg.png) no-repeat;
background-size: 28px auto;
}
.life-sevice .rol1 a:nth-child(2) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -30px;
background-size: 28px auto;
}
.life-sevice .rol1 a:nth-child(3) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -64px;
background-size: 28px auto;
}
.life-sevice .rol1 a:nth-child(4) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -100px;
background-size: 28px auto;
}
.life-sevice .rol1 a:nth-child(5) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -133px;
background-size: 28px auto;
}
.life-sevice .rol2 a:nth-child(1) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -163px;
background-size: 28px auto;
}
.life-sevice .rol2 a:nth-child(2) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -198px;
background-size: 28px auto;
}
.life-sevice .rol2 a:nth-child(3) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -228px;
background-size: 28px auto;
}
.life-sevice .rol2 a:nth-child(4) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -262px;
background-size: 28px auto;
}
.life-sevice .rol2 a:nth-child(5) span:nth-child(1) {
background: url(../imgs/subnav-bg.png) no-repeat 0 -290px;
background-size: 28px auto;
}
/* 熱門活動模塊 */
.hot {
border-top: 1px solid #ddd;
margin-bottom: 5px;
background-color: #fff;
}
h2 {
height: 31px;
font-size: 12px;
border-bottom: 1px solid #ededed;
}
h2 .left {
text-indent: -999px;
overflow: hidden;
/* 搜索引擎優化 */
float: left;
width: 79px;
height: 18px;
margin-left: 5px;
background: url(../imgs/hot.png) no-repeat 0 -18px;
background-size: 79px auto;
}
h2 a {
float: right;
padding: 3px 5px;
margin: -3px 8px 0 0;
border-radius: 15px;
color: #fff;
font-weight: 400;
background: -webkit-linear-gradient(left, #FF506C, #FF6BC6);
}
.hot>div {
display: flex;
}
.hot>div a {
flex: 1;
border-bottom: 1px solid #ededed;
}
.hot>div a:nth-child(1) {
border-right: 1px solid #ededed;
}
.hot>div a img {
width: 100%;
}
/* 底部模塊 */
.banner {
display: flex;
background-color: #fff;
height: 50px;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
text-align: center;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2)
}
.banner a {
flex: 1;
display: flex;
justify-items: center;
align-items: center;
flex-direction: column;
font-size: 12px;
color: #222;
}
.banner a span {
flex: 1;
}
.banner a span:nth-child(1) {
width: 25px;
height: 24px;
margin-top: 5px;
background: url(../imgs/sprite.png) no-repeat -59px -170px;
background-size: 104px auto;
}
.banner a:nth-child(2) span:nth-child(1) {
background: url(../imgs/sprite.png) no-repeat -59px -150px;
background-size: 104px auto;
}
.banner a:nth-child(3) span:nth-child(1) {
background: url(../imgs/sprite.png) no-repeat -59px -307px;
background-size: 104px auto;
}
.detail {
text-align: center;
font-size: 12px;
margin-top: 10px;
}
.detail a {
color: #222;
}
.detail p {
color: #666;
margin: 0;
}
知識點淺解
背景線性漸變:background:linear-gradient(起始方向,顏色1,顏色2,顏色3,…);
盒子陰影:box-shadow:水平陰影的位置,垂直陰影的位置,陰影的模糊范圍,陰影顏色;
eg:box-shadow:1px,1px,4px,rgba(0,0,0,0.2);
效果展示
