Estoy creando damas chinas, uso la etiqueta span para crear círculos. Se agregó solo el relleno izquierdo a la esquina superior. Tengo dos preguntas:

1) Por qué las filas parecen tener una distancia entre ellas, pero no las columnas.

2) Para corregir 1) Agregué padding-left, pero en lugar de agregar distancia, el relleno se convirtió en parte del círculo, ¿por qué?

Aquí está el enlace cómo se ve:

enter image description here

Aquí hay parte del código:

    .player0{
            height: 40px;
            width: 40px;
            padding-right: 5px;
            background-color: transparent;
            border-radius: 50%;
            display: inline-block;
        }
    divs += "<span class='player"+fullBoardArr[fullArrIter]+" 'onclick='send()'></span>"
    divs += "<div class='clear_float'> </div>" //for separation of rows
1
RandomGamora Max 6 feb. 2020 a las 13:52

2 respuestas

La mejor respuesta

Como dije en los comentarios, debe usar margin en lugar de padding.

No usaría "clear_float" (supongo que se trata de la propiedad float CSS). En su lugar, ajuste los elementos que pertenecen a la misma fila, en un elemento div separado.

Según la imagen que incluyó, parece que tiene un problema para alinear las celdas. Puede usar muchas formas de resolver esto, pero como su tablero es simétrico horizontalmente (ignorando los colores), puede usar text-align: center.

Me divertí creando la lógica de JavaScript para el tablero en sí. Puede encontrar algunos aspectos interesantes para reutilizar:

class Cell {
    constructor(rowId, colId) {
        this._value = 0;
        this.rowId = rowId;
        this.colId = colId;
        this.elem = document.createElement("span");
        this.elem.className = "cell";
        this.selected = false;
    }
    get value() {
        return this._value;
    }
    set value(value) {
        this._value = value;
        this.elem.style.backgroundColor = ["", "grey", "blue", "red"][value];
    }
    toggleSelected() {
        this.selected = !this.selected;
        this.elem.classList.toggle("selected", this.selected);
    }
}

class Board {
    constructor() {
        this._container = document.createElement("div");
        this._container.className = "board";
        this.elemMap = new Map;
        this.grid =   [[0,0,0,0,2,0,0,0,0,0,0,0,0],
                       [0,0,0,0,2,2,0,0,0,0,0,0,0],
                       [0,0,0,0,2,2,2,0,0,0,0,0,0],
                       [0,0,0,0,2,2,2,2,0,0,0,0,0],
                       [3,3,3,3,1,1,1,1,1,4,4,4,4],
                       [0,3,3,3,1,1,1,1,1,1,4,4,4],
                       [0,0,3,3,1,1,1,1,1,1,1,4,4],
                       [0,0,0,3,1,1,1,1,1,1,1,1,4],
                       [0,0,0,0,1,1,1,1,1,1,1,1,1]];
        // create the data structure for the game and produce the corresponding DOM
        this.grid.forEach((row, rowId) => {
            let div = document.createElement("div");
            row.forEach((value, colId) => {
                if (!value--) return;
                let cell = row[colId] = new Cell(rowId, colId);
                cell.value = value;
                div.appendChild(cell.elem);
                this.elemMap.set(cell.elem, cell);
            });
            this._container.appendChild(div);
        });
    }
    set container(elem) {
        elem.appendChild(this._container);
    }
    getEventCell(e) {
        return this.elemMap.get(e.target);
    }
    set selected(cell) {
        if (this._selected) {
            this._selected.toggleSelected();
            this._selected = null;
        }
        if (!cell) return;
        cell.toggleSelected();
        this._selected = cell;
    }
    get selected() {
        return this._selected;
    }
    move(cellFrom, cellTo) {
        // TODO: Implement the real move rules here
        if (!cellFrom.value) return; // must move a piece
        if (cellTo.value) return; // capturing not allowed
        cellTo.value = cellFrom.value;
        cellFrom.value = 0;
        board.selected = null;
    }
}

let container = document.querySelector("#container");
let board = new Board();
board.container = container;
container.addEventListener("click", e => {
    let cell = board.getEventCell(e);
    if (!cell) return; // click was not on a cell
    if (!board.selected || cell.value) {
        board.selected = cell;
    } else {
        board.move(board.selected, cell);
    }
});
.board { 
    text-align: center;
    margin-left: auto; margin-right: auto;
}

.cell {
    height: 15px;
    width: 15px;
    margin: 0px 2px;
    border: 1px solid;
    border-radius: 50%;
    display: inline-block;
}

.selected {
    border-color: orange;
}
<div id="container"></div>

Puede hacer clic para seleccionar una pieza y luego hacer clic nuevamente en un lugar vacío para moverlo allí.

1
trincot 6 feb. 2020 a las 14:25

Use margin en lugar de padding:

.player0{
    height: 40px;
    width: 40px;
    margin-right: 5px;
    background-color: transparent;
    border-radius: 50%;
    display: inline-block;
}

Como referencia rápida fácil de recordar , margen cambia la posición a partir de fuera el borde del elemento, relleno desde el interior

0
nopassport1 6 feb. 2020 a las 14:23