CSS面试重点:居中方法与BFC解析

需积分: 9 0 下载量 50 浏览量 更新于2024-08-04 收藏 67KB MD 举报
"3_sy2108 面试整理 - CSS阶段重点知识" 面试整理主要涉及了CSS阶段的一些核心概念和技术,包括水平垂直居中、Block Formatting Context(BFC)以及移动端适配策略。 ### 水平垂直居中 1. **使用margin进行固定长度的偏移** 当元素的宽度和高度已知时,可以通过设置`margin-left`和`margin-top`各为元素宽高的一半来实现居中。 2. **使用绝对定位并进行偏移** 设置父元素`position: relative;`,子元素`position: absolute;`,然后通过`left: 50%; top: 50%;`加上负margin抵消元素自身的宽高的一半,使子元素居中。 3. **使用绝对定位并margin自适应居中** 父元素`position: relative;`,子元素`position: absolute; left: 0; top: 0; right: 0; bottom: 0; margin: auto;`,这种情况下,子元素会自动在父元素中心居中。 4. **使用弹性盒子(Flexbox)** 父元素设置`display: flex; justify-content: center; align-items: center;`,可以实现子元素在父元素中水平垂直双向居中。 5. **使用定位+transform** 父元素`position: relative;`,子元素`position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);`,利用`transform`的平移功能实现居中。 6. **table-cell布局** 通过将父元素设置为`display: table-cell;`,并嵌套一层`display: inline-block;`的子元素,可以实现居中,但需要注意,table-cell不支持设置宽高,需要额外处理。 ### Block Formatting Context (BFC) BFC是一个独立的渲染区域,其中的元素不会影响外部元素的布局。创建BFC的主要目的是解决外边距重叠问题和防止其他元素对其的影响。 - 特性: - BFC内部元素按照垂直方向依次排列。 - BFC内部元素不会影响外部元素布局。 - 同一个BFC内,相邻的盒模型外边距会发生重叠。 - 创建BFC的方法: - `overflow: hidden;` - `display: flex;` - `display: inline-flex;` - `display: inline-block;` - `position: absolute;` - `position: fixed;` ### 移动端适配 在移动设备上,适配策略通常会用到单位`rem`。`rem`是相对于根元素(通常是html元素)字体大小的单位。通过设置html的`font-size`,我们可以根据设备屏幕尺寸动态调整所有元素的大小,从而实现响应式设计。 例如,我们可能会设置`html { font-size: 10px; }`,然后其他元素的尺寸基于这个基础值,如`body { font-size: 1.6rem; }`。这样,当设备屏幕尺寸变化时,只需要调整html的`font-size`,就能影响到整个页面的布局和元素尺寸。 在实际应用中,可能还会结合媒体查询(Media Queries)和其他技术,如viewport单位(vw, vh)等,来进一步优化移动端的布局适应。媒体查询可以让我们根据设备的不同特性,比如宽度、高度或分辨率,应用不同的CSS样式。 总结来说,面试整理涵盖了CSS中关键的布局技巧,包括各种居中方法、BFC的理解及其应用,以及移动端适配策略。掌握这些知识对于提升CSS布局能力至关重要。

#include <stdio.h> typedef struct { int year; float salary;} Data;int main(int argc, char* argv[]) { // Sample data Data sample_data[100]; printf("请输入样本数据的个数:"); int sample_size; scanf("%d", &sample_size); printf("请依次输入样本数据的年份和平均工资:\n"); for (int i = 0; i < sample_size; i++) { scanf("%d%f", &sample_data[i].year, &sample_data[i].salary); } // 绘制散点图 FILE* gp = _popen("gnuplot -persist", "w"); fprintf(gp, "set title 'Average Salary of Graduates'\n"); fprintf(gp, "set xlabel 'Year'\n"); fprintf(gp, "set ylabel 'Salary'\n"); fprintf(gp, "plot '-' with points pointtype 6 pointsize 1.5 title 'Sample Data'\n"); for (int i = 0; i < sample_size; i++) { fprintf(gp, "%d %f\n", sample_data[i].year, sample_data[i].salary); } fprintf(gp, "e\n"); fflush(gp); // 使用最小二乘法拟合曲线 float sx = 0, sy = 0, sxx = 0, sxy = 0; for (int i = 0; i < sample_size; i++) { sx += sample_data[i].year; sy += sample_data[i].salary; sxx += sample_data[i].year * sample_data[i].year; sxy += sample_data[i].year * sample_data[i].salary; } float a = (sxy * sample_size - sx * sy) / (sxx * sample_size - sx * sx); float b = (sxx * sy - sx * sxy) / (sxx * sample_size - sx * sx); // 将拟合曲线绘制到散点图上 fprintf(gp, "set xrange [%d:%d]\n", sample_data[0].year, sample_data[sample_size - 1].year + 1); fprintf(gp, "f(x) = %f * x + %f\n", a, b); fprintf(gp, "plot '-' with points pointtype 6 pointsize 1.5 title 'Sample Data', f(x) with lines linewidth 2 title 'Fitted Curve'\n"); for (int i = 0; i < sample_size; i++) { fprintf(gp, "%d %f\n", sample_data[i].year, sample_data[i].salary); } fprintf(gp, "e\n"); fflush(gp); // 预测明年的平均工资 int next_year; float next_salary; printf("请输入要预测的年份:"); scanf("%d", &next_year); next_salary = a * next_year + b; printf("预计 %d 年毕业生的平均工资是 %.2f\n", next_year, next_salary); return 0;}让这段代码最后拟合的曲线为二次函数以便于算出更精确的预测值

