Home >Web Front-end >CSS Tutorial >Implementation of Flexbox dice layout in CSS3 and explanation of problems

Implementation of Flexbox dice layout in CSS3 and explanation of problems

高洛峰
高洛峰Original
2017-02-16 13:44:481436browse

This article is just to familiarize yourself with the usage of basic attributes and complete the production of each side of a set of dice. In the following content, I will not cover some of the more difficult issues with flexbox, such as old version syntax, vendor prefixes, browser quirks, etc.:

1. First Face
We know that the dice has six sides , the number of points in each face represents the value of the face, and the first face consists of a horizontally and vertically centered point. Let’s look at the specific implementation:

<section>   
  <span></span>   
 </section>   
face-01 {   
display: flex;   
justify-content: center;   
align-items: center;

For the usage of justify-content and align-items, please refer to here justify-content, align-items. Using flexbox, you can do it by vertically centering two rows of attributes. It’s very easy!

2. Second Face

.face-02 {   
 display: flex;   
 justify-content: space-between;   
}   
.face-02 .dot:nth-of-type(2) {   
 align-self: flex-end;   
}   
  <section>   
   <span></span>   
   <span></span>   
  </section>

We can’t use the align-items attribute here. Using it will affect both points. Flexbox provides an align-self attribute, which allows us to more conveniently control the flex items to set different layouts along the cross axias direction. For the usage of align-self, please refer to align-self here.

3. Third Face

.face-03 {   
 display: flex;   
 justify-content: space-between;   
}   
.face-03 .dot:nth-of-type(2) {   
 align-self: center;   
}   
.face-03 .dot:nth-of-type(3) {   
 align-self: flex-end;   
}   
<section>   
 <span></span>   
 <span></span>   
 <span></span>   
</section>

This face uses the same attributes as the second face and will not be explained again.

4. Fourth Face

.face-04 {   
 display: flex;   
 justify-content: space-between;   
 flex-direction: column;   
}   
.face-04 .column {   
 display: flex;   
 justify-content: space-between;   
}   
<section>   
  <div>   
    <span></span>   
    <span></span>   
  </div>   
  <div>   
    <span></span>   
    <span></span>   
  </div>   
</section>

In this example, flex-direction is used. From the literal meaning, it can be seen that it is used to control the direction of flex, that is, by column Or layout by row. For more detailed usage of this attribute, please refer to the Fifth Face and Sixth Face behind flex-direction

. According to the previous layout ideas, it is very easy and I won’t go into details!

Writing this, it should be easy to write a small game of playing dice with JS.

5. Implement 1,2,3,4,6,12 equal parts

.row {   
  display: flex;   
  box-sizing: border-box;   
}   
  
.column {   
  margin: 10px;   
  flex-grow: 1;   
  flex-shrink: 1;   
  flex-basis: 0;   
  box-sizing: border-box;   
}   
<section>   
  <div>One</div>   
</section>   
<section>   
  <div>One Half</div>   
  <div>One Half</div>   
</section>   
<section>   
  <div>One Third</div>   
  <div>One Third</div>   
  <div>One Third</div>   
</section>   
<section>   
  <div>One Fourth</div>   
  <div>One Fourth</div>   
  <div>One Fourth</div>   
  <div>One Fourth</div>   
</section>   
<section>   
  <div>One Sixth</div>   
  <div>One Sixth</div>   
  <div>One Sixth</div>   
  <div>One Sixth</div>   
  <div>One Sixth</div>   
  <div>One Sixth</div>   
</section>   
<section>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
  <div>One Twelve</div>   
</section>

In this example, flex-grow, flex-shrink, flex are used -basis three attributes.
1. flex-grow: Used to define the expansion capabilities of flex items as needed. It accepts a value without units as a ratio. It is mainly used to determine how much space should be expanded proportionally to the remaining space of the scalable container.
If the "flex-grow" of all flex items is set to "1", then each flex item will be set to an equal-sized remaining space. If you set the "flex-grow" value to "2" for one of the flex items, then the remaining space occupied by this flex item is twice the remaining space occupied by the other flex items. Negative values ​​are invalid.
2. flex-shrink: Used to define the ability to shrink flex items as needed. Negative values ​​are also invalid.
3. flex-basis: Used to set the scaling baseline value. The remaining space is scaled according to the ratio. Negative values ​​are not supported. If set to 0, additional space around the content is not taken into account. If set to auto, additional space is allocated based on the flex-grow value.

6. Implement 2-3-7 layout

.row237 .column:first-of-type {   
  flex-grow: 2;   
  flex-basis: 5px;   
}   
.row237 .column:nth-of-type(2) {   
  flex-grow: 3;   
  flex-basis: 18px;   
}   
.row237 .column:nth-of-type(3) {   
  flex-grow: 7;   
  flex-basis: 70.5px;   
}   
  
<section>   
  <div>One Half</div>   
  <div>One Third</div>   
  <div>One Seventh</div>   
</section>

There should be a formula (to be solved) for calculating the values ​​of various flex-basis here. If there is such a formula, cooperate with sass , less and other pre-processing languages ​​​​will be very convenient to implement multi-column adaptive layout.

For more related articles on the implementation and problem explanation of CSS3 Flexbox dice layout, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn