Blogger Information
Blog 22
fans 0
comment 0
visits 13235
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
CSS浮动地位与布局实战-2019年1月15日 20:00
小淇的博客
Original
670 people have browsed it

这是一段完整的HTML实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
/* 标签选择器 */
ul  {
border: 1px solid red;
margin-top: 0;
margin-bottom: 0;
padding-left: 0;
overflow: hidden;
}

/* 层级选择器 */
ul li {
list-style-type: none;
width: 40px;
height: 40px;
background-color: wheat;
float: left;
border-radius: 50%;
text-align: center;
line-height: 40px;
box-shadow: 2px 2px 1px #888;
margin-left: 10px;
}

/* id选择器 */
#bg-blue {
background-color: lightblue;
}

/* class选择器 */
.bg-green {
background-color: lightgreen;
}

/* 属性选择器 */
li[id="bg-blue"] {
border: 2px solid red;
}

/* 群组选择器 */
#bg-blue,.bg-green{
border:2px solid blue;
}

/* 相邻选择器 */
#bg-blue + *{
background-color: yellow;
}

/* 兄弟选择器 */
/* #bg-blue ~ * {
    background-color: yellow;
} */

/* 伪类:子元素选择器 */
ul :first-child  {
background-color: coral;
}

ul :last-child   {
background-color: coral;
}

ul :nth-child(6)   {
background-color: coral;
}

ul :nth-last-child(3)   {
background-color: coral;
}

ul li:last-of-type  {
background-color: darkorchid;
}

ul li:first-of-type{
background-color: darkorchid;
}

/* 选中每个div中的第二个子元素 */
div :nth-child(2){
/* background-color: lightgreen; */
}

/* 如果只想选中西门大官人 */
div:first-of-type :nth-child(3){
/* background-color: lightgreen; */
}

p:nth-of-type(2){
background-color: yellow;
}

form :enabled{
background-color:wheat;
}
/* 讲单选按钮中的文本前景色设置为红色,使用了伪类和相邻选择器 */
form :checked + * {
color: red;
}

form :focus{
background-color: lightgreen;
}

button:hover{
background-color: lightgreen;
height: 28px;
width: 56px;
background-color: black;
color: white;
}

form :invalid{
background-color: red;
}
</style>
<body>
    <!-- 基本的选择器 -->
    <ul>
        <li class="bg-green">1</li>
        <li id="bg-blue">2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
    </ul>

    <div>
        <p>猪哥</p>
        <li>朱老师</li>
        <p>西门大官人</p>
    </div>

    <div>
        <p>灭绝师太</p>
        <li>韦小宝</li>
    </div>

    <!-- 演示表单选择器 -->
    <form action="">
        <label for="emali">邮箱:</label>
        <input type="email">

        <label for="password">密码:</label>
        <input type="password">
        <br>

        <input type="radio" id="week" name="save" value="7" checked><label for="week">保存一周</label>
        <input type="radio" id="month" name="save" value="30"><label for="month">保存一月</label>

        <button>登陆</button>
    </form>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

常用的基本选择器:

实例

<form action="">
        <label for="emali">邮箱:</label>
        <input type="email">

        <label for="password">密码:</label>
        <input type="password">
        <br>

        <input type="radio" id="week" name="save" value="7" checked><label for="week">保存一周</label>
        <input type="radio" id="month" name="save" value="30"><label for="month">保存一月</label>

        <button>登陆</button>
    </form>

    表单选择器:

        <form> 元素:每个表单都对应一个<form></form>标签    表单内所有元素都写在 <form></form>里面;

            属性:

                action属性  规定了 提交的地址 action=“网址”

                Method属性  规定了两种 提交方式 :  

                    method=“get”   传值有长度限制   能看到传值内容

                    method=“post” 没有长度限制    不能看到传值内容

        <input> 元素:是最重要的表单元素;

            属性:

                text属性定义文本输入。

                radio属性定义安萱按钮输入。

                submit属性定义按钮(提交表单)。

        

        <fieldset> 元素组合表单中的相关数据

        <legend> 元素为 <fieldset> 元素定义标题。


实例

