三栏布局和水平垂直居中demol例子

html代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>清除浮动和布局</title>
    <link rel="stylesheet" type="text/css" href="index.css">
</head>
<body>
    <div class="contain">
        <ul class="menu">
            <li><a href="">首页</a></li>
            <li>
                <a href="">博客</a>
                <ul class="drop-menu">
                    <li><a href="">CSS3</a></li>
                    <li><a href="">SASS</a></li>
                    <li><a href="">JavaScript</a></li>
                    <li><a href="">jQuery</a></li>
                </ul>
            </li>
            <li><a href="">案例</a></li>
            <li><a href="">资源</a></li>
            <li><a href="">前端收藏夹</a></li>
        </ul>
        <!-- 左右栏固定,中间栏自适应,且中间栏先渲染 -->
        <div class="wrap">
            <div class="main">
                <div class="child">
                    <div class="center-content"></div>
                </div>
            </div>
            <div class="left">
                <div id="demo">
                    <p>水平垂直居中</p>
                </div>
            </div>
            <div class="right">
                <div class="father">
                    <div class="child"></div>
                </div>
            </div>
        </div>
         <!-- 左右栏固定,中间栏自适应,且中间栏先渲染 1-->
        <div class="wrap1">
            <div class="main">
                <div class="child"></div>
            </div>
            <div class="left">
                <div id="child"></div>
            </div>
            <div class="right">
                <div class="child"></div>
            </div>
        </div>
        <div id="left">
            <div class="inner">this is left sidebar content</div>
        </div>
        <div id="main">
            <div class="inner">this is main content</div>
        </div>
        <div id="right">
            <div class="inner">this is right siderbar content</div>
        </div>
    </div>
</body>
</html>

完整scss代码

*{
    margin:0;
    padding:0;
}
html,body{
    width:100%;
    height:100%;
}
$bgc:rgba(120, 120, 120, 0.43);
@mixin border-radius($bglc:#464646,$bdr:3px){

     border:($bdr/4) solid $bglc;
     border-radius:$bdr;
}
@mixin element-size($width:auto,$height:auto){
    width:$width;
    height:$height;
}
$menuWidth:50%;
$mainWidth:80%;
.contain{
    @include element-size($mainWidth,100%);
    margin:0px auto;
    //以下为导航栏
    .menu{
        width:$menuWidth;
        margin:10px auto;
        list-style-type:none;
        background:$bgc;
        @include border-radius;
        //overflow:auto;//清除浮动1
        //清除浮动2
        &:after{
            content:".";
            width:0;
            height:0;
            display:block;
            clear:both;
            visibility:hidden;
            zoom:1;
        };
        li{
            float:left;
            position:relative;
            width:100px;
            height:18px;
            padding:10px;
            border-right:1px solid #fff;
            text-align:center;
            &:hover{
                background:rgba(120, 120, 120, 1);
            }
            .drop-menu{
                display:none;
                position:absolute;
                list-style-type:none;
                left:-1px;
                top:38px;
                border:1px solid #464646;
                li{
                    float:none;
                    text-align:left;
                    border:none;
                     &:hover{
                         background:#cccccc;
                    }
                }
            }
        }
        a{
            text-decoration:none;
        }
    }
    .wrap{
        @include element-size(100%,100%);
        background:#dddddd;
        position:relative;
        .main{
            position:relative;
            @include element-size(auto,100%);
            background:red;
            margin:0 200px;
            //未知元素居中1,子元素外面加一层父元素
            .child{
                position:absolute;
                left:50%;
                top:50%;
                .center-content{
                    @include element-size(200px,200px);
                    margin-top:-50%;
                    margin-left:-50%;
                    background:#333;
                }
            }
        }
        .left{
            position:absolute;
            left:0;
            top:0;
            @include element-size(200px,100%);
            background:blue;
            #demo{
                display:table;
                @include element-size(100%,100%);
                text-align:center;
                p{
                    display:table-cell;
                    vertical-align:middle;
                    background:#eee;
                }
            }
        }
        .right{
            position:absolute;
            right:0;
            top:0;
            @include element-size(200px,100%);
            background:green;
             //未知大小子元素居中--采用inline-block
            .father{
                @include element-size(100%,100%);
                text-align:center;
                &:after{
                    display:inline-block;
                    @include element-size(0,100%);
                    vertical-align:middle;
                    content:"";
                }
                .child{
                    display:inline-block;
                    @include element-size(100px,100px);
                    background:#333;
                    vertical-align:middle;
                }
            }
        }
    }
     //三栏布局样式,左右固定宽度,中间自适应
    .wrap1{
        border-top:3px solid yellow;
        @include element-size(100%,40%);
        background:#dddddd;
        .main{
            @include element-size(100%,100%);
            float:left;
            .child{
                @include element-size(auto,100%);
                background:red;
                margin:0 200px;
            }
        }
        .left{
            float:left;
            margin-left:-100%;
            @include element-size(200px,100%);
            background:blue;
        }
        .right{
            float:left;
            margin-left:-200px;
            @include element-size(200px,100%);
            background:green;
        }
    }
    //中间栏固定,左右栏自适应
    #left,#right {
        float: left;
        margin: 0 0 0 -271px;
        width: 50%;
        *width: 49.9%;//兼容ie
    }
    #main {
        width: 540px;
        float: left;
        background: green;
    }
    .inner {
        padding: 20px;
    }
    #left .inner,
    #right .inner {
        margin: 0 0 0 271px;
        background: orange;
    }
}
时间: 2024-08-01 21:15:50

