position: absolute and alignSelf

This commit is contained in:
Christopher Chedeau
2014-04-21 14:58:44 -07:00
parent 72e2d959f2
commit 9760cfd323
2 changed files with 32 additions and 18 deletions

View File

@@ -243,27 +243,30 @@ var computeLayout = (function() {
for (var/*int*/ i = 0; i < node.children.length; ++i) { for (var/*int*/ i = 0; i < node.children.length; ++i) {
var/*css_node_t**/ child = node.children[i]; var/*css_node_t**/ child = node.children[i];
var/*css_align_t*/ alignItem = getAlignItem(node, child);
var/*float*/ remainingCrossDim = node.layout[dim[crossAxis]] -
getDimWithMargin(child, crossAxis) -
getPadding(node, leading[crossAxis]) -
getPadding(node, trailing[crossAxis]);
var/*float*/ leadingCrossDim = getPadding(node, leading[crossAxis]); if (getPositionType(child) === 'relative') {
if (alignItem == CSS_ALIGN_FLEX_START) { var/*css_align_t*/ alignItem = getAlignItem(node, child);
// Do nothing var/*float*/ remainingCrossDim = node.layout[dim[crossAxis]] -
} else if (alignItem == CSS_ALIGN_CENTER) { getDimWithMargin(child, crossAxis) -
leadingCrossDim += remainingCrossDim / 2;
} else if (alignItem == CSS_ALIGN_FLEX_END) {
leadingCrossDim += remainingCrossDim;
} else if (alignItem == CSS_ALIGN_STRETCH) {
child.layout[dim[crossAxis]] = node.layout[dim[crossAxis]] -
getPadding(node, leading[crossAxis]) - getPadding(node, leading[crossAxis]) -
getPadding(node, trailing[crossAxis]) - getPadding(node, trailing[crossAxis]);
getMargin(child, leading[crossAxis]) -
getMargin(child, trailing[crossAxis]); var/*float*/ leadingCrossDim = getPadding(node, leading[crossAxis]);
if (alignItem == CSS_ALIGN_FLEX_START) {
// Do nothing
} else if (alignItem == CSS_ALIGN_CENTER) {
leadingCrossDim += remainingCrossDim / 2;
} else if (alignItem == CSS_ALIGN_FLEX_END) {
leadingCrossDim += remainingCrossDim;
} else if (alignItem == CSS_ALIGN_STRETCH) {
child.layout[dim[crossAxis]] = node.layout[dim[crossAxis]] -
getPadding(node, leading[crossAxis]) -
getPadding(node, trailing[crossAxis]) -
getMargin(child, leading[crossAxis]) -
getMargin(child, trailing[crossAxis]);
}
child.layout[pos[crossAxis]] += leadingCrossDim;
} }
child.layout[pos[crossAxis]] += leadingCrossDim;
} }
node.layout[leading[mainAxis]] += getMargin(node, leading[mainAxis]) + node.layout[leading[mainAxis]] += getMargin(node, leading[mainAxis]) +

View File

@@ -493,6 +493,17 @@ describe('Layout', function() {
); );
}); });
it('should layout node with position: absolute, padding and alignSelf: center', function() {
testLayout(
{style : {}, children : [
{style: {paddingRight: 12, alignSelf: 'center', position: 'absolute'}}
]},
{width: 0, height: 0, top: 0, left: 0, children: [
{width: 12, height: 0, top: 0, left: 0}
]}
);
})
it('should layout randomly', function() { it('should layout randomly', function() {
function RNG(seed) { function RNG(seed) {
this.state = seed; this.state = seed;