38.前端基础-布局1

11.1 未知高度元素垂直居中、垂直居中的实现方式有哪些?

参考答案:

1、绝对定位+css3 transform:translate(-50%,-50%)

.wrap{
  position:relative;
}
.child{
  position: absolute;
  top:50%;
  left:50%;
  -webkit-transform:translate(-50%,-50%);
}

2、css3 的flex布局

.wrap{
  display:flex;
  justify-content:center;
}
.child{
  align-self:center;
}

3、table布局

<div class="wrap">
   <div class="child">
          <div>sadgsdgasgd</div>
   </div>
</div>
.wrap{
  display:table;
  text-align:center;
}
.child{
  background:#ccc;
  display:table-cell;
  vertical-align:middle;
}
.child div{
    width:300px;
    height:150px;
    background:red;
    margin:0 auto;
}

11.2 实现图片垂直居中

参考答案:

1. 使用flex实现图片垂直居中

利用 display: flex;align-items: center 实现垂直居中。flex可能不是实现垂直居中最好的选择,因为IE8,9并不支持它。

html代码:

<div class="flexbox">
    <img src="1.jpg" alt=""></div>

css代码:

body{ background:#999}
.flexbox{width: 300px;height: 250px;background:#fff;display: flex;align-items: center}
.flexbox img{width: 100px;height: 100px;align-items: center;}

2. 利用Display: table;实现img图片垂直居中

给最外层的div设置display属性为table;img的父元素div设置display:table-cell,vertical-align: middle;如果你也想实现水平居中,你可以给最外层的div元素添加text-align: center属性

html代码:

<div class="tablebox">
    <div id="imgbox">
        <img src="1.jpg" alt="">
    </div></div>

css代码:

.tablebox{width: 300px;height: 250px;background: #fff;display: table}
#imgbox{display: table-cell;vertical-align: middle;}
#imgbox img{width: 100px}

3. 用绝对定位实现垂直居中(推荐-兼容性好)

  1. 给img的父元素添加相对定位属性(position: relative),同时,要给子元素也就是图片img元素添加绝对定位属性(position: absolute)。

  2. 将图片元素的top属性设置为50%。

  3. 现在我们需要给img元素设置一个负的margin-top值,这个值为你想要实现垂直居中的元素高度的一半,*如果不确定元素的高度,可以不使用margin-top,而是使用transform:translateY(-50%);属性。

    记住:如果你想要同时实现水平居中,那么你可以用实现垂直居中的一样的技巧来实现。

    HTML代码:

    <div class="posdiv">
    <img src="1.jpg" alt=""></div>

    css代码:

    body{background: #ccc;}
    .posdiv{width: 300px;height: 250px;background: #fff;position: relative; margin:0 auto}
    .posdiv img{width: 100px;position: absolute;top: 50%;margin-top: -50px;}

11.3 设置斑马线表格(纯css)

参考答案:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>斑马线表格</title>
 <style type="text/css">
 *{
  margin: 0;
  padding: 0;
  /*清处浏览器默认设置*/
 }
 table{
  /*表格的外边距和大小*/
  margin: 10px 0 0 0;
  width: 100%;
  border-spacing: 0;
  border-collapse: collapse;
  /*collapse 表格单元格边框合并 
   border-spacing 表格单元格间距为零
  */
 }
 caption{
  font: 30px "楷体";
  padding: 5px;
  /*表格标题*/
 }
 td{
  width: 32%;
  height: 50px;
  /*单元格大小*/
 }
 tbody td{
   border: 1px solid;
   /*表格主体的边框*/
 }
 thead{
  background-color: #A2A5A7;
  /*表格头部*/
 }
 tr:hover{
  background-color: #66D9EF;
  cursor: pointer;
  /*鼠标悬停在表格上时,表格的背景和鼠标的形状*/
 }
 table tbody tr:nth-child(even){
  background-color: #8F908A;
  box-shadow: inset 0 5px rgba(255,255,255,0.5);
  /*even为偶数行 odd为奇数行
    设置表格的主体部分偶数行的样式
    shadow 阴影  inset将外部阴影改为内部阴影
  */
 }
 thead tr th:first-child
 {
  /*表头部分th 第一个th左上角设置圆角*/
  border-radius: 15px 0 0 0;
 }
 thead tr td:last-child{
  /*最后一个单元格右上角设置圆角*/
  border-radius: 0 15px 0 0;
 }
 </style>
</head>
<body>
 <table>
 <caption>斑马线表格</caption>
 <thead>
  <tr>
   <th></th>
   <td></td>
   <td></td>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td></td>
   <td></td>
   <td></td>
  </tr>
  <tr>
   <td></td>
   <td></td>
   <td></td>
  </tr>
  <tr>
   <td></td>
   <td></td>
   <td></td>
  </tr>
  <tr>
   <td></td>
   <td></td>
   <td></td>
  </tr>
  <tr>
   <td></td>
   <td></td>
   <td></td>
  </tr>
  <tr>
   <td></td>
   <td></td>
   <td></td>
  </tr>
 </tbody>
  <tfoot>
   <tr>
    <td></td>
    <td></td>
    <td></td>
   </tr>
  </tfoot>
 </table>
</body>
</html>

11.4 文本元素如何居中

参考答案:

  1. CSS设置文字水平居中

    在CSS中可以使用text-align属性来设置文字水平居中。该属性规定元素中的文本的水平对齐方式,通过使用center值设置文本居中。

    text-align是一个基本的属性,它会影响一个元素中的文本行互相间的对齐方式。值left、right和center会导致元素中的文本分别左对齐、右对齐和居中,想要使文本居中,直接使用center即可。

    该属性设置文本和img标签等一些内联对象(或与之类似的元素)的居中。

    该属性有如下几个特点:

    1)text-align的center应用在一个容器上,它只针对容器里面的文字以及容器里面的display为inline或者inline-block的容器,如果里面的容器display为block,则里面的容器的内容不会居中。

    2)text-align具有向下传递性,会不断地向子元素传递。如果设置一个div,则其子div中的内容也会居中。

    <!DOCTYPE html>
    <html>
     <head>
       <meta charset="UTF-8">
       <title>css 水平居中</title>
       <style>
         .box {
           width: 400px;
           height: 100px;
           background: pink;
           text-align:center;
         }
       </style>
     </head>
     <body>
       <div class="box">css 水平居中了--文本文字</div>
     </body>
    
    </html>
  2. CSS设置字体垂直居中

    2.1 单行文字垂直居中

    对于单行文本,我们只需要将文本行高(line-height属性)和所在区域高度(height)设置一致就可以了

    <!DOCTYPE html>
    <html>
     <head>
       <meta charset="UTF-8">
       <title>css 垂直居中</title>
       <style>
         .box {
           width: 300px;
           height: 300px;
           background: paleturquoise;
           line-height:300px;
         }
       </style>
     </head>
     <body>
       <div class="box">css 垂直居中了--文本文字</div>
     </body>
    </html>

    2.2 多行文本垂直居中

    说明:多行文本垂直居中分为两种情况,一个是父级元素高度不固定,随着内容变化;另一个是父级元素高度固定。

    1) 父级元素高度不固定

    父级高度不固定的时,高度只能通过内部文本来撑开。所以,我们可以通过设置内填充(padding)的值来使文本看起来垂直居中,只需设置padding-top和padding-bottom的值相等:

    <!DOCTYPE html>
    <html>
     <head>
       <meta charset="UTF-8">
       <title>css 垂直居中</title>
       <style>
         .box {
           width: 300px;
           margin: 50px auto;
           background: paleturquoise;
           padding: 50px 20px;
         }
       </style>
     </head>
     <body>
       <div class="box">css 垂直居中了--文本文字,文本文字,文本文字,文本文字,文本文字,文本文字</div>
     </body>
    </html>

2) 父级元素高度固定

使用vertical-align:middle +display:table-cell 使文字垂直居中

   <!DOCTYPE html>
   <html>
    <head>
      <meta charset="UTF-8">
      <title>css 垂直居中</title>
      <style>
        .box {
          width: 300px;
          height: 300px;
          background: paleturquoise;
          vertical-align:middle;
          display:table-cell;
        }
      </style>

    </head>

    <body>

      <div class="box">css 垂直居中了--文本文字,文本文字,文本文字,文本文字,文本文字,文本文字。</div>

    </body>

   </html>

说明:vertical-align:middle +display:table-cell能够使单行文字、多行文字都居中。但是因为 table-cell 是 inline 类型,所以会导致原来的块级元素每个 div 一行移动到了同一行。如果需要分列两行,需要在外面额外添加容器对位置进行控制。

11.5 用flex实现九宫格讲思路

参考答案:

利用了padding-top和flex-wrap:wrap,当设置background-color时,是包括盒子模型中的content和padding的,但是为什么不设置height呢?因为父元素没有高度,所以定义height:30%是没有用的,且若想每个block都为正方形,最好的方式就是设置padding-top/padding-bottom:a%,因为此时的百分比是父元素宽度的百分比,而width也为父元素宽度的百分比,所以block可以成为正方形。

<!DOCTYPE html>
<html>
<style>
.block {
    padding-top: 30%;
    margin-top: 3%;
    border-radius: 10%;
    background-color: orange;
    width: 30%;
}
.container-flex2  {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
}
</style>
<body>
   <div class="container-flex2">
        <div class="block"></div>
        <div class="block"></div>
        <div class="block"></div>
        <div class="block"></div>
        <div class="block"></div>
        <div class="block"></div>
        <div class="block"></div>
        <div class="block"></div>
        <div class="block"></div>
    </div>
</body>
</html>

11.6 CSS实现一个等腰三角形

参考答案

主要是通过把宽高设置成0,边框宽度设置宽一些,设置其中三个边透明,只留一个边显示

等边三角形是特殊的等腰三角形,它的三条边都相等,顶角为60度,而高是边长的3^(1/2)/2倍,约等于0.866……假设底为160px,则高约为138.56px,因此要做边长为160px的等边三角形,可以这么做:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>测试</title>
  <style type="text/css">
    div {
       width:0px;height:0px;margin:100px auto;
       border-left:80px solid transparent; 
       border-right:80px solid transparent; 
       border-bottom:138.56px solid #A962CE; /*--三角形的高--*/
    }
  </style>
</head>
<body>
  <div>
  </div>
</body>
</html>

扩展:

用CSS实现一个等边三角形:

根据各个边之间的长度关系,我们易知:需要展示的边框的宽度:相邻的透明的边框的宽度 = √3 :1

.triangle{
  width: 0px;
  height: 0px;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;;
  border-top: 17.32px solid transparent;
  border-bottom: 17.32px solid red; 
}
全部评论

相关推荐

伟大的烤冷面被普调:暨大✌🏻就是强
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务