三栏布局和水平垂直居中demol例子的相关文章

HTML+CSS的两栏、三栏布局以及垂直居中的实现方式

1.两栏布局(左固定,右适应) 先写出初始样式和结构. <div class="container"> <div class="left">Lorem ipsum dolor sit amet</div> <div class="right">Lorem ipsum dolor sit amet</div> </div> div { height: 200px; color:

转:CSS布局:Float布局过程与老生常谈的三栏布局

使用CSS布局网页,那是前端的基本功了,什么两栏布局,三栏布局,那也是前端面试的基本题了.一般来说,可以使用CSSposition属性进行布局,或者使用CSSfloat属性布局.前者适合布局首页,因为首页上的内容往往可以完全控制.后者适合布局模板,模板中填充的内容你没法控制——比如,在编辑wordpress模板时,你肯定没法考虑每篇博文的长度.这篇博文,就是总结一下怎样使用CSS中的float属性进行布局,其实网上有很多讨论这个话题的文章了,但我觉得都没说到点子上.那就来老生常谈一次吧,CSS之

Css三栏布局自适应实现几种方法

Css三栏布局自适应实现几种方法 自适应实现方法我们可以从三个方法来做,一个是绝对定位 ,自身浮动法 和margin负值法了,下面我们一起来看看这三个例子吧,希望例子能帮助到各位同学. 绝对定位法三栏布局自适应: 代码如下 复制代码 <!doctype html> <html> <head> <meta charset="utf-8"> <title>绝对定位法</title> <style>  .pa

三栏布局中间自适应总结

三栏布局,中间自适应这个经典的问题,之前也看了很多.今天准备在自己的博客里面总结一下,加深自己的理解. 方式一:左边左浮动,右边右浮动,中间自适应 <style> .left{ float: left; height: 200px; width: 200px; background-color: aquamarine; border: solid 1px black; } .right{ float: right; height: 200px; width: 300px; background

转载:CSS实现三栏布局的四种方法示例

转载网址:http://www.jb51.net/css/529846.html 前言 其实不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具体的介绍了三栏布局的四种方法,并介绍了它的使用场景. 所谓三栏布局就是指页面分为左中右三部分然后对中间一部分做自适应的一种布局方式. 1.绝对定位法 HTML代码如下: <div class="left&quo

详解 CSS 七种三栏布局技巧

作者:林东洲 链接:https://zhuanlan.zhihu.com/p/25070186 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 三栏布局,顾名思义就是两边固定,中间自适应.三栏布局在开发十分常见,那么什么是三栏布局?比如我打开某东的首页: 映入眼帘的就是一个常见的三栏布局:即左边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应. 下面围绕的这样的目的,即左右模块固定宽度,中间模块随浏览器变化自适应,想要完成的最终效果如下图所示: 红色

负边距、三栏布局(圣杯布局、双飞翼布局)

首先来了解下 一.负边距在让元素产生偏移时和position: relative有什么区别? position:relative产生偏移时,他原来的位置不会脱离文档流的,即还占用原来的空间,但负边距产生偏移时它原来的位置并不占用空间: 例如下面的代码 Document *{ margin: 0px; padding: 0px; } .up,.down,.middle{ background-color: red; height: 100px; width: 100px; } .negative-

记一道css面试题 : 三栏布局两边宽度固定,中间宽度自适应,并且布局随屏幕大小改变。

前几天面试时有道css题没做出来,回来好好学习一番后把其记录下来. 题目是这样的:左中右三栏布局,左右两栏宽度固定,左右两栏的宽度为200像素,中间栏宽度自适应.当屏幕小于600px时,3栏会分别占用一行.像这样 当屏幕大于600px时,是这样 我做出来用了css3的@media,如果不用这个,好吧,水平有限想不出来... 下面是代码: <!DOCTYPE> <html> <head> <style> body{ margin: 0 ; padding: 0

CSS总结(七)——常见的两栏、三栏布局

一.两栏布局 — 左栏固定宽度,右栏宽度自适应 1. 左浮动+margin <div class=“left”></div> <div class=“main”></div> css:  .left{width:200px;float:left;} .main{margin-left:200px;} ps:    IE6中可能出现双margin的bug,可以通过display:inline来解决 2.  绝对定位 + margin-left (兼容性好) &