/* 标签选择器 */
ul    {
    border: 1px solid red;
    margin-top: 0;
    margin-bottom: 0;
    padding-left: 0;
    overflow: hidden;
}

    标签选择器:使用标签名称作为选择器选中标签设置样式


实例

/* 层级选择器 */
ul li {
    list-style-type: none;
    width: 40px;
    height: 40px;
    background-color: wheat;
    float: left;
    border-radius: 50%;
    text-align: center;
    line-height: 40px;
    box-shadow: 2px 2px 1px #888;
    margin-left: 10px;
}

    层级选择器:通过html的dom元素间的层次关系获取元素,主要层次关系有 后代、父子、相邻兄弟和通用兄弟。


实例

/* id选择器 */
#bg-blue {
    background-color: lightblue;
}

    id选择器:标签中利用ID属性进行设置,在样式表中,  #ID{设置样式}

            特点:一个标签有且只有一个ID,且不能重名


实例

/* class选择器 */
.bg-green {
    background-color: lightgreen;
}

    类选择器:在标签中利用class属性设置在样式表中  .类型名{设置样式}

特点:相当于给标签起了一个别名可以重名。也可以有多个名称


    

实例

/* 属性选择器 */
li[id="bg-blue"] {
    border: 2px solid red;
}

    属性选择器:可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性


实例

/* 群组选择器 */
#bg-blue,.bg-green{
    border:2px solid blue;
}

    群组选择器:同时对几个选择器进行相同的操作


实例

/* 相邻选择器 */
#bg-blue + *{
    background-color: yellow;
}

    相邻选择器


实例

/* 兄弟选择器 */
/* #bg-blue ~ * {
    background-color: yellow;
} */

    兄弟选择器

相邻兄弟选择器: li【1】 + li【2】, 选中的仅是一个元素。同级并且li的后面。(很少用)


实例

/* 伪类:子元素选择器 */
ul :first-child  {
    background-color: coral;
}

    伪类选择器:

    兄弟伪类:

    +:获取当前元素的相邻的满足条件的元素

    -:获取当前元素的满足条件的兄弟元素

        1-a:hover/a:link/a:active/a:visited

        2-以某元素对于其父元素或兄弟元素的位置来获取元素的结构伪类

            1.1- a:first-child:查找某元素的父元素第一个子元素E

            1.2- a:lastchild:最后一个子元素

            1.3- a:nth-child(n):第n个子元素,计算方法是a元素的全部兄弟元素

            1.4- a:nth-last-child(n):第n个子元素,倒着计算

            1.5- a:nth-child(even):所有偶数

            1.6- a:nth-child(odd):所有奇数



实例

