2017-01-10 3 views
0

Я пытаюсь сделать игру Гомоку. Плата выглядит как обычная сетка, за исключением того, что куски помещаются на пересечениях, а не в пространствах.CSS, наложение линий и фигур на кнопку?

looks like this

До сих пор у меня есть сетка, как этот tic-tac-toe example из учебника Reactjs.

Соответствующий CSS из него:

.board-row:after { 
    clear: both; 
    content: ""; 
    display: table; 
} 

.square { 
    background: #fff; 
    border: 1px solid #999; 
    float: left; 
    font-size: 24px; 
    font-weight: bold; 
    line-height: 34px; 
    height: 34px; 
    margin-right: -1px; 
    margin-top: -1px; 
    padding: 0; 
    text-align: center; 
    width: 34px; 
} 

.square:focus { 
    outline: none; 
} 

Они делают сетку кнопок, где каждое пространство является кнопка. Однако мне нужно сделать мои пересечения кликабельными, а не пробелами. Я планирую сделать такие кнопки, как my buttons, чтобы сделать доску. Синие границы будут невидимыми, и я заставил их четко видеть каждую кнопку. Черный круг в последнем - это часть, играемая на пересечении.

Как добавить эти линии и круги в свои кнопки? Или есть лучший способ сделать это? Благодарю.

ответ

1

хорошо, если у вас есть DIV вы можете сделать это

div { 
    width: 100px; 
    height: 100px; 
    position: relative; 
    outline: 1px solid red; 
} 

div:after{ 
    content: ''; 
    position: absolute; 
    background-color: black; 
    top:0; 
    bottom: 0; 
    left: 45px; 
    right: 45px; 
} 


div:before{ 
    content: ''; 
    position: absolute; 
    background-color: black; 
    top:45px; 
    bottom: 45px; 
    left: 0; 
    right: 0; 
} 

рабочий пример http://jsbin.com/mupucurebi/edit?html,css,js,output

1

Использовать как контейнере flexbox с padding и flex-wrap: wrap. Теперь все, что вам нужно сделать, это отобразить 64 элемента, которые имеют нужный размер.

Кроме того, вы можете использовать шаблон градиента в качестве фона. Фон был основан на шаблоне в enjoycss.

const { render } = ReactDOM; 
 

 
const Board =() => (
 
    <div className="bg"> 
 
    { 
 
    Array.from({ length: 64 }, (i, k) => (
 
     <div key={ k } className="piece" /> 
 
    )) 
 
    } 
 
    </div> 
 
); 
 

 
render(
 
    <Board />, 
 
    document.getElementById('root') 
 
);
body { 
 
    margin: 0; 
 
    padding: 2px; 
 
} 
 

 
.bg { 
 
    display: flex; 
 
    flex-wrap: wrap; 
 
    box-sizing: content-box; 
 
    width: 272px; 
 
    height: 269px; 
 
    padding: 14px 16px; 
 
    border: none; 
 
    color: rgba(255,255,255,1); 
 
    text-overflow: clip; 
 
    background: linear-gradient(0deg, #000000 0, #FFFFFF 2px, rgba(0,0,0,0) 2px, rgba(0,0,0,0) 100%), linear-gradient(90deg, #000000 0, #FFFFFF 2px, rgba(0,0,0,0) 2px, rgba(0,0,0,0) 100%), rgba(255,255,255,1); 
 
    background-position: -2px -2px; 
 
    background-clip: border-box; 
 
    background-size: 34px 34px; 
 
} 
 

 
.piece { 
 
    width: 30px; 
 
    height: 30px; 
 
    margin: 2px; 
 
    border-radius: 50%; 
 
    background: blue; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.min.js"></script> 
 

 
<div id="root"></div>

Смежные вопросы