2023-05-26 上传

帮我分析这段abap代码:FUNCTION zhs_jcy_dmt001. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IM_MTART) TYPE ZHS_RANGE_MTART OPTIONAL *" VALUE(IM_MATKL) TYPE ZHS_RANGE_MATKL OPTIONAL *" VALUE(IM_SENDMSG) TYPE FLAG DEFAULT SPACE *" TABLES *" ET_DATA STRUCTURE ZHS_JCY_DTM001 OPTIONAL *"---------------------------------------------------------------------- INCLUDE zgen_bc_x_fmlog_first_phase. WAIT UP TO 3 SECONDS. INCLUDE zgen_bc_x_fmlog_last_phase. EXIT. DATA: lo_jcy TYPE REF TO zcl_hans_jcy_handle, lt_dtm001 TYPE TABLE OF zhs_jcy_dtm001, ls_dtm001 TYPE zhs_jcy_dtm001, lt_dtmc01 TYPE TABLE OF zhs_jcy_dmt01, ls_dtmc01 TYPE zhs_jcy_dmt01. "实例化类 CREATE OBJECT lo_jcy EXPORTING im_hs_tcode = gc_hs_tcode_dtm001. "判断监控点是否启用 IF lo_jcy->is_active( ) EQ zcl_hans_jcy_handle=>no. RETURN. ENDIF. PERFORM frm_get_dmtc01. REFRESH:lt_dtm001. SELECT a~mtart a~matnr b~maktx a~matkl INTO CORRESPONDING FIELDS OF TABLE lt_dtm001 FROM mara AS a INNER JOIN makt AS b ON a~matnr EQ b~matnr AND b~spras EQ sy-langu WHERE mtart IN im_mtart AND matkl IN im_matkl. DATA: l_char TYPE c, l_num TYPE n, l_len TYPE i, l_cnt TYPE i. LOOP AT lt_dtm001 INTO ls_dtm001. CLEAR l_cnt. LOOP AT gt_dtmc01 INTO gs_dtmc01 WHERE mtart EQ ls_dtm001-mtart AND zmatcode NE space. CLEAR:l_char,l_len. CONDENSE: gs_dtmc01-zmatcode. l_len = strlen( gs_dtmc01-zmatcode ). DO l_len TIMES. l_char = gs_dtmc01-zmatcode+l_cnt(1). ENDDO. ENDLOOP. ENDLOOP. CHECK lt_dtm001[] IS NOT INITIAL. ls_dtm001-statm = gc_mat_statm_k. MODIFY lt_dtm001 FROM ls_dtm001 TRANSPORTING statm WHERE statm NE gc_mat_statm_k. et_data[] = lt_dtm001[]. FREE:lt_dtm001. CHECK im_sendmsg EQ 'X'. REFRESH:gt_zhs_jcy_ab_data. CLEAR: gs_return. LOOP AT et_data INTO ls_dtm001. "设置WS参数值 CLEAR gs_zhs_jcy_ab_data. * KEY值 gs_zhs_jcy_ab_data-key03 = ls_dtm001-statm. gs_zhs_jcy_ab_data-key02 = ls_dtm001-mtart. gs_zhs_jcy_ab_data-key01 = ls_dtm001-matnr. "栏位值 gs_zhs_jcy_ab_data-field01 = ls_dtm001-mtart. gs_zhs_jcy_ab_data-field02 = ls_dtm001-matnr. gs_zhs_jcy_ab_data-field03 = ls_dtm001-maktx. gs_zhs_jcy_ab_data-field04 = ls_dtm001-zmatcode. gs_zhs_jcy_ab_data-field05 = ls_dtm001-matkl. gs_zhs_jcy_ab_data-field06 = ls_dtm001-statm. APPEND gs_zhs_jcy_ab_data TO gt_zhs_jcy_ab_data. ENDLOOP. CALL METHOD lo_jcy->call_ws_monitor EXPORTING im_zhs_jcy_ab_data = gt_zhs_jcy_ab_data IMPORTING ex_return = gs_return. FREE lo_jcy. ENDFUNCTION.

2023-07-12 上传