justify content的功能和使用规则
时间: 2024-03-27 22:21:08 浏览: 30
`justify-content` 是一个 CSS 属性,用于控制 flex 容器中 flex 项目在主轴方向上的对齐方式。
它的使用规则如下:
1. 只能用于 flex 容器上,而不能用于 flex 项目上;
2. 可以有多个值,以空格分隔,表示对齐方式的优先级;
3. 可以使用的值包括:`flex-start`、`flex-end`、`center`、`space-between`、`space-around`、`space-evenly`;
4. 默认值为 `flex-start`,即左对齐;
5. 不同的对齐方式有不同的效果,具体如下:
- `flex-start`:左对齐,即所有项目紧靠容器左侧;
- `flex-end`:右对齐,即所有项目紧靠容器右侧;
- `center`:居中对齐,即所有项目在容器中心位置;
- `space-between`:两端对齐,即第一个项目在容器左侧,最后一个项目在容器右侧,其余项目平均分布在容器中间位置;
- `space-around`:每个项目两侧间隔相等,即项目之间间隔相等,左右两端项目与容器边缘的间隔为其它项目间隔的一半;
- `space-evenly`:每个项目之间间隔相等,包括左右两端项目与容器边缘的间隔。
总之,`justify-content` 属性可以帮助我们灵活地控制 flex 项目在主轴方向上的排列方式,使页面布局更加美观和合理。
相关问题
4. 通常Web页面底部都会有一个版权信息,各个页面都写一个版权信息显然很繁琐。因此,请创建一个自定义插件,实现版权信息显示。要求:版权作者填写“1班、老六”,联系方式写10086。 5.请给按钮加上动画特效。点击之后,出现进度条,处理完成之后进度条消失。为了可以方便观测到进度条,可以在计算的函数当中增加一个等待2秒的操作。 6.在页面顶部增加导航“奖学金评选资格功能”和“奖学金评选资格功能说明”。具体地,点击“奖学金评选资格功能”显示相应功能,点击“奖学金评选资格功能说明”显示功能规则说明文字。 7.“Vue状态管理”的技术点,统计操作成功数和未操作成功数。
以下是实现题目要求的Vue源码:
1. 自定义插件实现版权信息显示:
```
// copyright.js
export default {
install(Vue) {
Vue.prototype.$copyright =
'版权所有:1班、老六,联系方式:10086';
}
}
```
在main.js中引入该插件:
```
import Copyright from '@/plugins/copyright'
Vue.use(Copyright)
```
在组件中即可使用`this.$copyright`获取版权信息。
2. 给按钮加上动画特效:
```
// 组件中的按钮代码
<button @click="hzd_checkQualification" class="hzd-button">
<span>判断是否可以参评奖学金</span>
<div class="hzd-progress-bar" v-show="hzd_loading"></div>
</button>
// 组件的CSS代码
.hzd-button {
position: relative;
}
.hzd-button span {
z-index: 1;
}
.hzd-progress-bar {
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 2px;
background-color: #007aff;
transition: width 2s ease-in-out;
}
.hzd-progress-bar::before {
content: '';
position: absolute;
top: -5px;
left: -5px;
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #007aff;
animation: hzd-pulsate 1.5s ease-out infinite;
opacity: 0.0;
}
@keyframes hzd-pulsate {
0% {
transform: scale(0.1, 0.1);
opacity: 0.0;
}
50% {
opacity: 1.0;
}
100% {
transform: scale(1.2, 1.2);
opacity: 0.0;
}
}
```
使用CSS实现了一个进度条和按钮的动画特效,点击按钮时会显示进度条,处理完成之后进度条消失。为了可以方便观测到进度条,计算的函数中增加了一个等待2秒的操作。
3. 在页面顶部增加导航:
```
// 组件的HTML代码
<div class="hzd-nav">
<ul>
<li><a href="#" @click.prevent="hzd_showFunction">奖学金评选资格功能</a></li>
<li><a href="#" @click.prevent="hzd_showFunctionDesc">奖学金评选资格功能说明</a></li>
</ul>
</div>
// 组件的CSS代码
.hzd-nav {
background-color: #f8f9fa;
border-bottom: 1px solid #dee2e6;
margin-bottom: 20px;
}
.hzd-nav ul {
display: flex;
justify-content: space-between;
padding: 0;
margin: 0;
list-style: none;
}
.hzd-nav li {
margin: 0 20px;
}
.hzd-nav a {
color: #007bff;
text-decoration: none;
}
.hzd-nav a:hover {
text-decoration: underline;
}
```
使用HTML和CSS实现了一个简单的导航栏,点击不同的链接可以显示不同的功能或说明。
4. 使用Vue状态管理统计操作成功数和未操作成功数:
```
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
successCount: 0,
failCount: 0
},
mutations: {
incrementSuccessCount(state) {
state.successCount++
},
incrementFailCount(state) {
state.failCount++
}
}
})
```
在main.js中引入该状态管理插件:
```
import store from '@/store'
new Vue({
store,
render: h => h(App),
}).$mount('#app')
```
在组件中使用该状态管理插件:
```
// 组件的计算属性代码
hzd_successCount() {
return this.$store.state.successCount
},
hzd_failCount() {
return this.$store.state.failCount
}
// 组件的判断条件代码
if (averageScore >= 90 && this.hzd_score1 >= 80 && this.hzd_score2 >= 80 && this.hzd_score3 >= 80 && this.hzd_score4 >= 80 && this.hzd_score5 >= 80) {
this.hzd_success = true;
this.hzd_message = this.hzd_name + '符合奖学金评选条件!';
this.$store.commit('incrementSuccessCount');
} else {
this.hzd_success = false;
this.hzd_message = this.hzd_name + '不符合奖学金评选条件!';
this.$store.commit('incrementFailCount');
}
```
使用计算属性统计操作成功数和未操作成功数,使用mutations实现增加计数的功能。每次成功或失败时,调用mutations中的方法,增加对应计数。
在vue2中怎么使用cesium,自己手动绘制点线面功能
你可以使用Cesium的Vue组件来集成Cesium到Vue 2中。首先,你需要安装Cesium和VueCesium组件:
1. 安装Cesium: 可以从官网下载或使用npm安装。
```
npm install cesium --save
```
2. 安装VueCesium:
```
npm install vue-cesium --save
```
3. 在Vue组件中使用Cesium:
a. 引用Cesium和VueCesium:
```javascript
import * as Cesium from "cesium";
import VueCesium from "vue-cesium";
```
b. 注册VueCesium:
```javascript
Vue.use(VueCesium, {
// 版本号,对应Cesium.js的版本号
cesiumPath: '/static/Cesium/Cesium.js',
// 在启动VueCesium的时候自动注入Cesium对象
// 如果不注入,需要通过this.$Cesium调用
// 如果单独在组件中使用
// this.$Cesium === Cesium
// 如果在Vue mixin中使用
// Vue.prototype.$Cesium === Cesium
// 如果在常规JavaScript文件或者函数中使用
// import Cesium from 'cesium/Cesium'
});
```
c. 在Vue组件中使用Cesium:
```vue
<template>
<div>
<!-- 根据组件的命名规则,直接在组件中使用cesium视图,并增加cesium属性,支持覆盖默认的配置 -->
<cesium-viewer ref="cesiumViewer" :cesium-prop="cesiumOptions"></cesium-viewer>
</div>
</template>
<script>
export default {
name: 'cesium-demo',
data() {
return {
cesiumOptions: {
///... One of the cesium viewer options
}
};
},
mounted() {
// Accessing cesium viewer instance
console.log(this.$refs.cesiumViewer.cesium.viewer);
},
methods: {
// 方法可以直接在组件中定义并调用
}
};
</script>
<style scoped>
</style>
```
d. 自己手动绘制点线面功能:
```vue
<template>
<div>
<cesium-viewer ref="cesiumViewer" @connected="createEntities()" style="height: 100%; width: 100%" :cesium-prop="cesiumOptions"></cesium-viewer>
</div>
</template>
<script>
import * as Cesium from "cesium";
export default {
name: "cesium-demo",
data() {
return {
cesiumOptions: {
terrainProviderViewModels: [],
terrainProvider: new Cesium.EllipsoidTerrainProvider(),
mapProjection: new Cesium.WebMercatorProjection(),
baseLayerPicker: false,
geocoder: false,
homeButton: false,
sceneModePicker: false,
navigationHelpButton: false,
animation: false,
timeline: false,
},
viewer: null,
clickHandler: null,
drawingHandler: null,
measurementLabel: "",
measurementEntity: null,
drawingPolyline: null,
drawingPolygon: null,
};
},
methods: {
createEntities() {
this.viewer = this.$refs.cesiumViewer.cesium.viewer;
this.clickHandler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
this.createDrawingHandler();
},
createDrawingHandler() {
this.drawingHandler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
let positions = [];
let drawingMode = null;
let label = null;
const finishDrawing = function () {
let entity = null;
if (drawingMode === "POLYLINE") {
entity = this.viewer.entities.add({
polyline: {
positions: positions,
width: 3,
material: Cesium.Color.BLUE,
},
});
} else if (drawingMode === "POLYGON") {
entity = this.viewer.entities.add({
polygon: {
hierarchy: positions,
height: 0,
material: Cesium.Color.BLUE.withAlpha(0.5),
outline: true,
outlineColor: Cesium.Color.BLACK,
},
});
}
if (entity) {
entity.description =
'<div class="cesium-info-box"><p>' + this.measurementLabel + "</p></div>";
if (this.measurementEntity) {
this.viewer.entities.remove(this.measurementEntity);
}
this.measurementEntity = entity;
}
this.clearDrawing();
}.bind(this);
const clearDrawing = function () {
drawingMode = null;
if (this.measurementEntity) {
this.viewer.entities.remove(this.measurementEntity);
this.measurementEntity = null;
}
if (label) {
label.show = false;
label = null;
this.measurementLabel = "";
}
if (this.drawingPolyline) {
this.viewer.entities.remove(this.drawingPolyline);
this.drawingPolyline = null;
}
if (this.drawingPolygon) {
this.viewer.entities.remove(this.drawingPolygon);
this.drawingPolygon = null;
}
positions = [];
}.bind(this);
this.clickHandler.setInputAction((click) => {
const position = this.viewer.scene.pickPosition(click.position);
if (Cesium.defined(position) && drawingMode) {
positions.push(position);
if (drawingMode === "POLYLINE") {
if (this.drawingPolyline) {
this.viewer.entities.remove(this.drawingPolyline);
}
this.drawingPolyline = this.viewer.entities.add({
polyline: {
positions: positions,
width: 3,
material: Cesium.Color.BLUE,
},
});
}
if (drawingMode === "POLYGON") {
if (positions.length === 2) {
if (this.drawingPolygon) {
this.viewer.entities.remove(this.drawingPolygon);
}
this.drawingPolygon = this.viewer.entities.add({
polygon: {
hierarchy: new Cesium.CallbackProperty(() => {
if (this.viewer.scene.mode !== Cesium.SceneMode.MORPHING) {
return new Cesium.PolygonHierarchy(positions);
}
}, false),
material: Cesium.Color.BLUE.withAlpha(0.5),
height: 0,
outline: true,
outlineColor: Cesium.Color.WHITE,
},
});
} else if (positions.length > 2) {
this.viewer.entities.remove(this.drawingPolygon);
this.drawingPolygon = this.viewer.entities.add({
polygon: {
hierarchy: new Cesium.CallbackProperty(() => {
if (this.viewer.scene.mode !== Cesium.SceneMode.MORPHING) {
return new Cesium.PolygonHierarchy(positions);
}
}, false),
material: Cesium.Color.BLUE.withAlpha(0.5),
height: 0,
outline: true,
outlineColor: Cesium.Color.WHITE,
},
});
}
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
this.clickHandler.setInputAction(() => {
this.viewer.scene.screenSpaceCameraController.enableLook = false;
}, Cesium.ScreenSpaceEventType.RIGHT_DOWN);
this.clickHandler.setInputAction(() => {
this.viewer.scene.screenSpaceCameraController.enableLook = true;
}, Cesium.ScreenSpaceEventType.RIGHT_UP);
this.drawingHandler.setInputAction(() => {
finishDrawing();
}, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
document.onkeyup = (arg) => {
if (arg.keyCode == 27) {
clearDrawing();
this.drawingHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
this.drawingHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
}
};
// Set up drawing toolbar
const drawingToolbar = document.getElementById("drawingToolbar");
document.getElementById("polylineButton").addEventListener(
"click",
function () {
clearDrawing();
drawingMode = "POLYLINE";
this.measurementLabel = "Distance";
this.addToolbarLabel("Click to start drawing a line.");
}.bind(this)
);
document.getElementById("polygonButton").addEventListener(
"click",
function () {
clearDrawing();
drawingMode = "POLYGON";
this.measurementLabel = "Area";
this.addToolbarLabel("Click to start drawing a polygon.");
}.bind(this)
);
document.getElementById("clearButton").addEventListener(
"click",
function () {
clearDrawing();
this.drawingHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
this.drawingHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
}.bind(this)
);
},
addToolbarLabel: function (text) {
const toolbarLabel = document.getElementById("drawingToolbarLabel");
toolbarLabel.innerHTML = text;
if (label) {
label.show = false;
label = null;
}
label = this.viewer.entities.add({
position: Cesium.Cartesian3.fromArray(positions),
label: {
text: text,
font: "16px sans-serif",
pixelOffset: new Cesium.Cartesian2(0.0, 20),
showBackground: true,
backgroundColor: new Cesium.Color.fromCssColorString("#333333").withAlpha(0.7),
disableDepthTestDistance: Number.POSITIVE_INFINITY,
},
});
},
},
beforeDestroy() {
this.viewer = this.$refs.cesiumViewer.cesium.viewer;
this.clickHandler.destroy();
this.drawingHandler.destroy();
},
};
</script>
<style scoped>
#drawingToolbar {
position: absolute;
top: 0;
left: 0;
right: 0;
padding: 10px;
height: 50px;
background: rgba(255, 255, 255, 0.8);
border-bottom: 1px solid gray;
z-index: 9999;
display: flex;
justify-content: space-between;
align-items: center;
}
#clearButton {
margin-left: auto;
}
.cesium-info-box p {
margin: 0;
color: white;
}
</style>
```
以上代码提供了简单的使用Cesium在Vue 2中手动绘制点线面功能。
阅读全文