【CSS知识点练习】第一篇

2019-09-30  本文已影响0人  前端菜篮子

根据你未必知道的49个CSS知识点做的一些练习

01. shape-outside:文字环绕效果

image
<html>
    <head>
        <style>
        .main {
            width: 400px;
            margin: 100px auto;
        }
        .circle{
            width: 200px;
            height: 200px;
            float:left;
            background-color: blue;
            border-radius:50%;
            shape-outside: circle();
        }
        </style>
    </head>
    <body>
        <div class="main">
            <div class="circle"></div>
            <p>
                Sometimes a web page's text content appears to be
                funneling your attention towards a spot on the page
                to drive you to follow a particular link. Sometimes
                you don't notice.
            </p>
        </div>
    </body>
</html>

02. margin负数时

先画出没有margin属性的两个div

image
代码如下:
<html>
    <head>
        <style>
            .tdiv {
                border-style: dotted;
                margin:100px auto;
                width:250px;
                height: 150px;
            }
            .div {
                width: 100px;
                height: 100px;
                background-color: aqua;
                float: left;
            }
            .fuchsia {
                background-color: fuchsia;
            }
        </style>
    </head>
    
    <body>
        <div class="tdiv">
            <div class="div"></div>
            <div class="div fuchsia"></div>
        </div>
    </body>
</html>

为上面的蓝色块中加入margin属性

03. 外边距合并

image
为外层div加上(去掉)overflow:hidden查看效果
<html>
    <head>
        <style>
            .outer {
                background-color: aqua;
                /**请查看加上该属性与不加的区别*/
                overflow: hidden;  
                /**这里也可以加个margin,加与不加查看区别*/
                margin-bottom: 20px;
            }
                .inner {
                margin-top: 30px;
            }
        </style>
    </head>
    <body>
        Laborum commodo voluptate commodo minim tempor elit ut 
        enim id laboris proident. 
        Consectetur sit enim pariatur exercitation est 
        sit occaecat nostrud proident nisi adipisicing pariatur do. 
        Ut eu sit cupidatat nulla ex aliquip nisi Lorem. 
        Fugiat do enim ex laborum incididunt. 
        Ex do mollit velit adipisicing.
        Fugiat anim et adipisicing culpa esse mollit 
        culpa aliquip nostrud consequat. 
        Ut commodo quis fugiat labore sit sunt labore dolor proident. 
        Id sit nisi velit voluptate mollit. 
        Dolor aute dolor esse esse esse nulla.
        
        <div class="outer">
            <div class="inner">
            Culpa ea fugiat ad pariatur pariatur fugiat. 
            Aute Lorem officia aliqua ex incididunt elit do ut. 
            Aliquip eiusmod eu laboris nulla ex deserunt occaecat aute aute. 
            Ad amet velit nisi eiusmod enim quis fugiat duis proident ullamco.
            </div>
        </div>
    </body>
</html>

04. 消除浮动的影响之:flow-root

浮动元素使其父元素高度塌陷 :我们经常会遇到一种情况,给一个元素设置浮动之后 float:left/right;,如果该元素的父元素有背景颜色,那么会发现父元素的背景颜色消失了;如果父元素有一个边框,那么浮动元素无法将边框撑开。

<html>
    <head>
        <style>
            .pdiv {
                background-color:cornflowerblue;
                border: 2px solid red;
                /**父元素加overflow:hidden
                可以消除子元素float对父元素的影响*/
                /**overflow: hidden; */
                
                /**
                display新的属性值
                虽然目前仅几个最新浏览器支持,
                但完全可以通过@supports()属性做完美降级处理。
                */
                display: flow-root;
            }
            /**
            为父元素添加伪类可以
            消除子元素float对父元素的影响
            .pdiv::after {
                content:"";
                clear:both;     //清除浮动
                display:block;  //确保该元素是一个块级元素
            }
            */
            .cdiv {
                background-color:burlywood;
                border: 1px solid brown;
                width: 100px;
                height: 100px;
                margin: 20px;
                /** float: left; */
            }
        </style>
    </head>
    <body>
        <div class="pdiv">
            <div class="cdiv">
            </div>
            <div class="cdiv">
            </div>
        </div>
    </body>
</html>

未加float时

image
将上面代码中的float放开
image

05. flex布局之margin:auto的神奇用法

<html>
    <head>
        <style>
        .container {
            display: flex;
        }
        .container>div {
            width: 40px;
            height: 40px;
            border: 1px solid black;
            background-color: aqua;
        }
        </style>
    </head>
    <body>
        <div class="container">
            <div>1</div>
            <div>2</div>
            <div>3</div>
            <div>4</div>
        </div>
    </body>
</html>
image
image
image
image

06. flex布局之flex-grow

image

07. input的宽度

并不是给元素设置display:block就会自动填充父元素宽度。input就是个例外,其默认宽度取决于size特性的值

