资料
https://css-tricks.com/snippets/css/a-guide-to-flexbox/

布局

flex 设定两列布局

场景:在设定两列布局时,如果给子元素设定 flex:1, 那么当其中一个子元素中的宽度超出时,会导致挤压另一个子元素,导致不是均分的两列布局
解决:使用 width:50%;

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. .container{
  10. height: 500px;
  11. width: 500px;
  12. display: flex;
  13. }
  14. .left{
  15. /* flex: 1; */
  16. width: 50%;
  17. border: 1px solid black;
  18. }
  19. .right{
  20. /* flex: 1; */
  21. width: 50%;
  22. border: 1px solid black;
  23. }
  24. .desc-container{
  25. margin: 100px 0 30px;
  26. }
  27. .desc-content{
  28. width: 100%;
  29. max-width: 352px;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <div class="container">
  35. <div class="left">
  36. <h2>Fluent Design System</h2>
  37. <div class="desc-container">
  38. <div class="desc-content">
  39. Go ahead, pick a platform to get started.
  40. Go ahead, pick a platform to get started.
  41. Go ahead, pick a platform to get started.
  42. </div>
  43. </div>
  44. </div>
  45. <div class="right">
  46. <img src="https://fluentdesign.blob.core.windows.net/assets/icon-fluent@1x.png" alt="">
  47. </div>
  48. </div>
  49. </body>
  50. </html>

延伸写法

  1. 给子元素设定 flex : 1 1 auto;

另一个子元素会进行挤压
image.png

  1. flex : 0 0 auto;

不会进行挤压
image.png


flex 表示的是 flex-grow , flex-shrink, flex-basis 。
其中 flex : 1.表示的就是 flex:1 1 0.
当 flex-basis 设置为0的时候,表示flexbox完全忽略flex子元素的尺寸,告诉 flexbox 所有空间都可以抢占,并按比例分享。

相关问题:当 父元素为 flex 时,给子元素设定 flex:50% 或者 width:50% 都是一样的效果
https://stackoverflow.com/questions/23779144/difference-between-width-50-and-flex-50-in-a-css-flexbox

类似菜单项可换行布局

如下案例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. .container {
  10. /* width: 500px; */
  11. display: flex;
  12. flex-wrap: wrap; //*
  13. }
  14. .item {
  15. box-sizing: border-box;
  16. width: 25%; //*
  17. height: 100px;
  18. border: 1px solid black;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <div class="container">
  24. <div class="item">
  25. item
  26. </div>
  27. <div class="item">
  28. item
  29. </div>
  30. <div class="item">
  31. item
  32. </div>
  33. <div class="item">
  34. item
  35. </div>
  36. <div class="item">
  37. item
  38. </div>
  39. <div class="item">
  40. item
  41. </div>
  42. </div>
  43. </body>
  44. </html>

image.png

同时设定 max-width 与 width

样式

鼠标移动到图片上,呈放大效果

参照:https://didi.github.io/mand-mobile/#/zh-CN/home

知识点:scale

  1. <div class="box">
  2. box
  3. </div>
  4. .box {
  5. margin: 10px auto;
  6. width: 100px;
  7. height: 100px;
  8. border: 1px solid black;
  9. transition: all 0.8s;
  10. }
  11. .box:hover {
  12. transform: scale(1.2);
  13. }

图标上下浮动的动画

参照:https://didi.github.io/mand-mobile/#/zh-CN/home

知识点:animation

  1. <div class="trans"></div>
  2. <style>
  3. .trans {
  4. /* 随便来点样式 */
  5. height: 200px;
  6. width: 200px;
  7. background: red;
  8. /* END */
  9. /* 引入动画(1.3s可控制速度) */
  10. animation: heart 1.3s ease-in-out infinite alternate;
  11. /* END */
  12. }
  13. @keyframes heart {
  14. from {
  15. transform: translate(0, 0)
  16. }
  17. to {
  18. transform: translate(0, 30px)
  19. }
  20. /* 下浮高度 */
  21. }
  22. </style>