注意:图片没有上传上去

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="static/css/style02.css">
<style>
body{
height: 2000px;
}
.box{
/* 宽度300px */
width: 300px;
/* 高度300px */
height: 300px;
/* 内边距10px */
padding: 10px;
/* 边框 */
border: 5px dashed black;
/* 背景颜色 */
background-color: cyan;
/* 图片链接 */
background-image: url(../images/bg.jpg);

background-repeat: no-repeat;

background-position: left top;

background-position: 10% 20%;

background-attachment: fixed;

background: yellow url(../images/bg.jpg) no-repeat left bottom;

background-image:none;

background-image:url(../images/bg.jpg),url(../images/bg1.jpg);

background-position: left bottom,right top;
background-image: none;
background-image: url(../images/bg.jpg);

background-size: 120px 80px;

background-size: contain;
background-size: cover;

background-size: 100% 100%;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

背景:

1.基本设置

    (1).background-color:背景色

    (2).backgorund-image:背景图片

    (3).background-repeat:重复方向

    (4).background-position:背景定位

    (5).background-attachment:滚动方式

简写顺序:背景色 背景图片 重复方向 背景定位 滚动方式

2.css3背景新特征

    (1).background-img:多背景设置

    (2).background-size:背景图片尺寸

    (3).background-clip:背景绘制区域


内边距实例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.TP{
height: 165px;
width: 140px;
background-color: red;
text-align: center;
line-height: 140px;
}
.box1{
width: 300px;
height: 300px;
background-color: lightgreen;

padding: 50px;
}
/* 解决方案1.只需要将盒子的大小,根据padding进行调整 */
/* 现在宽/高=原宽/高-padding*2 */
.box1{
width: 200px;
height: 200px;
}
/* 解决方案2.改变dom结构,将盒子的宽高与内边距设置分离 */
/* 先将盒子大小复位,内边距清零 */
.box1{
width: 300px;
height: 300px;
padding: 0;
}
/* 宽高分离 */
.box2{
padding: 50px;
}
/* 分析
第一种方案dom结构简单,但是要修改原盒子大小
第二种方案不需要修改原盒子大小,但需要在盒子与内容之间增加一个容器
增加了一个纯属结构性的dom元素
所以,各有利弊,在开发中,根据实际情况斟酌 */
</style>
</head>
<body>
<!-- 将图片在容器中居中显示 -->
<div class="box1">
<div class="box2">
<div class="TP">图片</div>
</div>
</div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

解决方案1:只需要将盒子的大小,根据padding进行调整 , 现在宽/高=原宽/高-padding*2

实例

.box1{
    width: 200px;
    height: 200px;
}

解决方案2:改变dom结构,将盒子的宽高与内边距设置分离 , 先将盒子大小复位,内边距清零 

实例

.box1{
    width: 300px;
    height: 300px;
    padding: 0;
}
.box2{
    padding: 50px;
}

外边距实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .box1{
    width: 100px;
    height: 100px;
    background-color: lightblue;
}
.box2{
    width: 100px;
    height: 100px;
    background-color: lightcoral;

    margin-top: 30px
}

.box1{
    margin-bottom: 50px;
}
.box2{
    margin-top: 80px;
}

.box3{
    width: 200px;
    height: 200px;
    background-color: lightblue;
}
.box4{
    width: 100px;
    height: 100px;
    background-color: lightcoral;
}
.box3{
    padding-top: 50px;
    height: 150px;
}

/* 自动挤压 */
.box5{
    width: 100px;
    height: 100px;
    background: lightcoral;
}
.box5{
    margin-left: 100px;
    margin-left: auto;
    margin-right: auto;
    margin: 0 auto;
}
    </style>
</head>
<body>
    <!-- 1.同级塌陷
    2.嵌套传递
    3.自动挤压 -->
    <div class="box1"></div>
    <div class="box2"></div>
    <hr>
    <div class="box3">
            <div class="box4"></div> 
    </div>
    <hr>
    <div class="box5"></div>
</body>
</body4
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

同级塌陷实例

.box1{
    width: 100px;
    height: 100px;
    background-color: lightblue;
}
.box2{
    width: 100px;
    height: 100px;
    background-color: lightcoral;

    margin-top: 30px
}


嵌套传递实例

.box3{
    width: 200px;
    height: 200px;
    background-color: lightblue;
    padding-top: 50px;
    height: 150px;
}
.box4{
    width: 100px;
    height: 100px;
    background-color: lightcoral;
}

自动挤压实例

.box5{
    width: 100px;
    height: 100px;
    background: lightcoral;
}
.box5{
    margin-left: 100px;
    margin-left: auto;
    margin-right: auto;
    margin: 0 auto;
}


浮动实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .box1{
    width: 150px;
    height: 150px;
    background-color: lightblue;
    /* 左浮动脱离文档流,后面的区块自动前移占据了它的空间 */
    float: left;
}
.box2{
    width: 180px;
    height: 180px;
    background-color: lightcoral;
    float: left;
    /* 第二个珊瑚色区块浮动后,相当于浮动元素组成的文档流中
    所以,它碰到前一个浮动元素后就停止了向左浮动,排到了前一个浮动元素的右边 */
}
.box3{
    width: 200px;
    height: 200px;
    background-color: lightgreen;
    /* 向右浮动,直到碰到浏览器窗口右边框为止,当窗口宽度缩小到不能容纳它时自动掉到第二排 */
    float: right;
}
.box4{
    height: 100px;
    background-color: lightgray;
    clear: both;
}
    </style>
</head>
<body>
<!-- 1.文档流:html元素默认按照书写的顺序在浏览器中,遵循从左到右,从上到下排列
2.布局前提:通过先将元素从文档流中脱离,这样才能随心所欲的操作
3.元素脱离文档流的手段:浮动和绝对定位   -->

<!-- 浮动地基本原理 -->
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

左浮动

float:left;

右浮动

float:right;

清除浮动

float:clear;


-----------------------------------------------------------------------------------------------------

 定位:将元素在页面中重新排列,分为四类

    1.静态定位:浏览器默认方式(文档流)
    2.相对定位:元素并未脱离文档流,只是相对于它原来的位置,做相对移动
    3.绝对定位:元素脱离文档流重新排列,不论元素之前是什么类型,全部转为块元素,支持宽高
    4.固定定位:始终相对于浏览器的窗口做定位父级,进行定位 


相对定位实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .box1{
    width: 150px;
    height: 150px;
    background-color: lightblue;
    position: relative;
    margin-left: 150px;
    /* 第一个区块向右移动150px */
}
.box2{
    width: 150px;
    height: 150px;
    background-color: lightgray;
    /* 第二个区块不需要移动 */
}
.box3{
    width: 150px;
    height: 150px;
    background-color: lightgreen;
    position: relative;
    left: 300px;
    top: -150px
    /* 第三个区块向右移动300px,向上移动150px */
}
.box4{
    width: 150px;
    height: 150px;
    background-color: lightcoral;
    position: relative;
    left: 150px;
    top: -300px;
    /* 第四个区块向右移动150px,向上移动300px */
}
.box5{
    width: 150px;
    height: 150px;
    background-color: lightseagreen;
    position: relative;
    left: 150px;
    top: -300px
    /* 第四个区块向右移动150px,向上移动300px */
}
    </style>
</head>
<body>

    <!-- 相对定位小案例:在页面中创建一个彩色的十字架 -->

    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    <div class="box4"></div>
    <div class="box5"></div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


绝对定位实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .parent{
    /* 定位父级一定要有定位属性 */
    position: relative;
    border: 1px solid gray;
    width: 450px;
    height: 450px;
}
.box1{
    width: 150px;
    height: 150px;
    background-color: lightblue;
    position: absolute;
    left: 150px;
}
.box2{
    width: 150px;
    height: 150px;
    background-color: lightgray;
    position: absolute;
    top: 150px;
}
.box3{
    width: 150px;
    height: 150px;
    background-color: lightgreen;
    position: absolute;
    left: 300px;
    top: 150px;

}
.box4{
    width: 150px;
    height: 150px;
    background-color: lightcoral;
    position: absolute;
    left: 150px;
    top: 150px;

}
.box5{
    width: 150px;
    height: 150px;
    background-color: lightseagreen;
    position: absolute;
    left: 150px;
    top: 300px;
}
    </style>
</head>
<body>
    <!-- 绝对定位小案例:在页面中创建一个彩色的十字架 -->
    <div class="parent">
        <div class="box1"></div>
        <div class="box2"></div>
        <div class="box3"></div>
        <div class="box4"></div>
        <div class="box5"></div>   
    </div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

绝对定位实现遮罩实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    body{
    margin: 0;
    background-image: url(../images/php.jpg);
    background-repeat: no-repeat;
    background-size: cover;
}
.shade{
    /* 遮罩绝对定位,并且自动伸展到整个窗口 */
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;

    background-color:black;
    opacity: 0.7;  
}
.login{
    background-color: white;
    /* 登陆窗口不是随窗口大小变化,说明它不是文档流中,是绝对定位 */
    position: absolute;
    /* 使登陆窗口中页面的正中间位置开始显示,注意是显示的起点在正中间 */
    left: 50%;
    top: 50%;

    margin-left: -190px;
    margin-top: -230px;
}
.login img{
    width: 380px;
    height: 460px;
}
    </style>
</head>
<body>
   <!-- 模拟php中文网的登陆页面  -->
   <div class="shade"></div>
   <div class="login"><img src="static/images/login.jpg" alt=""></div>
</body>
</html>

固定定位实现广告位实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    body{
    background-color: lightgrey;
    height: 2000px;
}
.ads{
    width: 350px;
    height: 250px;
    background-color: lightblue;

    position: fixed;
    right: 0;
    bottom: 0;
}
.ads button{
    float: right;
    margin-right:20px; 
}
    </style>
</head>
<body>
    <h1>实现广告位</h1>
    <div class="ads">
        <button onclick="this.parentNode.style.display='none'">关闭</button>
        <h2>php中文网第四期线上班</h2>
        <h1>招生进行中</h1>
    </div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

布局实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="static/css/style10.css">
    <style>
    .header{
    width: 100%;
    /* 参考色块,上线时应该删除或替换 */
    background-color: lightgray;
}
.header .content{
    /* 头部内容区,应该居中显示,所有要有宽度 */
    width: 1000px;
    height: 60px;
    background-color: lightgreen;
    margin:0 auto;
}

.header .content .nav{
    margin: 0;
    padding: 0;
}

.header .content .nav .item{
    list-style-type: none;
}

.header .content .nav .item a{
    /* 一定要将浮动设置到链接标签a上面,否则无法实现导航区的点击与高亮 */
    float: left;
    min-width: 80px;
    min-height: 60px;
    line-height: 60px;
    color: #444;
    font-size: 1.2em;
    padding: 0 15px;
    text-decoration: none;
    text-align: center;
}
.header .content .nav .item a:hover{
    /* 当鼠标移入到导航链接上时改变背景与文本前景色,实现当前导航高亮功能; */
    background-color: #444;
    color: white;
}

.container{
    width: 1000px;
    height: 600px;
    background-color: lightgrey;
    margin: 5 auto;
}

.footer{
    width: 100%;
    background-color: lightgrey;
}
.footer .content{
    width: 1000px;
    height: 60px;
    background-color: lightgreen;
    margin:0 auto;
}
.footer .content p{
    text-align: center;
    line-height: 60px;
}

.footer .content a{
    text-decoration: none;
    color: #777;
}
.footer .content a:hover{
    color: #444;
}
    </style>
</head>
<body>
    <div class="header">
        <div class="content">
            <ul class="nav">
                <li class="item"><a href="http://">首页</a></li>
                <li class="item"><a href="http://">公司新闻</a></li>
                <li class="item"><a href="http://">最新产品</a></li>
                <li class="item"><a href="http://">联系我们</a></li>
            </ul>
        </div>
    </div>
    <!-- 中间主题用一个区块模拟替代 -->
    <div class="container"></div>
    <!-- 底部 -->
    <div class="footer">
        <div class="content">
            <p>
                <a href="">©php中文网版权所有</a>  
                <a href="">0551-88888888999999</a>  
                <a href="">皖icp4545435453-1</a>
            </p>
        </div>
    </div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

双飞翼布局实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="static/css/style11.css">
    <style>
    .header{
    width: 100%;
    /* 参考色块,上线时应该删除或替换 */
    background-color: lightgray;
}
.header .content{
    /* 头部内容区,应该居中显示,所有要有宽度 */
    width: 1000px;
    height: 60px;
    background-color: lightgreen;
    margin:0 auto;
}

.header .content .nav{
    margin: 0;
    padding: 0;
}

.header .content .nav .item{
    list-style-type: none;
}

.header .content .nav .item a{
    /* 一定要将浮动设置到链接标签a上面,否则无法实现导航区的点击与高亮 */
    float: left;
    min-width: 80px;
    min-height: 60px;
    line-height: 60px;
    color: #444;
    font-size: 1.2em;
    padding: 0 15px;
    text-decoration: none;
    text-align: center;
}
.header .content .nav .item a:hover{
    /* 当鼠标移入到导航链接上时改变背景与文本前景色,实现当前导航高亮功能; */
    background-color: #444;
    color: white;
}




/* 第一步:主体容器设置总宽度,并水平居中 */
.container{
    width: 1000px;
    min-height: 600px;
    background-color: lightgrey;
    margin: 5px auto;
}

/* 第二部:左,右两侧固定宽度,中间区块自适应 */
/* 中间区块宽度设置在它的容器wrap中 */
.wrap{
    width:inherit;
    min-height: inherit;
    background-color: cyan;
}
/* 设置左,右区块的宽度和高度(应为无内容,所以设置了最小高度),并设置参考色块 */
.left{
    width: 200px;
    min-height: 600px;
    background-color: lightcoral;
}
.right{
    width: 200px;
    min-height: 600px;
    background-color: lightgreen;
}
/* 第三步:将中间,左,右区块全部左浮动 */
.wrap, .left, .right{
    float: left;
}
/* 第四部:将left和right拉回到他们正确的位置上 */
/* 通过设置区块的付外边距的方式,实现向相反方向移动区块 */
.left{
    margin-left:-100%;
}
.right{
    margin-left:-200px;
}

/* 现在还有最后一个问题,中间内容去块main没有显示 */
/* 第五步:将中间内容区块main显示出来 */
.main{
    padding-left: 200px;
    padding-right: 200px;
}
    </style>
</head>
<body>
    <!-- 头部 -->
    <div class="header">
        <div class="content">
            <ul class="nav">
                <li class="item"><a href="http://">首页</a></li>
                <li class="item"><a href="http://">公司新闻</a></li>
                <li class="item"><a href="http://">最新产品</a></li>
                <li class="item"><a href="http://">联系我们</a></li>
            </ul>
        </div>
    </div>
    <!-- 双飞翼中间主题 -->
    <div class="container">
    <!-- 创建双飞翼使用的dom结构 -->
        <!-- 必须先创建中间主题区块,确保它优先被渲染出来 -->
        <!-- 中间内容区需要创建一个父级容器进行包裹 -->
        <div class="wrap">
            <div class="main">主题内容区</div>
        </div>
        <div class="left">左侧</div>
        <div class="right">右侧</div>

    </div>

    <!-- 底部 -->
    <div class="footer">
        <div class="content">
            <p>
                <a href="">©php中文网版权所有</a>  
                <a href="">0551-88888888999999</a>  
                <a href="">皖icp4545435453-1</a>
            </p>
        </div>
    </div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


双飞翼布局能够解决的问题:

1、两边列宽度固定,中间列宽度自适应式布局;

2、中间内容区先被加载。

双飞翼布局的优点:

1、可以实现主要内容区先加载;

2、兼容主流浏览器;

3、布局灵活,改变css即可改变布局方式。


圣杯布局实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>布局案例3: 圣杯布局</title>
    <link rel="stylesheet" href="static/css/style12.css">
    <style>
    .header {
    /* 通常宽度默认为100% */
    width: 100%;

    /* 参考色块,上线时应该删除或替换 */
    background-color: lightgray;
}

.header .content {
    /* 头部内容区,应该居中显示,所有要有宽度 */
    width: 1000px;
    height: 60px;
    /* 参考色块 */
    background-color: lightgreen;
    /* 上下外边距为0,左右自动居中 */
    margin: 0 auto;
    /* margin: 0 auto的等价语句,注意上右下左的顺序 */
    margin-top: 0;
    margin-right: auto;
    margin-bottom: 0;
    margin-left: auto;
    /* 因为上下相等,左右也相等,所以可以简写为: margin: 0 auto; */
    
}

.header .content .nav {
    /* 清空导航UL元素的默认样式 */
    margin: 0;
    padding: 0;
}

.header .content .nav .item {
    list-style-type: none; 
}

.header .content .nav .item a {
    /* 一定要将浮动设置到链接标签<a>上面,否则无法实现导航区的点击与高亮 */
    float: left;
    /* 设置最小宽度与最小高宽,以适应导航文本的变化 */
    min-width: 80px;
    min-height: 60px;
    /* 设置行高与头部区块等高,使导航文本可以垂直居中显示 */
    line-height: 60px;
    color: #444;
    /* 将导航文本设置为系统根字体大小的1.2倍 */
    font-size: 1.2rem;
    /* 设置民航文本的左右内边距,使导航文本不要挨的太紧 */
    padding: 0 15px;
    /* 去掉链接标签默认的下划线 */
    text-decoration: none;
    /* 让导航文本在每一个小区块中居中显示 */
    text-align: center;
}

.header .content .nav .item a:hover {
    /* 当鼠标移入到导航链接上时改变背景色与文本前景色,实现当前导航高亮功能 */
    background-color: #444;
    color: white;  
}



















/* 使用圣杯布局实现主体部分 */

/* 第一步: 主体容器设置的宽度与中间区块相同,并水平居中 */
.container {
    width: 600px;
    min-height: 600px;
    margin: 5px auto;
    background-color: lightgray;   /* 参考色块 */
}

/* 第二步: 左,右二侧固定宽度,中间区块继承父级container宽度*/

.main {
    width: inherit;
    min-height: 600px;
    background-color: lightcyan;
}

/* 设置左,右区块的宽度和高度(因为无内容,所以设置了最小高度),并设置参考色块 */
.left {
    width: 200px;
    min-height: 600px;
    background-color: lightcoral;
}

.right {
    width: 200px;
    min-height: 600px;
    background-color: lightseagreen
}

/* 第三步:将中间,左,右区块全部左浮动 */ 
/* 因中间区块宽度100%,所以左右会被挤压到下面 */
.main, .left, .right {
    float: left;
}

/* 第四步: 将left和right拉回到中间区块的二边 */
/* 通过设置区块的负外边距的方式,实现向反方向移动区块 */
.left {
    margin-left: -100%;   /* -100%等价于-1000px,将左区块拉回到中间的起点处*/
}
.right {
    margin-left: -200px; /* -200px就正好将右区块上移到中间区块右侧显示 */
}
/* 现在还有最后一个问题,中间内容区块main没有显示出来 */

/* 第五步: 设置容器container内边距给左右区块预留位置 */
.container {
    padding-left: 200px;
    padding-right: 200px;
}

/* 第六步:左右区块使用相对定位,回到正确的位置上 */
.left {
    position: relative;
    left: -200px;
}
.right {
    position: relative;
    left: 200px;
}

















/* 底部与头部的基本样式类似 */
.footer {
    width: 100%;
    background-color: lightgray;
}

.footer .content {
    width: 1000px;
    height: 60px;
    background-color: lightblue;
    margin: 0 auto;
}
.footer .content p {
    text-align: center;
    line-height: 60px;
}

.footer .content  a {
    text-decoration: none;
    color: #777;
}

/* 鼠标移入时显示下划线并加深字体前景色 */
.footer .content  a:hover {
    text-decoration: underline;
    color: #444;
}

    </style>
</head>
<body>
    <!-- 头部 -->
    <div class="header">
        <div class="content">
            <ul class="nav">
                <li class="item"><a href="">首页</a></li>
                <li class="item"><a href="">公司新闻</a></li>
                <li class="item"><a href="">最新产品</a></li>
                <li class="item"><a href="">联系我们</a></li>
            </ul>
        </div>
    </div>

    <!-- 中间主体 -->
    <div class="container">
        <!-- 创建双飞翼使用的DOM结构 -->

        <!-- 必须先创建中间主体区块,确保它优先被渲染出来 -->
        <!-- 与双飞翼相比, DOM结构更简洁, 不需要为main创建父级容器 -->
        <!-- 中间内容main区块中 -->
        <div class="main">主体内容区</div>

        <!-- 创建左侧边栏区块 -->
        <div class="left">左侧</div>

        <!-- 创建右侧边栏区块 -->
        <div class="right">右侧</div>

    </div>

    <!-- 底部 -->
    <div class="footer">
        <div class="content">
            <p>
                <a href="">© PHP中文网版权所有</a>  | 
                <a href="">0551-88889999</a>  | 
                <a href="">皖ICP2016098801-1</a>
            </p>
            
        </div>
    </div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

圣杯布局的优点:

结构简单,无多余dom层

圣杯布局的缺点:正常情况下是没有问题的,但是特殊情况下就会暴露此方案的弊端,如果将浏览器无线放大时,「圣杯」将会「破碎」掉。如图,当main部分的宽小于left部分时就会发生布局混乱。

            

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post