image
<html>
    <head>
        <style>
            .div {
                width: 300px;
                height: 50px;
                margin: 50px;
                background-color: cornflowerblue;
            }
        </style>
    </head>
    <body>
        <div class="div">
            <input />
        </div>
    </body>
</html>

image
为input增加size特性
image
选中对应的元素,右键,Add attribute
image

08. 定位position

A. 有哪几种定位方式:

/**
HTML元素的默认值,即没有定位,元素出现在正常的流中。
静态定位的元素不会受到top, bottom, left, right影响。
*/
/**
元素的位置相对于浏览器窗口是固定位置。
即使窗口是滚动的它也不会移动
Fixed定位使元素的位置与文档流无关,因此不占据空间。
Fixed定位的元素和其他元素重叠。
*/
p.pos_fixed{
    position:fixed;
    top:30px;
    right:5px;
}
/**
相对定位元素的定位是相对其正常位置。
可以移动的相对定位元素的内容和相互重叠的元素,
它原本所占的空间不会改变。
相对定位元素经常被用来作为绝对定位元素的容器块。
*/
h2.pos_left{
    position:relative;
    left:-20px;
}
h2.pos_right{
    position:relative;
    left:20px;
}
/**
绝对定位的元素的位置相对于最近的已定位父元素,
如果元素没有已定位的父元素,那么它的位置相对于<html>
Absolute定位使元素的位置与文档流无关,因此不占据空间。
Absolute定位的元素和其他元素重叠。
*/
h2{
    position:absolute;
    left:100px;
    top:150px;
}
<!-- clip:剪辑一个绝对定位的元素-->
img {
    position:absolute;
    clip:rect(0px,60px,200px,0px);
}
<img src="/attachments/cover/baby.jpg" 
    width="100" height="140" />
<!--
粘性定位的元素是依赖于用户的滚动,
在 position:relative 与 position:fixed 定位之间切换。

它的行为就像 position:relative;
而当页面滚动超出目标区域时,
它的表现就像 position:fixed,它会固定在目标位置。

元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。

这个特定阈值指的是 top, right, bottom 或 left 之一,
换言之,指定 top, right, bottom 或 left 
四个阈值其中之一,才可使粘性定位生效。
否则其行为与相对定位相同。
-->
<html>
    <head>
        <style>
        div.sticky {
          position: -webkit-sticky;
          position: sticky;
          top: 0;
          padding: 5px;
          background-color: #cae8ca;
          border: 2px solid #4CAF50;
        }
        </style>
    </head>
    <body>
        <p>尝试滚动页面。</p>
        <p>注意: IE/Edge 15 及更早 IE 版本不支持 sticky 属性。</p>
        <div class="sticky">我是粘性定位!</div>
        <div style="padding-bottom:2000px">
          <p>滚动我</p>
          <p>来回滚动我</p>
          <p>滚动我</p>
          <p>来回滚动我</p>
          <p>滚动我</p>
          <p>来回滚动我</p>
        </div>
    </body>
</html>
image
/**
元素的定位与文档流无关,它们可以覆盖页面上的其它元素
z-index属性指定了一个元素的堆叠顺序
    (即哪个元素应该放在前面,或后面)
一个元素可以有正数或负数的堆叠顺序
*/
img{
    position:absolute;
    left:0px;
    top:0px;
    z-index:-1;
}
/**
具有更高堆叠顺序的元素总是在较低的堆叠顺序元素的前面。
注意: 如果两个定位元素重叠,没有指定z-index,
最后定位在HTML代码中的元素将被显示在最前面。
z-index 进行定位元素:
(position:absolute, position:relative, or position:fixed)
*/

B. 绝对定位和固定定位时,同时设置 leftright 等同于隐式地设置宽度

image
image

C. 为某个div子divz-index是否起效?(与49个知识点中的第9个知识点不一致:层叠上下文:小辈就是小辈,再厉害也只是个小辈)

<html>
    <head>
        <style>
            div {
                /**
                该position注释掉后,
                下面第一个div的子元素在最上层;
                
                若该注释放开,则子div会在第二个div的下面
                但为子div加上z-index后还是可以使其在上层
                
                */
                /**position: relative; */
                width: 100px;
                height: 100px;
                background-color: aqua;
                border: 1px solid black;
            }
            .div2 {
                margin-left: 30px;
                margin-top: -60px;
            }
            .div3 {
                margin-left: 60px;
                margin-top: -60px;
            }
            
            .inner {
                position: relative; /**absolute也一样*/
                left: 25px;
                top: 25px;
                width: 50px;
                height: 50px;
                background-color: red;
            }
        </style>
    </head>
    <body>
        <div>
            <div class="inner"></div>
        </div>
        <div class="div2"></div>
        <div class="div3"></div>
    </body>
</html>
image
样式中divposition:relative放开看效果
image
再为子元素加上z-index:10看看效果
image
上一篇 下一篇

猜你喜欢

热点阅读